编辑器之神
一直使用 Vim 写代码,有 YouCompleteMe,align,ultisnips,tagbar,nerdtree,SrcExpl, syntastic,vcscommand,doxygen-support 等大臣辅佐,写起代码来有滋有味。 Vim 可以自由的映射快捷键,安装各种插件,所以可以最大程度的把手留在键盘上,不愧是编辑器之神。 曾经用过两三个月的神之编辑器 — emacs,它的地位还真不适合我这样的低级别的人去使用, 一是右手小指很受伤(用过的人都知道,emacs ctrl 到死),二是个人感觉 emacs 的社区 不如 Vim 活跃,插件不如 Vim 丰富。
编译安装 Vim
使用源码编译安装 Vim 的好处是能够用上最新的补丁。安装很简单:
获取源码
$ cd $vimsrc
$ hg clone https://vim.googlecode.com/hg/ vim
$ cd vim
$ hg pull
$ hg update
编译安装
$ make uninstall
$ make distclean
$ make uninstall
$ make distclean
$ ./configure --enable-gui=gnome2 \
--disable-gtktest \
--enable-perlinterp=yes \
--enable-pythoninterp=yes \
--enable-python3interp=yes \
--enable-luainterp=yes \
--enable-tclinterp=yes \
--enable-rubyinterp=yes \
--enable-cscope \
--enable-multibyte \
--enable-xim \
--enable-fontset \
--enable-sniff \
--with-features=huge
$ cd src
$ make
$ sudo make install
$ make clean
配置 Vim 参数
配置缩进,高亮搜索,展开 tab 等参数:
$ gvim ~/.vimrc
写入:
set tabstop=4
set expandtab
set softtabstop=4
set shiftwidth=4
set incsearch
set hlsearch
set smartindent
set cindent
set nu
set foldcolumn=2
"set textwidth=80
set colorcolumn=80
set laststatus=2
set nocompatible
set showcmd
安装 NeoBundle 管理各种插件
根据 NeoBundle 的 README 步骤即可。 .vimrc 中写入:
" neobundle {{{
set nocompatible " Be iMproved
if has('vim_starting')
set runtimepath+=~/.vim/bundle/neobundle.vim/
endif
call neobundle#rc(expand('~/.vim/bundle/'))
" Let NeoBundle manage NeoBundle
NeoBundleFetch 'Shougo/neobundle.vim'
filetype plugin indent on " Required!
NeoBundleCheck
" }}}
这样每次在 .vimrc中使用 NeoBundle 命令添加插件的源码路径之后,启动 Vim
时 NeoBundle 会自动检测是否有未安装的 插件。
也可以在 Vim 中运行命令 :NeoBundleInstall
手动安装。
安装 YouCompleteMe 实现代码自动补全
YouCompleteMe 使用 LibClang 进行代码语义补全,而非使用 etags ,所以需要安装 LLVM 和 Clang,最新版本是 3.3。 如果没有安装则在编译安装时会自动下载。 安装的说明已经在项目主页说得很明白了,使用之前要最好先看过 FAQ, 特别是语义补全缓慢的问题。
在 .vimrc 中添加安装 YouCompleteMe 的命令
NeoBundle 'git://github.com/Valloric/YouCompleteMe.git'
启动 Vim clone YouCompleteMe 的源码,进入源码的路径执行编译命令:
$ cd ~/.vim/bundle/YouCompleteMe/
$ mkdir build
$ cd build
$ cmake -G "Unix Makefiles" -DUSE_SYSTEM_LIBCLANG=ON ~/.vim/bundle/YouCompleteMe/cpp
$ make -j8
根据喜好配置快捷键
" YouCompleteMe {{{
let g:ycm_min_num_of_chars_for_completion = 1
let g:ycm_confirm_extra_conf = 0
let g:ycm_complete_in_comments_and_strings = 1
let g:ycm_add_preview_to_completeopt = 0
let g:ycm_key_list_select_completion = ['<C-N>', '<Down>']
let g:ycm_key_invoke_completion = '<C-J>'
let g:ycm_filetype_specific_completion_to_diable = { 'cpp' : 1 }
let g:ycm_filetype_whitelist = { 'cpp' : 1, 'c' : 1 }
let g:ycm_filetype_blacklist = {
\'vim' : 1,
\'vimshell' : 1,
\'snippets' : 1,
\'cmake' : 1,
\'html' : 1
\}
set completeopt=menuone,longest
set pumheight=15
" }}}
使用 syntastic 对代码进行语法检查
syntastic 与 YouComleteMe 结合对语法 进行检查,并将警告和错误信息显示在行号那一栏的左侧。添加下面的命令安装 syntastic:
$ NeoBundle 'git://github.com/scrooloose/syntastic.git'
配置警告和错误提示符号,启用高亮,提示信息的格式:
" syntastic {{{
let g:syntastic_error_symbol='✗'
let g:syntastic_warning_symbol='⚠'
let g:syntastic_enable_highlighting = 1
let g:syntastic_stl_format = '[%E{Err: %fe #%e}%B{, }%W{Warn: %fw #%w}]'
" }}}
安装 nerdtree, tagbar, SrcExpl
- nerdtree 用来显示文件系统的目录和文件, 可以方便的对目录和文件进行增删查改操作。
- tagbar 使用 exuberant-ctags 解析正在编辑的 buffer 的 tag 并显示在侧边栏,这对编写比较长的代码时特别有用。
- SrcExpl 显示当前光标所在的 token 的代码。
安装很简单,添加下面的命令到 .vimrc 即可:
NeoBundle 'git://github.com/majutsushi/tagbar.git'
NeoBundle 'git://github.com/scrooloose/nerdtree.git'
NeoBundle 'git://github.com/wesleyche/SrcExpl.git'git
配置各个插件的显示位置,开启和关闭的快捷键:
" tagbar {{{
let g:tagbar_left = 1
let g:tagbar_singleclick = 1
let g:tagbar_autoshowtag = 1
let g:tagbar_show_visibility = 1
let g:tagbar_ctags_bin="/usr/local/bin/ctags"
" }}}
" NERDTree {{{
let g:NERDTreeWinPos = 'right'
" }}}
" source explorer {{{
let g:SrcExpl_winHeight = 8
let g:SrcExpl_refreshTime = 300
" // Set "Enter" key to jump into the exact definition context
" let g:SrcExpl_jumpKey = "<ENTER>"
" // Set "Space" key for back from the definition context
" let g:SrcExpl_gobackKey = "<SPACE>"
let g:SrcExpl_pluginList = [
\ "__Tag_List__",
\ "_NERD_tree_",
\ "Source_Explorer"
\ ]
let g:SrcExpl_searchLocalDef = 1
let g:SrcExpl_isUpdateTags = 0
let g:SrcExpl_updateTagsCmd = "ctags --sort=foldcase -R ."
"let g:SrcExpl_updateTagsKey = "<F12>"
" }}}
" Configure like an IDE {{{
" " Open and close the srcexpl.vim separately
autocmd FileType c,cpp,cmake nmap <Leader>src :SrcExplToggle<CR>
" " Open and close the taglist.vim separately
autocmd FileType c,cpp,cmake nmap <Leader>tag :TagbarToggle<CR>
" " Open and close the NERD_tree.vim separately
"autocmd FileType c,cpp,cmake nmap <Leader>nt :NERDTreeToggle<CR>
nmap <Leader>nt :NERDTreeToggle<CR>
" }}}
使用 ultisnips 快速插入代码片段
ultisnips内置了很多代码片段,并且支持自定义。
安装:
NeoBundle 'git://github.com/SirVer/ultisnips.git'
配置快捷键:
" ultisnipptes {{{
let g:UltiSnipsExpandTrigger="<TAB>"
let g:UltiSnipsJumpForwardTrigger="<TAB>"
let g:UltiSnipsJumpBackwardTrigger="<S-TAB>"
let g:UltiSnipsRemoveSelectModeMappings = 0
" }}}
使用 delimitMate 进行括号自动补全
NeoBundle 'git://github.com/Raimondi/delimitMate.git'
配置回车自动缩进等参数:
" delimitMate {{{
let delimitMate_expand_cr = 1
let delimitMate_jump_expansion = 1
" }}}
安装 solarized 主题
NeoBundle 'git://github.com/Raimondi/delimitMate.git'
使用 dark 背景:
" Solarized Colorscheme Config {{{
let g:solarized_termtrans=1 "default value is 0
let g:solarized_hitrail=1 "default value is 0
syntax enable
set background=dark
let g:solarized_termcolors=256
colorscheme solarized
" }}}
安装 VCSCommand 操作各种版本控制系统
NeoBundle 'git://repo.or.cz/vcscommand'
使用 doxygen-support 编写 doxygen 注释
NeoBundle 'https://github.com/vim-scripts/doxygen-support.vim.git'
doxygen-support 提供很多全局变量,可以通过修改它们的值实现自定义代码风格。
" doxgen {{{
let g:DoxygenToolkit_paramTag_post = " "
let g:load_doxygen_syntax = 1
" }}}
使用 align 格式化代码
align 能很方便的格式化代码, 是写漂亮代码的好助手。安装过程见链接。使用示例详见这位大叔的网站:http://www.drchip.org/astronaut/vim/align.html#Examples 。