安装若干 VIM 插件(不断更新)

先安装插件管理工具 pathogen


创建目录 ~/.vim/bundle/pathogen/autoload/

下载 pathogen.vim(https://github.com/tpope/vim-pathogen )至 ~/.vim/bundle/pathogen/autoload/

在 .vimrc 中加入下面两行

runtime bundle/pathogen/autoload/pathogen.vim
execute pathogen#infect()


其他插件下载解压后, 都拷贝到 ~/.vim/bundle/ 目录下即可


书签插件

https://github.com/huxiao/vim-bookmark

https://github.com/MattesGroeger/vim-bookmarks ( 这个插件要配合 ctrlp 才好用 )


nmap <F2> mn

imap <F2> <ESC>mn

 let g:bookmark_sign = '●'

let g:bookmark_disable_ctrlp = 1


插件的基本用法:

mm 用于设定或者删除一个书签,或者使用命令 VbookmarkToggle
mn 用于跳转到下一个书签,或者使用命令 VbookmarkNext
mp 用于跳转到前一个书签,或者使用命令 VbookmarkPrevious

ma 用于显示所有书签

mc 删除一个书签

mx 删除所有书签


let g:vbookmark_bookmarkSaveFile = $HOME . '/.vimbookmark'

" 设置跳转书签的快捷键

nmap <F2> mn

imap <F2> <ESC>:w<CR>mn



C++ STL 语法高亮插件

https://github.com/octol/vim-cpp-enhanced-highlight



C++源文件和头文件之间切换
https://github.com/derekwyatt/vim-fswitch

nmap <silent> <Leader>sw :FSHere<cr>

这样,键入 ;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 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

nnoremap <leader>av :AV<CR>

nnoremap <leader>as :AS<CR>



快速开关注释
https://github.com/scrooloose/nerdcommenter

常用操作:

<leader>cc,注释当前选中文本,如果选中的是整行则在每行首添加 //,如果选中一行的部分内容则在选中部分前后添加分别 /、/;

<leader>cu,取消选中文本块的注释。

也可以都调用 <leader>c<SPACE> ,它会根据是否有注释而选择来注释还是取消注释。


括号引号自动补全

https://github.com/Raimondi/delimitMate


or


https://github.com/jiangmiao/auto-pairs


工程文件浏览

https://github.com/scrooloose/nerdtree

将如下信息加入.vimrc中:

" 使用 NERDTree 插件查看工程文件。设置快捷键
nmap <F8> :NERDTreeToggle<CR>
" 设置NERDTree子窗口宽度
let NERDTreeWinSize=32
" 设置NERDTree子窗口位置
let NERDTreeWinPos="right"
" 显示隐藏文件
let NERDTreeShowHidden=1
" NERDTree 子窗口中不显示冗余帮助信息
let NERDTreeMinimalUI=1
" 删除文件时自动删除文件对应 buffer
let NERDTreeAutoDeleteBuffer=1

常用操作:回车,打开选中文件;r,刷新工程目录文件列表;I(大写),显示/隐藏隐藏文件;m,出现创建/删除/剪切/拷贝操作列表。键入 <leader>fl 后,右边子窗口为工程项目文件列表

在 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 中加入以下设置

nmap<leader>R :!ctags -R<CR>

这样, 在 VIM 中按 <leader> + r 就可以生成当前目录的 tags 文件了



根据头文件中的函数声明,自动生成 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 文件中后, 键入 <leader>PP 即可补全函数空白体


内容查找

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 <leader>sp :CtrlSF<CR>
noremap <leader>? :CtrlSF -R
nmap <F4> :CtrlSFToggle<CR>
noremap <leader>/ :silent execute("CtrlSF -R '\\b" . expand("<cword>") . "\\b'")<CR>
let g:ctrlsf_ackprg = 'ag' "设置 ctrlsf 使用 ag
" ag 快捷键
noremap <leader>f :silent execute("Ag " . expand("<cword>"))<CR>

修改 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 <F4> :Ack -i , -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('<cword>'), '/\.*$^~[') . '\>'
    else
        let search .= expand('<cword>')
    endif
    let replace = escape(a:replace, '/\&~')
    execute 'argdo %s/' . search . '/' . replace . '/' . flag . '| update'
endfunction
" 不确认、非整词
"nnoremap <Leader>R :call Replace(0, 0, input('Replace '.expand('<cword>').' with: '))<CR>
" 不确认、整词
nnoremap <Leader>rw :call Replace(0, 1, input('Replace '.expand('<cword>').' with: '))<CR>
" 确认、非整词
"nnoremap <Leader>rc :call Replace(1, 0, input('Replace '.expand('<cword>').' with: '))<CR>
" 确认、整词
"nnoremap <Leader>rcw :call Replace(1, 1, input('Replace '.expand('<cword>').' with: '))<CR>
"nnoremap <Leader>rwc :call Replace(1, 1, input('Replace '.expand('<cword>').' with: '))<CR>




文件查找

https://github.com/Yggdroot/LeaderF

修改插件源码,更改快捷键为符合个人操作修改


leaderf/python/leaderf/cli.py 中
注释下面4行代码
elif equal(cmd, '<C-V>') or equal(cmd, '<S-Insert>'): 
self._paste() 
self._buildPattern() 
yield '<Update>' 

在下面这行代码
elif equal(cmd, '<C-C>'):
    yield '<Quit>'
后面加入下面两行代码
elif equal(cmd, '<C-P>'): 
    yield '<Quit>' 

leaderf/python/leaderf/manager.py 中
修改 elif equal(cmd, '<C-]>'): 为 elif equal(cmd, '<C-V>'):

在 .vimrc 中加入下面配置

let g:Lf_ShortcutF = '<C-P>' 

let g:Lf_CommandMap = {'<C-C>': ['<Esc>', '<C-C>']}

nmap <leader>m :LeaderfMru<CR>

imap <c-p> <ESC>:LeaderfFile<CR> 


查看函数,结构体,变量列表

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'
\ }


// c++ 语言配置
" 设置 ctags 对哪些代码元素生成标签
let g:tagbar_type_cpp = {
    \ 'kinds' : [
        \ 'd:macros:1',
        \ 'g:enums',
        \ 't:typedefs:0:0',
        \ 'e:enumerators:0:0',
        \ 'n:namespaces',
        \ 'c:classes',
        \ 's:structs',
        \ 'u:unions',
        \ 'f:functions',
        \ 'm:members:0:0',
        \ 'v:global:0:0',
        \ 'x:external:0:0',
        \ 'l:local:0:0'
    \ ],
    \ 'sro' : '::',
    \ 'kind2scope' : {
       \ 'g' : 'enum',
       \ 'n' : 'namespace',
       \ 'c' : 'class',
       \ 's' : 'struct',
       \ 'u' : 'union'
 \ },
 \ 'scope2kind' : {
        \ 'enum'   : 'g',
        \ 'namespace' : 'n',
        \ 'class'  : 'c',
        \ 'struct' : 's',
        \ 'union'  : 'u'
     \ }
\ } 


nmap <F3> :TagbarToggle<CR>


任务列表 
https://github.com/vim-scripts/TaskList.vim

这是一个非常有用的插件,它能够标记文件中的 FIXME 、 TODO 等信息,并将它们存放到一个任务列表当中,后面随时可以通过Tasklist跳转到这些标记的地方再来修改这些代码,是一个十分方便实用的Todo list工具。

--help: 通常只需添加一个映射: map <leader>td <Plug>TaskList


多光标输入 
https://github.com/terryma/vim-multiple-cursors

在普通模式下,按下 Ctrl - n 开始进入可视模式并选中光标下的单词,继续按 Ctrl - n 选择下一个相同的单词,按下 Ctrl - p 往回选一个, Ctrl - x 则跳过下一个相同单词. 按下 c 进行修改,  按下 <Esc> 退出



状态栏美化

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 <leader>sh :ConqueTermVSplit bash<CR>

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

 http://blog.chinaunix.net/uid-20662363-id-1904145.html 


在 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
let g:auto_save = 1
" 设置updatetime  值不可变,为默认的 200
 "let g:auto_save_no_updatetime = 1
"let g:updatetime = 50
" 插入模式下不进行自动保存
let g:auto_save_in_insert_mode = 0
" 保存时不在状态栏提示保存时间
"let g:auto_save_silent = 1  


平滑滚动

https://github.com/yuttie/comfortable-motion.vim


快速编辑成对的括号
https://github.com/tpope/vim-surround
在正常模式下, ds( 或者 ds) 删除一对圆括号, ds" 删除一对双引号, ds' 删除一对单引号, ds[(或者ds]) 删除一对中括号, ds{ ( 或者 ds} ) 删除一对大括号
cs"( 是把一对 " 替换成 (


快速选择
https://github.com/terryma/vim-expand-region
" ====================================================== vim-expand-region
vmap v <Plug>(expand_region_expand)
vmap <C-v> <Plug>(expand_region_shrink)


匹配括号
https://github.com/vim-scripts/matchit.zip


c++语法检查
https://github.com/w0rp/ale
需要安装 cppcheck : sudo apt install cppcheck
" ====================================================== ale
let g:ale_set_loclist = 0
let g:ale_open_list = 1
let g:ale_keep_list_window_open = 1
"自定义error和warning图标
let g:ale_sign_error = '✗'
let g:ale_sign_warning = '⚡'
"在vim自带的状态栏中整合ale
let g:ale_statusline_format = ['✗ %d', '⚡ %d', '✔ OK']
"显示Linter名称,出错或警告等相关信息
let g:ale_echo_msg_error_str = 'E'
let g:ale_echo_msg_warning_str = 'W'
let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'
"普通模式下,sp前往上一个错误或警告,sn前往下一个错误或警告
nmap sp <Plug>(ale_previous_wrap)
nmap sn <Plug>(ale_next_wrap)
"<Leader>d查看错误或警告的详细信息
nmap <Leader>d :ALEDetail<CR>
"设置状态栏显示的内容
"set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}\ %{ALEGetStatusLine()}
"文件内容发生变化时不进行检查
"let g:ale_lint_on_text_changed = 'never'
"打开文件时不进行检查
"let g:ale_lint_on_enter = 0
"对C/C++使用Clang进行语法检查
"let g:ale_linters = {'c': 'clang'}
"let g:ale_c_clang_options = '-std=c11 -Wall'
"let g:ale_linters = {'c++': 'clang++'}
let g:ale_cpp_clangcheck_options = '-std=c++11 -Wall'
let g:ale_cpp_gcc_options = '-std=c++11 -Wall'
"关闭 golang 的语法检测
"let g:ale_linters = {'go': ['gofmt']}
let g:ale_linters = {
            \ 'c': ['clang'], 
            \ 'c++': ['clang++'],
            \ 'go': ['go build', 'gofmt', 'go vet']
            \}
" 打开 golang 语法检测
"let g:ale_linters = {'go': ['gometalinter', 'gofmt']}

vim-go
" ====================================================== vim-go 配置

let g:go_disable_autoinstall = 0 "禁止自动下载
let g:go_highlight_functions = 1
let g:go_highlight_methods = 1
let g:go_highlight_fields = 1
let g:go_highlight_types = 1
let g:go_highlight_operators = 1
let g:go_highlight_build_constraints = 1
let g:go_auto_type_info = 1
let g:go_fmt_command = "goimports"
let g:go_metalinter_autosave = 0
au FileType go nmap <F12> <Plug>(go-def)
au FileType go nmap <F5> <Plug>(go-run)
au FileType go nmap <leader>b <Plug>(go-build)
au FileType go nmap <leader>e <Plug>(go-rename)
au FileType go nmap <Leader>gd <Plug>(go-doc)
au FileType go nmap <Leader>s <Plug>(go-implements)
au FileType go nmap <Leader>r <Plug>(go-referrers)
"au FileType go nmap <Leader>t <Plug>(go-vet)
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值