最性感的编辑器sublime常用配置

安装插件

可以把插件下载后,放进目录 ~/.config/sublime-text-2/Packages。
这个目录可以通过过 Preferences->Browse Packages 打开。如安装ctags插件:

cd ~/.config/sublime-text-2/Packages
git clone git://github.com/SublimeText/CTags.git

也可以通过Sublime Package Control来安装,首先去安装 Package Control, http://wbond.net/sublime_packages/package_control,安装方法上面有。
装好后,按 Ctrl+Shift+P 打开命令面板,输入Package,找到 Install Package,回车后会加载插件列表,然后搜索想要的插件安装就好了。

配置文件

Preferences->Settings-User :

{
        "color_scheme": "Packages/Color Scheme - Default/Monokai Bright.tmTheme",
        "line_padding_bottom": 1,
	"line_padding_top": 1,
	"margin": 4,
	"word_wrap": true,
	"font_face": "WenQuanYi Micro Hei Mono",
	"ignored_packages":
	[
		"Vintage"   //如果将这个注释掉,就可以用vim的快捷键啦
	],
	"highlight_line": true  //选中行高亮
}

sublime也可以支持vim的很多快捷键,基本上常用的都可以,所以开启后直接就像vim一样地用了,对于我这样的vim控来说,真爽。

一些插件

Ctags 不用说,用过vim的都应该知道,可以跳转到函数定义等

DocBlockr 用来写doc文档,如php的函数doc注释

InputHelper 解决ubuntu下面ibus输入法不能输入中文问题,虽然不完美,但凑合用

sublime-jsdocs 也是用来生成doc文档的

sublime-phpunit(https://github.com/florianeckerstorfer/sublime-phpunit) phpunit的支持,可以自动弹出一些assert函数等。

alignment 代码自动对齐插件,选中然后 ctrl+alt+a

SublimeCodeIntel 此插件的作用主要是即时代码补全

BracketHighlighter 用于高亮成对符号(引号、括号、标签)的工具。

想要将ctags生成的关键词加入到sublime自动提示里面去,也就是自动提示ctags文件,在~/.config/sublime-text-2/Packages中创建一个文件 ctags_autocomplete.py,内容如下:

# CTags based autocompletion plugin for Sublime Text 2
# You can add the file to the User Package in ~/Library/Application Support/Sublime Text 2/Packages and restart Sublime Text 2.
# generate the .tags file in your project root with "ctags -R -f .tags"

import sublime, sublime_plugin, os

class AutocompleteAll(sublime_plugin.EventListener):

    def on_query_completions(self, view, prefix, locations):
        tags_path = view.window().folders()[0]+"/.tags"
        results=[]
        if (not view.window().folders() or not os.path.exists(tags_path)): #check if a project is open and the .tags file exists
            return results
        f=os.popen("grep -i '^"+prefix+"' '"+tags_path+"' | awk '{ print $1 }'") # grep tags from project directory .tags file
        for i in f.readlines():
            results.append([i.strip()])
        results = [(item,item) for sublist in results for item in sublist] #flatten
        results = list(set(results)) # make unique
        results.sort() # sort
        return results

上面的方法是手动 DIY,可以大致了解sublime插件开发,后来我发现ctags这个插件本身已经集成这个功能的代码,只是默认配置里面关闭了,https://github.com/SublimeText/CTags/blob/master/CTags.sublime-settings,我们只需要修改~/.config/sublime-text-2/Packages/CTags/CTags.sublime-settings,将

"autocomplete": false,

改成

"autocomplete": true,

对于上面这段代码,可以看出每次进行自动提示的时候都会去读tags文件,可以优化成第一次读好后缓存起来,我改了一下:

#~/.config/sublime-text-2/Packages/CTags/ctagsplugin.py
class CTagsAutoComplete(sublime_plugin.EventListener):
    alltags = []
    def on_query_completions(self, view, prefix, locations):
        if setting('autocomplete'):
            prefix = prefix.strip().lower()
            tags_path = view.window().folders()[0]+"/.tags"
            if self.alltags:
                # print 'get from self'
                results = [sublist for sublist in self.alltags if sublist[0].lower().startswith(prefix)]
                results = list(set(results))
                results.sort()
                return results
            else:
                # print 'get all tags'
                tags = []
                f=os.popen("awk '{ print $1 }' '" + tags_path + "'")
                for i in f.readlines():
                    tags.append([i.strip()])
                tags = [(item,item) for sublist in tags for item in sublist] #flatten
                tags = list(set(tags)) # make unique
                tags.sort()
                self.alltags = tags
                results = [sublist for sublist in self.alltags if sublist[0].lower().startswith(prefix)]
                results = list(set(results))
                results.sort()
                return results

上面的实现会有一个问题,就是我重新生成ctags文件以后,新生成的东西不会生效,因为只会第一次加载的时候去读ctags文件。我们要修改一下,当运行rebuild_tags命令的时候,把我们加载的ctags列表清空。

首先写一个类用于保存加载好的ctags关键字列表:

class GetAllCTagsList():
    ctags_list = []
    """get all the ctags list"""
    def __init__(self, list):
        self.ctags_list = list

然后把上面的代码改成从GetAllCTagsList获取加载的列表:

# if self.alltags:改成

if GetAllCTagsList.ctags_list:

# self.alltags = tags改成

GetAllCTagsList.ctags_list = tags

最后,在重新生成ctags类中添加一句代码,把GetAllCTagsList中的ctags_list变量清空:

class rebuild_tags(sublime_plugin.TextCommand):
    def run(self, edit, **args):
	# 中间代码省略
        GetAllCTagsList.ctags_list = []

以上修改我已经提交到github:https://github.com/SublimeText/CTags/pull/108

快捷键

Ctrl+/ 注释
Ctrl+D 选中光标所在字符串 (按住继续选择下个相同字符串)
Alt+F3 选中与光标处相同的全部词
Ctrl+M 光标移动至括号前或后
Ctrl+Shift+M 选中括号内的内容(按住继续选中前后括号)
Ctrl+L 选中行(按住继续选中下行)
Ctrl+J 合并行
Ctrl+Shift+↑ 与上行互换
Ctrl+Shift+K 删除整行
Ctrl+Shift+D 复制整行
Ctrl+Shift+L 同时编辑所选行
Ctrl+K,Backspace 从光标处删除至行首
Ctrl+K,K 从光标处删除至行尾
Ctrl+Enter 光标所在行后插入行
Ctrl+Shift+Enter 光标所在行前插入行
Ctrl+F2 设置书签
F2 下一个书签
Shift+F2 上一个书签
Alt+Shift+2 窗口两列显示
Alt+Shift+8 窗口两行显示
Ctrl+K,B 开启/关闭侧边栏,按住 Ctrl 、按 K 、松开、再按 B ;
Ctrl+PageDown 、Ctrl+PageUp 文件按开启的前后顺序切换
Ctrl+P 快速搜索切换文件,再输入 @ 查找文件主标题/函数;或者输入 :,跳转到文件某行;

ubuntu中将sublime加入命令行

sudo ln -s ~/Sublime\ Text\ 2/sublime_text /usr/bin/sublime

将sublime添加到ubuntu的启动器中,在/usr/share/applications中新建一个sublime.desktop的文件:

    #!/usr/bin/env xdg-open
    [Desktop Entry]
    Name=Sublime Text 2
    Comment=Sublime Text 2
    Exec=/home/serho/tools/"Sublime Text 2"/sublime_text
    Icon=/home/serho/tools/Sublime Text 2/Icon/48x48/sublime_text.png
    Terminal=false
    Type=Application
    Categories=Application;Development;
    StartupNotify=true

然后把这个文件拖到启动器上去就可以了。