安装若干 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 mn

imap 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 mn

imap :wmn



C++ STL 语法高亮插件

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



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

nmap sw :FSHere

这样,键入 ;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
ih 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 av :AV

nnoremap as :AS



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

常用操作:

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

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

也可以都调用 c<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,出现创建/删除/剪切/拷贝操作列表。键入 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 中加入以下设置

nmapR :!ctags -R

这样, 在 VIM 中按 + 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 文件中后, 键入 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 sp :CtrlSF
noremap ? :CtrlSF -R
nmap  :CtrlSFToggle
noremap / :silent execute("CtrlSF -R '\\b" . expand("") . "\\b'")
let g:ctrlsf_ackprg = 'ag' "设置 ctrlsf 使用 ag
" ag 快捷键
noremap f :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 :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(''), '/\.*$^~[') . '\>'
    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, '') or equal(cmd, ''): 
self._paste() 
self._buildPattern() 
yield '

在下面这行代码
elif equal(cmd, ''):
    yield ''
后面加入下面两行代码
elif equal(cmd, ''): 
    yield '

leaderf/python/leaderf/manager.py 中
修改 elif equal(cmd, ''): 为 elif equal(cmd, ''):

在 .vimrc 中加入下面配置

let g:Lf_ShortcutF = '

let g:Lf_CommandMap = {'': ['', '']}

nmap m :LeaderfMru

imap :LeaderfFile 


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

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 :TagbarToggle


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

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

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


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

在普通模式下,按下 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 sh :ConqueTermVSplit bash

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 (expand_region_expand)
vmap (expand_region_shrink)


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


c++语法检查
https://github.com/w0rp/ale
需要安装 cppcheck : sudo apt install cppcheck
参考   http://blog.csdn.net/demorngel/article/details/69052789
" ====================================================== 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 (ale_previous_wrap)
nmap sn (ale_next_wrap)
"d查看错误或警告的详细信息
nmap d :ALEDetail
"设置状态栏显示的内容
"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 (go-def)
au FileType go nmap (go-run)
au FileType go nmap b (go-build)
au FileType go nmap e (go-rename)
au FileType go nmap gd (go-doc)
au FileType go nmap s (go-implements)
au FileType go nmap r (go-referrers)
"au FileType go nmap t (go-vet)

你可能感兴趣的:(VIM,下搭建,C++,集成开发环境)