(不再更新,最新版本为 http://blog.csdn.net/xzz_hust/article/details/72731307)
重新要在linux下学习了,很久没折腾vim了,以前的一些技巧都基本忘了,现在重新学习,一点点折腾,把过程记录下来.打造属于自己的vim. 条目按学习的时间顺序排序.
用了几天终端下的vim, 今天(140412)发现gvim更漂亮而且更好用, 特别是换了 Consolas字体之后, 跟在windows下用vs编程的字体一样了, 瞬间感觉熟悉了好多, 继续折腾!
我的.vimrc配置文件:https://github.com/xuzhezhaozhao/my_vimrc/blob/master/_vimrc
1. 基本设置
set nocompatible " 使用vim设置,不使用vi设置模式,推荐设置
set cindent " C编程情况下的自动缩进,当输入一个大括号然后回车时,会自动缩进一个tab
set nu " 显示行号
set ruler " 设置状态栏标尺
set tabstop=8 " 设置一个tab为8个空格大小
set expandtab " 用 space 代替tab输入
set cursorline " 高亮当前行
hi CursorLine cterm=NONE ctermbg=darkred ctermfg=white guibg=darkred guifg=white " 高亮颜色设置, 个人不太喜欢, 默认最好
set cursorcolumn " 高亮列, 不太习惯, 我没使用
set hlsearch " 高亮搜索结果, 输入 :set nohl 取消高亮的搜索结果
set cc=80 " 设置标尺,高亮显示第80行
set autochdir " 自动设置当前编辑的文件所在路径为工作路径, 用 gvim直接打开文件时有用
set so=3 " 光标在上下边界还有3行时就开始自动滚屏
set ignorecase smartcase " 搜索时默认不区分大小写,只有搜索关键字中出现一个大字母时才区分大小写
set incsearch " 即时搜索, 边输入边搜索
set showcmd " 命令模式时显示输入的命令
syntax on “ 语法高亮
filetype plugin on " 文件类型检查
set backspace=indent,eol,start " 设置backspeac键可以删除字符
set whichwrap=<,>,[,],h,l " 具体查看 :help, 设置左右方向键在行头行尾是否转至上/下一行
2. 常用命令
- 搜索
在单词下按 * 号搜索该单词
:nohl 取消高亮的搜索结果
:set ignorecase "设置大小写区分
:set noignorecase " 不区分大小写
/string " 向下搜
?string " 向上搜
/\<word\> " 搜索匹配的单词,而不是字符串
n 下一个搜索结果
N 上一个搜索结果
- 替换
range | 指的是范围,1,7 指从第一行至第七行,1,$ 指从第一行至最后一行,也就是整篇文章,也可以 % 代表。 % 是目前编辑的文章,# 是前一次编辑的文章。 |
pattern | 就是要被替换掉的字串,可以用 regexp 來表示。 |
string | 将 pattern 由 string 所取代。 |
c | confirm,每次替换前会询问。 |
e | 不显示 error。 |
g | globe,不询问,整行替换。 |
i | ignore 不分大小写。 |
全局替换
:%s/pattern/string/g
替换单词
:%s/\<word\>/string/g
- 大小写替换
~ 将光标下的字母改变大小写
3~ 将光标位置开始的3个字母改变其大小写
g~~ 改变当前行字母的大小写U 将可视模式下选择的字母全改成大写字母
u 将可视模式下选择的字母全改成小写
gUU 将当前行的字母改成大写
3gUU 将从光标开始到下面3行字母改成大写
guu 将当前行的字母全改成小写
gUw 将光标下的单词改成大写。
guw 将光标下的单词改成小写。
vim中大小写转化的命令是
gu或者gU
形象一点的解释就是小u意味着转为小写;大U意味着转为大写.
剩下的就是对这两个命令的限定(限定操作的行,字母,单词)等等
- 其他
- 折叠命令
zo 打开当前的折叠
zm 关闭所有折叠
zM 关闭所有折叠及其嵌套的折叠
zr 打开所有折叠
zR 打开所有折叠及其嵌套的折叠
zd 删除当前折叠
zE 删除所有折叠
zj 移动至下一个折叠
zk 移动至上一个折叠
zn 禁用折叠
zN 启用折叠
3. 代码片段的插件: UltiSnips
使用方法: 按官网教程下载tar包安装好, 然后下载default snippets后将其中文件解压出来放在UltiSnips文件夹中. 编辑 UltiSnips文件夹中对应的文件即可编辑每种文件使用的snippets.
4. 插件管理插件: pathogen (不用了,使用后面介绍的Vundle插件)
管理插件的插件. 安装其它插件时很方便.
5. 语法检查插件: Syntastic
:w 保存文件后会自动检查语法错误, 并在出错位置给出提出, 很好用.
6. quickfix 内置命令的使用方法
quickfix功能将编译过程中产生的错误信息保存到文件中,然后vim利用这些信息跳转到源文件的对应位置,我们就可以进行错误的修正,之后跳到下一个错误重复上述操作,从而极大地提高编译错误的修改效率。
在vim中除了文本编辑功能外,还可以直接地调用外部的编译器完成程序的编译工作,实现这一功能,只要简单地使用vim命令:
1 | : make |
make命令执行的程序为vim变量makeprg的值,默认makeprg=make,使用Makefile机制进行项目的编译、管理。可以通过set makeprg=xxx的命令修改makeprg的值,从而使make命令执行不同的编译。例如:
1 | : set makeprg=gcc\ hello.c\ -o\ hello |
查看在线帮助,通过命令:
1 | :help quickfix |
常用的quickfix命令为:
1 | :cc 显示详细错误信息 |
2 | :cp 跳到上一个错误 |
3 | :cn 跳到下一个错误 |
4 | :cl 列出所有错误 |
5 | :cw 如果有错误列表,则打开quickfix窗口,没有则什么也不错 |
6 | :copen 打开quickfix窗口,可以在后面添加窗口高度参数,如 10 行: :copen 10 |
7 | :cclose 关闭quickfix窗口 |
8 | :col 到前一个旧的错误列表 |
9 | :cnew 到后一个较新的错误列表 |
7. 自动补全插件: OmniCppComplete (可以不用了,Youcompleteme更强大)
需要 Exuberant Ctags的支持. ubuntu 使用如下命令下载:
# sudo apt-get install exuberant-ctags
使用如下命令生成库函数及变量的tags:
# cd /usr/include
# sudo ctags -R --c++-kinds=+p --fields=+iaS --extra=+q
再在.vimrc文件添加如下行:
set tags+=/usr/include/tags
及
set nocp
filetype plugin on
默认的补全命令为
CTRL X + CTRL O, 可以映射为 CTRL + F12:
map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR> " 生成tags文件
CTRL + E 取消补全, 返回之前输入的字符状态.
不过对于STL的补全有问题, 可以使用 tags for std c++ 这个插件, 完美实现对STL补全.
8. 添加对STL的补全插件: tags for std c++
第7条已经提到了.
9. 函数参数自动补全及代码片段插件: code_complete
在.vimrc中更改热键为 CTRL + L. 使用 tab作热键会与UltiSnips插件冲突.
let g:CodeCompl_Hotkey="<C-L>"
本插件也是基于tags的, 先要生成tags, 输入 "函数名+(" 后按 热键 自动补全参数, 使用tab切换参数.
本插件也可以定义代码片段, plugin 文件夹下 .template 文件中可定义代码片段, 也可以在.vim 文件夹下的 templates文件夹建立.cpp文件, 文件名即为代码片段的快捷键,文件内容为代码片段.
10. 自动跳转到定义处
跳转功能的实现也是基于tags的, 生成好tags之后, 在函数名下 按 CTRL + ] 会自动跳转到函数定义处, 再按 CTRL + O 即可返回跳转前的位置.
11. 超级tab键插件: SuperTab
使用tab键智能补全, 不用一直按ctrl p, ctrl n了. 超赞!
12. 高亮单词插件: Mark
文档中的<Leader>m 表示 \m.
支持正则式的匹配高亮.
常用命令:
\m 用来使得光标处的单词着色
\n 使得原先着色的单词取消着色
\r 输入\r后再输入正则表达式,可以高亮匹配的相关单词
参考本篇博客: http://blog.csdn.net/jibing57/article/details/7847834
13. 映射CTRL + S键保存
禁用掉终端CTRL+S快捷键功能
“CTRL-S:挂起终端(XON)
“CTRL-Q:恢复终端(XOFF)
“要禁止这些键盘映射,在~/.bashrc中加入
stty -ixon
然后修改vim中的按键映射,在 ~/.vimrc中加入
nmap <C-S> :update<CR>
vmap <C-S> <C-C>:update<CR>
imap <C-S> <C-O>:update<CR>
14. gvim下字体设置
注意终端vim中无法更改字体, 以下设置针对gvim. 推荐使用这款字体 Consolas + 中文雅黑混合版, 备份下载地址:http://pan.baidu.com/s/1dDGcVLJ, 并在.vimrc中加入如下行:
set guifont=YaHei\ Consolas\ Hybrid\ 12,Fixed\ 12
使用
:set guifont=* 命令可查看字体列表.
15. gvim 中使用pyclewn进行调试
参考: http://easwy.com/blog/archives/advanced-vim-skills-vim-gdb-pyclewn/
pyclewn 下载地址: http://sourceforge.net/projects/pyclewn/
在pyclewn的源码目录中有一个名为INSTALL的文件,介绍了如何在UNIX以及windows上安装pyclewn.
安装完pyclewn后,启动gvim,执行:help pyclewn命令,就可以看到pyclewn的帮助文件,里面有很多有用的信息。
在gvim中使用 :Pyclewn 命令即可启动Pyclewn调试模式.
:Cfile a.out // 加载调试文件
:Cbreak 50 // 设置断点
C命令后面的内容会传递给GDB.
设置好断点之后,就可以开始调试了。pyclewn已经定义了一些调试相关的键映射,我们可以通过下面的命令加载这些键映射:
:Cmapkeys
执行这条命令后会自动列出所以的键映射.
(gdb) mapkeys
C-B : break "${fname}":${lnum} # set breakpoint at current line
C-D : down
C-E : clear "${fname}":${lnum} # clear breakpoint at current line
C-N : next
C-P : print ${text} # print value of selection at mouse position
C-U : up
C-X : print *${text} # print value referenced by word at mouse position
C-Z : sigint # kill the inferior running program
S-A : info args
S-B : info breakpoints
S-C : continue
S-F : finish
S-L : info locals
S-Q : quit
S-R : run
S-S : step
S-W : where
S-X : foldvar ${lnum} # expand/collapse a watched variable
如果觉得pyclewn缺省所设置的键映射不能满足自己的需求,也可以自己定义更多GDB调试键映射,方法是把pyclewn 发行目录中的runtime目录中的.clewn_keys.gdb拷贝到你的HOME目录,然后修改此文件定制自己的键绑定即可。
常用命令:
:Cfile a.out " 加载调试文件
:nbclose " 关闭调试
:set previewheight=8 " 设置调试窗口大小
:Cdbgvar var " 添加变量var监视
:Cdelvar var " 删除变量var监视
:Chelp " GDB命令帮助
:Cproject " 保存当前调试设置到一个工程文件中
:C<C-D> " 列出所有调试命令
:Chelp <C-D> " 列出所有GDB帮助命令
:sb (clewn)_dbgvar “ 新建变量监视窗口
在watch变量时, 有些变量为class, 可以用快捷键 'X' 展开其内容.
set previewheight=6 " 设置调试窗口大小, 宽度为 8
16. 源码安装 vim / 更新vim
参考: http://www.vim.org/mercurial.php
更新vim时使用源码安装, 安装参考网址中给出的方法即可,但默认编译没用加入python支持,可以修改src/Makefile文件,将以下行的 注释 “#” 去掉即可。
#CONF_OPT_PYTHON = --enable-pythoninterp
另外还有加入gui的支持, 要不然只是终端vim更新了, gvim没有更新. 请参考 How to build vim with gui option from sources 这个帖子.
最后用 update-alternatives 命令更新命令优先级.
补充: 最近google被墙了, 用 hg 下不到vim最新的源码了, 可以用goagent代理, ubuntu下 System settings -> Network -> Network proxy -> Method 选 Manual, http, https proty都填入127.0.0.1, 端口8087, 然后点 Apply system wide.
但现在用hg命令down vim源码还是会有问题, 参考 给mercurial hg设置goagent代理 这篇博客修改hg配置文件即可.
17. taglist 插件:taglist(写C/C++下面的tagbar更好用些,变量之类的显示的更好)
常用命令:
:help taglist.txt
:TlistToggle “ 打开taglist窗口, 不跳转 :TlistOpen " 打开taglist窗口,并跳转到taglist窗口 let Tlist_Auto_Open=1 " .vimrc, 启动vim时自动打开taglist窗口let Tlist_Exit_OnlyWindow " .vimrc, 当仅有taglist窗口时,退出vim
set updatetime=100 " .vimrc, 根据光标位置自动更新高亮tag的间隔时间,单位为毫秒
:TlistAddFiles /my/project/dir/*.c ” 添加taglist的文件
:TlistAddFilesRecursive /my/project/dir *.c" 递归添加文件
let Tlist_Show_One_File=1 " 只显示当前文件的taglist
:TlistUpdate " 更新taglist,当使用 d 删除一个taglist文件后,使用可命令可重新显示该文件
zc / - " 折叠
zo / + “ 展开
zR / * " 全部展开
zC " 全部折叠
x " 最大 / 最小 taglist窗口
let Tlist_File_Fold_Auto_Close=1 " 自动折叠非当前文件list
18. tagbar插件:tagbar
在显示变量方面比taglist好,推荐使用。
常用命令:
:TagbarOpen
:TagbarToggle
折叠命令与taglist类似,可以使用vim内置的折叠命令
zR " 全展
zM " 全折
let g:tagbar_left=1 " 使其出现在左边
set updatetime=100 " 根据光标位置自动更新高亮tag的间隔时间,单位为毫秒
let g:tagbar_width=25 " 设置窗口宽度
" let g:tagbar_compact=1 " 不显示顶部帮助信息,节省空间
let g:tagbar_show_linenumbers = 1 " 显示绝对行号
let g:tagbar_expand = 1 " 自动扩展gui窗口
" autocmd VimEnter * nested :TagbarOpen " 启动vim时自动打开tagbar
autocmd VimEnter * nested :call tagbar#autoopen(1) " 若文件类型支持,则自动打开tagbar
autocmd BufEnter * nested :call tagbar#autoopen(0) " 打开新标签时,自动打开tagbar
19. 快速注释插件:NERD Commenter
:help NERD_commenter.txt
C/C++注释比较方便。
20. 参考vimrc文件
一个大牛的vimrc配置文件,看了一下,学到了很多东西,把其中一些加入到自己的vimrc文件中了。
修改版:http://blog.csdn.net/redguardtoo/article/details/1172136
21. 括号的自动补全和删除 (不用了,可以使用 auto-pairs插件,更方便)
参考:http://oldj.net/article/vim-parenthesis/
自动补全:
" 插入匹配括号
inoremap ( ()<LEFT>
inoremap [ []<LEFT>
inoremap { {}<LEFT>
" 按退格键时判断当前光标前一个字符,如果是左括号,则删除对应的右括号以及括号中间的内容
function! RemovePairs()
let l:line = getline(".")
let l:previous_char = l:line[col(".")-1] " 取得当前光标前一个字符
if index(["(", "[", "{"], l:previous_char) != -1
let l:original_pos = getpos(".")
execute "normal %"
let l:new_pos = getpos(".")
" 如果没有匹配的右括号
if l:original_pos == l:new_pos
execute "normal! a\<BS>"
return
end
let l:line2 = getline(".")
if len(l:line2) == col(".")
" 如果右括号是当前行最后一个字符
execute "normal! v%xa"
else
" 如果右括号不是当前行最后一个字符
execute "normal! v%xi"
end
else
execute "normal! a\<BS>"
end
endfunction
" 用退格键删除一个左括号时同时删除对应的右括号
inoremap <BS> <ESC>:call RemovePairs()<CR>a
" 输入一个右括号时,如果上一个字符也是右括号,则删除它,避免出现重复字符
function! RemoveNextDoubleChar(char)
let l:line = getline(".")
let l:next_char = l:line[col(".")] " 取得当前光标后一个字符
if a:char == l:next_char
execute "normal! l"
else
execute "normal! i" . a:char . ""
end
endfunction
inoremap ) <ESC>:call RemoveNextDoubleChar(')')<CR>a
inoremap ] <ESC>:call RemoveNextDoubleChar(']')<CR>a
inoremap } <ESC>:call RemoveNextDoubleChar('}')<CR>a
22. 启动时自动最大化gvim窗口
具体过程如下:1. 安装wmctrl:
sudo apt-get install wmctrl
2. 在 ~/.vimrc 中加上:
" 最大化窗口
function Maximize_Window()
silent !wmctrl -r :ACTIVE: -b add,maximized_vert,maximized_horz
endfunction
3. 在 ~/.bashrc 中加上:
alias gvim='gvim -c "call Maximize_Window()"'
4. 修改 /usr/share/applications/gvim.desktop 文件,将 Exec一栏的内容改为如下:
Exec=gvim -f %F -c "call Maximize_Window()"
23. 一键编译单个源文件
vim中 变量 % 表示 当前文件名。help %< 可以查看更多。
如此只需在vimrc中如下设置:
set makeprg=g++\ -g\ %
设置F5一键编译:
nmap <F5> :make<CR>
vmap <F5> <C-C>:make<CR>
imap <F5> <C-O>:make<CR>
24. vim抓取光标下的单词,可用于map中
expand("<cword>")
Cscope文档中推荐的映射:
nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR>
<C-R>=是什么意思?赋值语句?<C-R>是插入某个寄存器值的意思,=是表达式寄存器的意思。所以这句话是在命令行插入expand("<cword>")的值,也就是当前光标下的单词。
其实在<C-R>后再输入<C-W>就是当前光标下单词的意思,<C-R><C-W><C-R>与<C-R>=expand("<cword>")<C-R>应该是等效的。
25. 录制宏
开始录制:ESC - q a ( a 表示将宏存储在寄存器a中 )
停止录制:q
播放宏:98@a ( 重复播放宏98次 )
26. 提示函数原型插件:echofunc (!!!! 这个插件最后别用,会与后面的自动补全插件 YouCompleteme 冲突 ,使得vim完全卡死!!! 这个问题我搞了一天,最后才发现是因为插件冲突!)
鼠标放在函数名上时显示函数原型,基于tags,输入函数名 + ‘(’ 显示函数原型,不爽的是不能跟括号自动补全功能一起用。
27. 使用自带插件netrw远程编辑文件
vim从7.0之后就自带插件netrw了,该插件用了浏览文件,也可以远程编辑文件,非常方便,支持ssh, ftp, http. 由于安全问题,每次保存远程文件都要输入密码,所有可以参考netrw的help文档中的netrw-hack-ssh一块解决每次输入密码的问题,或者看这里Linux下无需输入密码自动登陆ssh服务器方法。编辑方法非常简单:
vim scp://xuzz@192.168.0.104/
会列出xuzz账号主目录的所有文件。
也可以指定编辑文件:
vim scp://xuzz@192.168.0.104/test/netrw.test
注意不要用 /home/xuzz 路径前缀,因为前面已经表示了是主机 192.168.0.104 的 /home/xuzz 目录。
当然也可启动vim之后再编辑,如在vim中:
e scp://xuzz@192.168.0.104/test/netrw.test
tabedit scp://xuzz@192.168.0.104/test/netrw.test
跟编辑本地文件是一样的。
28. 杀手级插件:CtrlP
Vim的CtrlP基本完全实现了sublime的功能,可以模糊查询定位:工程下的所有文件,打开的buffer,buffer内的tag,最近访问的文件。通过externsion,甚至可以定位mark,register,cmdline history,yankring。虽然在操作体验上还不如sublime,但是功能上已经超越了师傅,更是拉下fuzzyfinder,lookupfiles这些老一辈Vim插件好几条街。
Note:
1. 要新建文件,只需输入文件名,然后按 ctrl - y,支持自动新建目录,非常方便。
2. ctrl - b 和 ctrl - f: 切换搜索文件模式,file,buffer, MRU等
3. ctrl - z: 标记多个文件
4. ctrl - o: 打开标记的文件
5. ctrl - t: 在new tab中打开文件
6. ctrl - d: 在 path 与 file 匹配模式间切换
29. 自动保存插件:auto save
在.vimrc文件中添加如下行启用该插件:
let g:auto_save = 1 " enable AutoSave on Vim startup
30. 解决中文乱码问题
有时候打开在windows写写的代码时会发现中文有乱码,解决方法也很简单,在.vimrc文件中添加如下行:
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
31. 杀手级插件:Vundle
也是用来管理插件的插件,但比pathogen好用,支持升级插件,非常方便,强烈建议使用。
32. 超强自动补全插件:Youcompleteme
注意:
1. 使用这个插件一定不要用 echofunc 这个插件,两个插件有冲突,会使得vim卡死!
2. 发现一个很奇怪的问题,在设置启动vim时自动打开 Tagbar 和 Nerdtree 时,自动补全功能有时候会失效!
这个插件应该是vim下最强的代码补全插件了,支持模糊匹配,对于C/C++,可以支持语义补全,就跟VS差不多了,补全效果也确实可以媲美VS + Assist X 了。插件的安装也比较复杂,应该所有vim插件里面最麻烦的了。
安装:
按照作者提供的安装方法,使用quick installation。
1. 先用Vundle安装Youcompleteme
2. 执行下面的命令
sudo apt-get install build-essential cmake
sudo apt-get install python-dev
cd ~/.vim/bundle/YouCompleteMe
./install.sh --clang-completer
3. 配置.ycm_extra_conf.py 文件 .
在 .vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/ 目录下有一份作者提供的模板,
在flag里面添加如下内容(系统文件用-isyetem,第三方文件用 -I):
'-isystem',
'/usr/include',
'-isystem',
'/usr/include/c++/'
如果要让其对C++标准库补全生效,还要把配置文件中的这几行(从try到pass这4行)注释掉:
# NOTE: This is just for YouCompleteMe; it's highly likely that your project
# does NOT need to remove the stdlib flag. DO NOT USE THIS IN YOUR
# ycm_extra_conf IF YOU'RE NOT 100% SURE YOU NEED IT.
try:
final_flags.remove( '-stdlib=libc++' )
except ValueError:
pass
因为Youcompleteme会占用tab键,使得UltiSnips 代码片段无法使用,可以按这里的办法解决,即在.vimrc中加入3行:
let g:ycm_key_list_select_completion = ['<C-TAB>','<Down>']
let g:ycm_key_list_previous_completion = ['<C-S-TAB>','<Up>']
let g:SuperTabDefaultCompletionType = '<C-Tab>'
这样UltiSnips的tab优先级高,就不冲突了。
可以在.vimrc中对插件进行设置,并且支持进行语义的跳转,而不是像基于tags的胡乱跳。
因为YCM默认开启来syntastic功能,即静态预防检查,随着你的输入会刷新gutter,以显示错误或警告的signs。如果你还使用vim-gitgutter插件,则无法正常显示。这时我的做法是,关闭YouCompleteMe的syntastic,独立安装syntastic插件。
let g:ycm_show_diagnostics_ui = 0 " 关闭ycm的syntastic
33. 文件浏览插件:NerdTree
以树形目录显示文件,浏览起来很方便。
34. 使得Nerdtree 和 Tagbar 共用左边一个窗口,效果如下:
+-----------+-------------+
| nerd tree | edited file |
| contents | |
+-----------+ |
| tagbar | |
| contents | |
+-----------+-------------+
方法参考了 这里 ,仅加入了修改窗口宽度的语句,使用原方法会使得两个水平窗口一样宽, 在 .vimrc 中加入如下代码:
" =========== NERDTree 和 Tagbar 共用一个窗口 ========
function! ToggleNERDTreeAndTagbar()
let w:jumpbacktohere = 1
" Detect which plugins are open
if exists('t:NERDTreeBufName')
let nerdtree_open = bufwinnr(t:NERDTreeBufName) != -1
else
let nerdtree_open = 0
endif
let tagbar_open = bufwinnr('__Tagbar__') != -1
" Perform the appropriate action
if nerdtree_open && tagbar_open
NERDTreeClose
TagbarClose
elseif nerdtree_open
TagbarOpen
wincmd J
wincmd k
wincmd L
elseif tagbar_open
NERDTree
wincmd J
wincmd k
wincmd L
else
NERDTree
TagbarOpen
wincmd J
wincmd k
wincmd L
endif
" 改变窗口宽度
vertical resize +50
" Jump back to the original window
" for window in range(1, winnr('$'))
" execute window . 'wincmd w'
" if exists('w:jumpbacktohere')
" unlet w:jumpbacktohere
" break
" endif
"endfor
endfunction
" nnoremap <leader>\ :call ToggleNERDTreeAndTagbar()<CR>
" 打开 vim 时自动打开 NERDTree 和 Tagbar
autocmd vimenter * call ToggleNERDTreeAndTagbar()
" ===================================================
35. 全局搜索插件:CtrlSF
在工程范围内搜索,跟VS的搜索差不多,后端由 ag 处理,作者是个中国人,很强大。
先要装ag:
sudo apt-get install silversearcher-ag
插件可以直接传递参数给 ag 调用,详看 help CtrlSF 和 man ag 。
.vimrc 配置:
" 按 ctrl-D 开始准备输入
nnoremap <C-D> :CtrlSF<space>
" <C-C>查找光标下单词
nmap <C-C> :CtrlSF<space><C-R>=expand("<cword>")<CR><CR>
" 也可以用 <C-W>表示光标下单词
" nmap <C-C> :CtrlSF<space><CR><C-W><CR>
36. 自动补全括号、引号插件:auto-pairs
对于大括号的自动匹配很智能,只要开启了 smartintent 则回车就可以自动换行,比使用map的好,非常方便。
37. 管理vim工作空间的插件: CtrlSpace
方便管理buffers, tabs
38. 显示不可见字符
set invlist
set nolist
39. 配色管理插件: Color-Scheme-Explorer
默认的配色方案有点刺眼, 可以选一个暗色的配色方案. 该可以很方便的预览各种配色方案. 不用一个一个去 :color.
推荐配色: http://www.vim.org/scripts/script.php?script_id=463 这个插件里面有 7 种配色 其中 neon 很不错, 推荐.
我自己对neon做了一些修改, 并加入了补全菜单的配色:
https://github.com/xuzhezhaozhao/my_vimrc/blob/master/neon.vim
40. Doxygen 辅助插件:DoxygenToolkit
Doxygen 是一种用于 C/C++、Java™、Python 和其他编程语言的文档系统. 该插件可以自动生成可以被Doxygen识别的注释风格模板.
安装好了之后, 可以在VIM的配置文件中(/etc/vimrc)为doxygentoolkit这个插件配置一些全局变量:
let g:doxygenToolkit_authorName="your name"
let g:doxygenToolkit_briefTag_funcName="yes"
41. Doxygen 语法高亮插件: DoxyGen Syntax
在.vimrc中加入如下行打开语法高亮:
let g:load_doxygen_syntax=1
42. Rivision History: Gundo
43. 标记程序中待处理位置: TaskList
44. 在vim中打开终端: conqueterm-vim
45. 格式化代码: vim-clang-format
clang-format -style=llvm -dump-config > .clang-format
可以获得一个模板 .clang-format 文件, 根据自己的需求修改即可.
map <c-a><c-k><c-f> :ClangFormat<cr>
46. XML编辑插件: xml.vim
47. Java开发: eclim
-
安装Eclim来处理java。下载 Eclim ,安装Eclim要求首先安装最新的Eclipse.
-
在.vimrc中增加一些配置。
let g:EclimCompletionMethod = 'omnifunc'
对于类C语言和Python,YCM可以直接使用,对于Java,需要先启动Eclim。
下面主要说说用Eclim+YCM开发Java工程的方式。
-
首先启动Eclim服务,执行 /Users/yeolar/.eclipse/org.eclipse.platform_4.2.0_119745494/eclimd 。
为了方便,可以在~/.bash_profile中添加别名:
alias eclimd='/Users/yeolar/.eclipse/org.eclipse.platform_4.2.0_119745494/eclimd 2>&1 1>/dev/null &'
-
可以验证一下Eclim的安装:
:PingEclim " 服务是否正常 :EclimValidate " 验证vim配置有效
-
创建Java工程:
:ProjectCreate /path/to/project -n java
创建工程会自动创建.classpath、.project文件和src目录。可以使用 :ProjectList 查看工程列表。
添加工程的源代码路径可以在.classpath文件中使用 :NewSrcEntry path/to/new/src 完成。默认在工程创建时已经添加了src目录。
-
编写代码。正常编写即可,因为已经在YCM中添加了Eclim的相关配置,所以自动完成功能已经和YCM的一致。更多用法可以参考 http://eclim.org/vim/java/index.html 。
48. 头文件切换: a.vim
:A switches to the header file corresponding to the current file being edited (or vise versa) :AS splits and switches :AV vertical splits and switches :AT new tab and switches :AN cycles through matches :IH switches to file under cursor :IHS splits and switches :IHV vertical splits and switches :IHT new tab and switches :IHN cycles through matches <Leader>ih switches to file under cursor <Leader>is switches to the alternate file of file under cursor (e.g. on <foo.h> switches to foo.cpp) <Leader>ihn cycles through matches
49. Surround
50. 格式对齐插件: tabular
51. markdown 插件: vim-markdown
52. C family 高亮增强插件: clighter
53. buffer间书签: vim-bookmark
54. Productive shotcuts
- 在任何格式的文本中,想插入一些数据,只需要写一小段代码,然后选中这段代码,执行
!python
- zz 居中
55. 去除Gvim 全屏底部留白
style "vimfix" {
bg[NORMAL] = "#303030"
}
widget "vim-main-window.*GtkForm" style "vimfix"
#303030 是颜色, 根据你自己的 vim 配色修改就好了.
56. matchit.vim: % 匹配多个字符的跳转
57. 修改 sigh area color
58. 在服务器上使用自己编译的vim (无sudo权限情况下)
line 126:
E484: Can't open file /usr/local/share/vim/syntax/syntax.vim
let $VIMRUNTIME = "/home/xuzz/usr/local/share/vim/vim74"
line 42:
E216: No such group or event: filetypedetect BufRead
runtimepath=~/.vim,/etc/vim,/usr/share/vim/vimfiles,/usr/share/vim/addons,/usr/share/vim/vim74,/usr/share/vim/vimfiles,/usr/share/vim/addons/after,~/.vim/after
59. vim-multiple-cursors
60. vim-tags
61. 每次都在同一个 vim 窗口打开新标签编辑文件
62. 自动删除多余行尾的多余空格
" Remove trailing whitespace when writing a buffer, but not for diff files.
" From: Vigil <vim5632@rainslide.net>
function RemoveTrailingWhitespace()
if &ft != "diff"
let b:curcol = col(".")
let b:curline = line(".")
silent! %s/\s\+$//
silent! %s/\(\s*\n\)\+\%$//
call cursor(b:curline, b:curcol)
endif
endfunction
autocmd BufWritePre * call RemoveTrailingWhitespace()
================================================================
参考:
http://my.oschina.net/shelllife/blog/109919http://hi.baidu.com/gpstrive/item/f0f2ca0a24fd8e91a3df439b
http://blog.csdn.net/honpey/article/details/9225311http://blog.sina.com.cn/s/blog_60a38c850101lp3u.html
http://blog.csdn.net/jibing57/article/details/7847834http://www.iplaysoft.com/top10-programming-fonts.html
http://www.2maomao.com/blog/vim-7-pack-configured/http://easwy.com/blog/archives/advanced-vim-skills-vim-gdb-pyclewn/
http://www.vim.org/mercurial.php
http://297020555.blog.51cto.com/1396304/683908
http://blog.csdn.net/redguardtoo/article/details/1172136
http://oldj.net/article/vim-parenthesis/
http://uniharmony.blog.163.com/blog/static/4617437620087310345373/
http://www.thegeekstuff.com/2009/01/vi-and-vim-macro-tutorial-how-to-record-and-play/
http://zuyunfei.com/2013/08/26/vim-plugin-ctrlp/
http://blog.csdn.net/leaf5022/article/details/21290509
http://www.cnblogs.com/zhongcq/p/3630047.html