先安装插件管理工具 pathogen
下载 pathogen.vim(https://github.com/tpope/vim-pathogen )至 ~/.vim/bundle/pathogen/autoload/
在 .vimrc 中加入下面两行
runtime bundle/pathogen/autoload/pathogen.vim
execute pathogen#infect()
https://github.com/huxiao/vim-bookmark
https://github.com/MattesGroeger/vim-bookmarks ( 这个插件要配合 ctrlp 才好用 )
nmap
imap
let g:bookmark_sign = '●'
let g:bookmark_disable_ctrlp = 1
ma 用于显示所有书签
mc 删除一个书签
mx 删除所有书签
let g:vbookmark_bookmarkSaveFile = $HOME . '/.vimbookmark'
" 设置跳转书签的快捷键
nmap
imap
C++ STL 语法高亮插件
https://github.com/octol/vim-cpp-enhanced-highlight
nmap
这样,键入 ;sw 就能在实现 cpp 文件和 h文件间切换
另外一个是
https://github.com/vim-scripts/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 matchesih switches to file under cursor is switches to the alternate file of file under cursor (e.g. on switches to foo.cpp) ihn cycles through matches
nnoremap
nnoremap
也可以都调用 SPACE>
,它会根据是否有注释而选择来注释还是取消注释。
https://github.com/Raimondi/delimitMate
or
https://github.com/jiangmiao/auto-pairs
https://github.com/scrooloose/nerdtree
将如下信息加入.vimrc中:
" 使用 NERDTree 插件查看工程文件。设置快捷键
nmap :NERDTreeToggle
" 设置NERDTree子窗口宽度
let NERDTreeWinSize=32
" 设置NERDTree子窗口位置
let NERDTreeWinPos="right"
" 显示隐藏文件
let NERDTreeShowHidden=1
" NERDTree 子窗口中不显示冗余帮助信息
let NERDTreeMinimalUI=1
" 删除文件时自动删除文件对应 buffer
let NERDTreeAutoDeleteBuffer=1
常用操作:回车,打开选中文件;r,刷新工程目录文件列表;I(大写),显示/隐藏隐藏文件;m,出现创建/删除/剪切/拷贝操作列表。键入
在 plugin/NERD_tree.vim 中, 修改
call s:initVariable("g:NERDTreeMapOpenVSplit", "s") 为
call s:initVariable("g:NERDTreeMapOpenVSplit", "v")
以符合个人操作习惯, 作用是按 v 时打开一个竖屏
ctags
从 http://ctags.sourceforge.net/ 下载源代码包后,解压缩生成源代码目录,然后进入源代码根目录执行./configure,然后执行make,编译成功后执行make install
在 .vimrc 中加入以下设置
nmapR :!ctags -R
这样, 在 VIM 中按
根据头文件中的函数声明,自动生成 CPP 文件中的空白函数体
ProtoDef (http://www.vim.org/scripts/script.php?script_id=2624 )
ProtoDef 需要依赖 perl , ctags 和 FSwitch(http://www.vim.org/scripts/script.php?script_id=2590 )
安装好 ProtoDef 后, 在 .vimrc 中加入以下配置
" 设置 pullproto.pl 脚本路径
let g:protodefprotogetter='~/.vim/bundle/protodef/pullproto.pl'
" 成员函数的实现顺序与声明顺序一致
let g:disable_protodef_sorting=1
使用的时候, 先在源码目录使用 ctags -R 命令生成 tags 文件; 然后在 .h 文件中声明类函数, 切换到同名 .cpp 文件中后, 键入
内容查找
https://github.com/dyng/ctrlsf.vim
需要事先安装 ack
sudo apt-get install ack-grep
安装 ag
sudo apt-get install silversearcher-ag
https://github.com/rking/ag.vim
在 .vimrc 中加入以下配置
" 使用 ctrlsf.vim 插件在工程内全局查找光标所在关键字,设置快捷键。快捷键速记法:search in project
nnoremap sp :CtrlSF
noremap ? :CtrlSF -R
nmap :CtrlSFToggle
noremap / :silent execute("CtrlSF -R '\\b" . expand("") . "\\b'")
let g:ctrlsf_ackprg = 'ag' "设置 ctrlsf 使用 ag
" ag 快捷键
noremapf :silent execute("Ag " . expand(" "))
修改 ctrl +o 为竖屏打开
在 autoload/ctrlsf.vim 中 func! s:OpenFileInWindow 函数中, 把
exec 'silent split ' . fnameescape(a:file)
修改为
exec 'silent vsplit ' . fnameescape(a:file)
内容查找 - ACK2
https://beyondgrep.com/
git clone https://github.com/mileszs/ack.vim
此时已可以使用ack命令;
:Ack xxx *
,在项目里搜索xxx单词.
每次手动输入:Ack xxx还是很不方便的,可以在.vimrc文件里设置快捷键::map
, -i参数表示忽略大小写. 以后在项目里,只需要按F4,即可全局搜索单词了.
语法检测
https://github.com/scrooloose/syntastic
在 .vimrc 中加入以下配置
let g:syntastic_error_symbol = '✗'
let g:syntastic_warning_symbol = '⚠'
" 是否在打开文件时检查
let g:syntastic_check_on_open=0
" 是否在保存文件后检查
let g:syntastic_check_on_wq=1
内容替换
将完整配置信息添加进 .vimrc 中:
" 替换函数。参数说明:
" confirm:是否替换前逐一确认
" wholeword:是否整词匹配
" replace:被替换字符串
function! Replace(confirm, wholeword, replace)
wa
let flag = ''
if a:confirm
let flag .= 'gec'
else
let flag .= 'ge'
endif
let search = ''
if a:wholeword
let search .= '\<' . escape(expand(''), '/\.*$^~[') . '\>'
else
let search .= expand('')
endif
let replace = escape(a:replace, '/\&~')
execute 'argdo %s/' . search . '/' . replace . '/' . flag . '| update'
endfunction
" 不确认、非整词
"nnoremap R :call Replace(0, 0, input('Replace '.expand('').' with: '))
" 不确认、整词
nnoremap rw :call Replace(0, 1, input('Replace '.expand('').' with: '))
" 确认、非整词
"nnoremap rc :call Replace(1, 0, input('Replace '.expand('').' with: '))
" 确认、整词
"nnoremap rcw :call Replace(1, 1, input('Replace '.expand('').' with: '))
"nnoremap rwc :call Replace(1, 1, input('Replace '.expand('').' with: '))
文件查找
https://github.com/Yggdroot/LeaderF
修改插件源码,更改快捷键为符合个人操作修改
leaderf/python/leaderf/cli.py 中
注释下面4行代码
elif equal(cmd, '
self._paste()
self._buildPattern()
yield '
在下面这行代码
elif equal(cmd, '
yield '
后面加入下面两行代码
elif equal(cmd, '
yield '
leaderf/python/leaderf/manager.py 中
修改 elif equal(cmd, '
在 .vimrc 中加入下面配置
let g:Lf_ShortcutF = '
let g:Lf_CommandMap = {'
nmap
imap
查看函数,结构体,变量列表
https://github.com/majutsushi/tagbar
" 设置标签子窗口的宽度
let tagbar_width=32
" tagbar 子窗口中不显示冗余帮助信息
let g:tagbar_compact=1
// GO 语言配置
let g:tagbar_type_go = {
\ 'ctagstype' : 'go',
\ 'kinds' : [
\ 'p:package',
\ 'i:imports:1',
\ 'c:constants',
\ 'v:variables',
\ 't:types',
\ 'n:interfaces',
\ 'w:fields',
\ 'e:embedded',
\ 'm:methods',
\ 'r:constructor',
\ 'f:functions'
\ ],
\ 'sro' : '.',
\ 'kind2scope' : {
\ 't' : 'ctype',
\ 'n' : 'ntype'
\ },
\ 'scope2kind' : {
\ 'ctype' : 't',
\ 'ntype' : 'n'
\ },
\ 'ctagsbin' : 'gotags',
\ 'ctagsargs' : '-sort -silent'
\ }
nmap
任务列表
https://github.com/vim-scripts/TaskList.vim
这是一个非常有用的插件,它能够标记文件中的 FIXME
、 TODO
等信息,并将它们存放到一个任务列表当中,后面随时可以通过Tasklist跳转到这些标记的地方再来修改这些代码,是一个十分方便实用的Todo list工具。
--help:
通常只需添加一个映射: map
在普通模式下,按下 Ctrl - n
开始进入可视模式并选中光标下的单词,继续按 Ctrl - n
选择下一个相同的单词,按下 Ctrl - p
往回选一个, Ctrl - x
则跳过下一个相同单词. 按下 c 进行修改, 按下
退出
状态栏美化
https://github.com/itchyny/lightline.vim
或者 vim-airline
参见
http://blog.csdn.net/the_victory/article/details/50638810
"--------------------------------------------------------------------------
"vim-airline
"--------------------------------------------------------------------------
Plugin 'vim-airline'
let g:airline_theme="molokai"
"这个是安装字体后 必须设置此项"
let g:airline_powerline_fonts = 1
" 关闭状态显示空白符号计数
let g:airline#extensions#whitespace#enabled = 0
let g:airline#extensions#whitespace#symbol = '!'
if !exists('g:airline_symbols')
let g:airline_symbols = {}
endif
" 在 airline 的状态栏上显示文件的绝对路径
let g:airline_section_c = "%{expand('%:p')}"
vim中集成shell
conque " 对中文的支持有问题
http://www.vim.org/scripts/script.php?script_id=2771
用法说明 https://code.google.com/archive/p/conque/wikis/Usage.wiki#3.1.8_Hide_start_messages
nmap
let g:ConqueTerm_PyVersion = 2 " 本机的 python 是 2.7,所以这里设置成 2
let g:ConqueTerm_StartMessages = 0 "去掉烦人的警告
代码自动格式化
https://github.com/sbdchd/neoformat
需要安装 astyle, http://astyle.sourceforge.net/
astyle 的参数配置参见
http://blog.csdn.net/janepen/article/details/7022180
在 neoformat/auto/load/neoformat/formatters 中, 分别编辑 cpp.vim 和 c.vim 如下
cpp.vim
function! neoformat#formatters#cpp#enabled() abort
return ['astyle']
endfunction
function! neoformat#formatters#cpp#astyle() abort
return {
\ 'exe': 'astyle',
\ 'args': ['--style=allman', '-p', '-D', '--pad-header'],
\ 'stdin': 1,
\ }
endfunction
c.vim
function! neoformat#formatters#c#enabled() abort
return ['astyle']
endfunction
function! neoformat#formatters#c#astyle() abort
return {
\ 'exe': 'astyle',
\ 'args': ['--mode=c','--style=allman', '-p', '-D', '--pad-header'],
\ 'stdin': 1,
\ }
endfunction
.vimrc 中写入如下配置
augroup fmt autocmd! autocmd BufWritePre * undojoin | Neoformat augroup END
自动保存
https://github.com/vim-scripts/vim-auto-save
" ====================================================== vim-auto-save平滑滚动
https://github.com/yuttie/comfortable-motion.vim