vim简单配置教程(vim配置c语言开发环境)

这里将会介绍一下用于代码开发的一些配置,包括插件安装与管理、还有主题设置

在网上查找资料时也看到了一些评论,大致含义是:【vim是每个人根据自己的喜好做自己的配置,如果大家都使用别人配置好的环境,那反而失去了vim的一些意义】 可以看的出来,vim是可以由每个人自由发挥、做自己的配置,vim也为用户提供了丰富的自由性

其实总结起来在我常用的ide如vscode,日常开发中用到的功能可以列出来:

代码颜色高亮

代码补全

代码跳转

输入文件名文件跳转

日常的开发过程中,使用到的功能无非就是上面几个,通过为vim添加和安装插件,上面的功能都可以实现

1. 插件管理

首先在安装插件之前,需要安装一个插件管理工具,用来管理插件。其实插件管理工具本身也是一个插件、有没有套娃的感觉!

目前我用过了2款插件管理工具,但是都是轻度使用,只是用到了其非常基础的功能,总体感觉是区别不大的:

vim-plug 比较轻量化

vundle 可能功能更多一些、只是使用过基本功能

安装了插件管理工具之后,我们只需要在配置文件中添加插件描述,工具就会自动去下载和安装新的插件。

目前基本上所有的vim插件都托管在github网站,插件管理工具会根据我们的描述从guthub拉取对应的插件到本地目录下

在插件的仓库中有会带有说明文件,首先需要阅读README文件进行初步的了解、想要了解插件的详细配置时,可以查看插件目录内doc目录下的一些说明文本,插件会提供一些配置选项供用户配置,可以根据自己的需求进行相关的配置

安装插件管理工具 vim-plug

下面以vim-plug为例介绍一下如何安装插件管理工具以及配置插件:

其实这个插件管理工具的内容很少,并且真正有效的文件就只有仓库中的plug.vim文件,我们只需要把该文件放置到我们本地~/.vim/autoload/目录下就可以了,所以官方推荐的安装命令就是:

curl-fLo~/.vim/autoload/plug.vim–create-dirs\https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

这条指令的作用就是把plug.vim文件下载到~/.vim/autoload/plug.vim

好了,此时安装插件管理工具的任务已经完成,是不是有些突然或者不知所措,只是下载了一个文件而已,插件的所有功能实现都在这个文件中,等之后慢慢增加了对vim的了解,可以打开文件看看到底做了什么。

除此之外,因为我们是把文件放在了~/.vim/autoload目录下面,在这个目录下的文件,将会在vim启动时自动加载并执行,所以也解释了我们只需要把文件放在指定的位置就可以,不需要去做一些其他的配置操作,就完成了插件管理工具的安装

使用插件管理工具管理插件

安装完成了插件管理工具之后,我们就可以使用其进行插件管理了:

插件安装

插件清理

一般比较常用的基础功能就是插件安装和插件清理。我们将会通过在vim的配置文件中添加描述来进行插件管理

在~/.vimrc文件中添加vim-plug的配置

描述开始进行插件配置call plug#begin([PLUGIN_DIR])

使用Plug命令列出需要安装的插件

使用call plug#end()表示结束插件配置

当完成插件配置时,会自动添加配置filetype plugin indent onandsyntax enable

插件默认会下载到~/.vim/plugged目录,也可以设置PLUGIN_DIR参数指定插件安装目录

在~/.vimrc配置文件中插入如下内容,来配置自己需要安装的插件:

上面列出了常用的几种配置方式,更多的配置说明可以查看 vim-plug 的说明文档

当在~/.vimrc中添加了相关的配置之后,我们需要执行插件安装命令以使得插件管理工具来安装插件

重新加载~/.vimrc配置文件,然后在vim中执行命令PlugInstall就可以等待插件管理工具自动进行插件安装了

TIPS: 由于网络环境问题,如果直接访问GitHub下载失败的话,可以想其他办法下载插件仓库到插件安装目录 ~/.vim/plugger 然后重新执行插件安装命令 :PlugInstall ,完成手动安装

vim简单配置教程(vim配置c语言开发环境)

2. 必备插件推荐(c开发)底部状态栏

默认的vim状态栏有些光秃秃,有没有看到别人界面炫酷的状态栏

可以显示出当前的模式、文件名称、文件类型、光标所在的位置等等

状态栏插件推荐:

lightline.vim

Vim-airline

这2款应该是目前比较火的状态栏插件,我之前使用的都是airline,最近开始切换到了lightline。

Lightline 比较轻量级和专注于状态栏功能

airline提供的功能相对来说比较多,比较复杂(不过有一个缺点就是图标显示、我的字体有些图标支持不是很好)

大家可以根据自己的需求进行选择与尝试

Lightline.vim 配置步骤(仅适于使用vim-plug插件管理工具,其他工具步骤可能会不同)

添加插件描述Plug ‘itchyny/lightline.vim’

重新载入配置文件后执行安装:PlugInstall

添加一些针对lightline.vim的自定义配置

“为显示lightline设置显示2行状态插件的状态需要在倒数第二行显示setlaststatus=2″状态栏下面不在单独显示模式setnoshowmode”配置lightline主题let就是定义了一个全局变量letg:lightline={\’colorscheme’:’one’,\}

更多的配置说明可以查看插件官方的说明文档

??文件搜索与跳转

文件搜索与跳转就是指我们可以通过输入部分文件名称对工程的文件进行模糊搜索并打开文件

相关插件:

LeaderF

ctrlp

Fzf.vim

这几款插件中我有简单使用过前面2款,整体感觉是 LeaderF 更加现代化、界面比较漂亮,功能也更丰富,ctrlp比较经典、fzf没有使用过

整体上基本的文件搜索功能差别不是很多

LeaderF 总体的功能是搜索,支持搜索很多类型,同时性能好一些:

搜索文件

根据 tags 文件搜索函数

搜索buffer(也就是打开的文件)

MRU most rectent use 最近使用的文件

LeaderF 配置说明

添加插件Plug ‘Yggdroot/LeaderF’

重新载入配置文件后执行安装:PlugInstall

添加一些自定义的配置

“LeaderF”文件查找快捷键crtlpletg:Lf_ShortcutF='<C-P>'”设置弹出窗口位置浮空letg:Lf_WindowPosition=’popup'”设置忽略文件letg:Lf_WildIgnore={\’dir’:[‘.svn’,’.git’,’.hg’],\’file’:[‘*.sw?’,’~$*’,’*.bak’,’*.exe’,’*.d’,’*.o’,’*.so’,’*.py[co]’]\}letg:Lf_HideHelp=1letg:Lf_ShowDevIcons=0“映射一些快捷键noremap<leader>fb:<C-U><C-R>=printf(“Leaderfbuffer%s”,””)<CR><CR>noremap<leader>fm:<C-U><C-R>=printf(“Leaderfmru%s”,””)<CR><CR>noremap<leader>fl:<C-U><C-R>=printf(“Leaderfline%s”,””)<CR><CR>noremap<C-B>:<C-U><C-R>=printf(“Leaderf!rg–current-buffer-e%s”,expand(“<cword>”))<CR><CR>noremap<C-F>:<C-U><C-R>=printf(“Leaderf!rg-e%s”,expand(“<cword>”))<CR><CR>”searchvisuallyselectedtextliterallyxnoremapgf:<C-U><C-R>=printf(“Leaderf!rg-F-e%s”,leaderf#Rg#visual())<CR><CR>noremapgo:<C-U>Leaderf!rg–recall<CR><CR>map<C-]>:<C-U><C-R>=printf(“Leaderf!gtags-d%s–auto-jump”,expand(“<cword>”))<CR><CR>noremap<leader>fr:<C-U><C-R>=printf(“Leaderf!gtags-r%s–auto-jump”,expand(“<cword>”))<CR><CR>noremap<leader>fd:<C-U><C-R>=printf(“Leaderf!gtags-d%s–auto-jump”,expand(“<cword>”))<CR><CR>noremap<leader>fo:<C-U><C-R>=printf(“Leaderf!gtags–recall%s”,””)<CR><CR>noremap<leader>fn:<C-U><C-R>=printf(“Leaderfgtags–next%s”,””)<CR><CR>noremap<leader>fp:<C-U><C-R>=printf(“Leaderfgtags–previous%s”,””)<CR><CR>

除了文件跳转、也可以通过配置实现函数的跳转

LeaderF 查找文件界面 (输入命令 :LeaderfFile 或快捷键 ctrl p)

代码颜色高亮

vim-cpp-enhanced-highlight

本身vim也会有代码颜色高亮支持,但是据说这个插件的功能支持更加强大,显示更加漂亮

vim-cpp-enhanced-highlight 配置说明

添加插件Plug ‘octol/vim-cpp-enhanced-highlight’

重新载入配置文件后执行安装:PlugInstall

代码补全

代码补全即当我们输入函数或者变量名称时,可以根据工程内现有的内容作出提示,方便代码输入

代码补全插件:

YouCompleteMe

这个插件安装起来略微复杂一些,步骤如下:

YouCompleteMe 配置说明

需要安装一些软件包的依赖sudo apt install build-essential cmake vim python3-dev

添加插件Plug ‘ycm-core/YouCompleteMe’

重新载入配置文件后执行安装:PlugInstall

除了下载插件本身的仓库之外,还有一些第三方依赖会通过git submodule的形式下载更新

如果下载失败,可以进入到插件目录手动执行相关的命令进行下载

插件安装完成之后,需要手动执行一个编译命令(也可能不需要,因为我的安装过程被中断了几次,只能手动进行操作)

cd~/.vim/plugged/YouCompleteMepython3install.py–clangd-completer

插件安装完成之后可以进行简单的补全提示,可以添加更多自定义的配置提升使用体验:

letg:ycm_add_preview_to_completeopt=0letg:ycm_show_diagnostics_ui=0letg:ycm_server_log_level=’info’letg:ycm_min_num_identifier_candidate_chars=2letg:ycm_collect_identifiers_from_comments_and_strings=1letg:ycm_complete_in_strings=1letg:ycm_key_invoke_completion='<c-z>’setcompleteopt=menu,menuonenoremap<c-z><NOP>letg:ycm_semantic_triggers={‘c,cpp,python’:[‘re!\w{2}’]}

ycm使用clangd作为lsp服务,最好是生成一个json文件描述当前的编译信息compile_commands.json

可以通过lsp实现定义跳转等

ycm 支持的配置非常多,功能非常强大、需要阅读文档发掘,这里是从 知乎 韦易笑的回答中提取的相关配置

ycm 的函数补全提示信息

代码跳转

代码跳转不需要额外的安装插件就可以实现,但是需要外部工具的配合

可以输入:help tags或:help cscope命令查看其帮助信息

经典的实现方式是 ctags Cscope 工具,这些工具可以解析代码中的变量、函数等符号后生成数据库,在vim中需要设置其对应的数据库文件,之后vim在执行跳转时 会从文件中查询相关的信息

settags=tagscsaddcscope.out

首先使用ctag工具生成工程对应的tags文件,在vim中加载对应的tags文件,我们就可以使用crtl ]符号实现代码跳转

Cscope 提供了强大的检索功能,可以检索函数、变量的位置等很多信息,可以通过一系列的命令查找并跳转到各种类型的定义位置

但是当我们的代码修改之后,需要重新生成新的 tags和cscope文件,以及在vim启动时候可以自动去加载相应的文件

需要添加这类辅助插件帮助我们提升效率和实现自动化

自动生成tag文件

相关插件:

gutentags_plus

vim-gutentags

ubuntu 安装新版本ctags:apt-get install universal-ctags

配置文件:

“vim-gutentagssettags=./.tags;,.tags”gutentags搜索工程目录的标志,当前文件路径向上递归直到碰到这些文件/目录名letg:gutentags_project_root=[‘.root’,’.svn’,’.git’,’.hg’,’.project’]”所生成的数据文件的名称letg:gutentags_ctags_tagfile=’.tags'”同时开启 ctags 和 gtags 支持:letg:gutentags_modules=[]ifexecutable(‘ctags’)letg:gutentags_modules =[‘ctags’]endififexecutable(‘gtags-cscope’)&&executable(‘gtags’)letg:gutentags_modules =[‘gtags_cscope’]endif”将自动生成的ctags/gtags文件全部放入~/.cache/tags目录中,避免污染工程目录letg:gutentags_cache_dir=expand(‘~/.cache/tags’)”配置ctags的参数,老的Exuberant-ctags不能有–extra= q,注意letg:gutentags_ctags_extra_args=[‘–fields= niazS’,’–extra= q’]letg:gutentags_ctags_extra_args =[‘–c -kinds= px’]letg:gutentags_ctags_extra_args =[‘–c-kinds= px’]”如果使用universalctags需要增加下面一行,老的Exuberant-ctags不能加下一行letg:gutentags_ctags_extra_args =[‘–output-format=e-ctags’]”禁用gutentags自动加载gtags数据库的行为letg:gutentags_auto_add_gtags_cscope=0

gutentags_plus 提供的默认的搜索映射快捷键:

keymapdesc<leader>csFind symbol (reference) under cursor<leader>cgFind symbol definition under cursor<leader>cdFunctions called by this function<leader>ccFunctions calling this function<leader>ctFind text string under cursor<leader>ceFind egrep pattern under cursor<leader>cfFind file name under cursor<leader>ciFind files #including the file name under cursor<leader>caFind places where current symbol is assigned<leader>czFind current word in ctags databasenoremap<silent><leader>gs:GscopeFinds<C-R><C-W><cr>noremap<silent><leader>gg:GscopeFindg<C-R><C-W><cr>noremap<silent><leader>gc:GscopeFindc<C-R><C-W><cr>noremap<silent><leader>gt:GscopeFindt<C-R><C-W><cr>noremap<silent><leader>ge:GscopeFinde<C-R><C-W><cr>noremap<silent><leader>gf:GscopeFindf<C-R>=expand(“<cfile>”)<cr><cr>noremap<silent><leader>gi:GscopeFindi<C-R>=expand(“<cfile>”)<cr><cr>noremap<silent><leader>gd:GscopeFindd<C-R><C-W><cr>noremap<silent><leader>ga:GscopeFinda<C-R><C-W><cr>noremap<silent><leader>gz:GscopeFindz<C-R><C-W><cr>其他

上面列出了几个关键的插件、除此之外 我们在开发使用过程中如果遇到了需求还可以搜索与补充其他需要的插件与功能

文件目录查看插件:nerdtree

3. 键盘映射

vim提供了强大的映射功能,让我们可以实现注册快捷键实现很多快捷来实现快捷操作

vim 设置映射可以使用map关键字,映射可以配置在不同的模式下生效

映射cscope命令到快捷键的例子:

“setcscope_mapping”Todothefirsttypeofsearch,hit’CTRL-\’,followedbyoneofthe”cscopesearchtypesabove(s,g,c,t,e,f,i,d).Theresultofyourcscope”searchwillbedisplayedinthecurrentwindow.YoucanuseCTRL-Tto”gobacktowhereyouwerebeforethesearch.“映射“ctrl \ s”组合键到命令“csfinds”nmap<C-\>s:csfinds<C-R>=expand(“<cword>”)<CR><CR>nmap<C-\>g:csfindg<C-R>=expand(“<cword>”)<CR><CR>nmap<C-\>c:csfindc<C-R>=expand(“<cword>”)<CR><CR>nmap<C-\>t:csfindt<C-R>=expand(“<cword>”)<CR><CR>nmap<C-\>e:csfinde<C-R>=expand(“<cword>”)<CR><CR>nmap<C-\>f:csfindf<C-R>=expand(“<cfile>”)<CR><CR>nmap<C-\>i:csfindi^<C-R>=expand(“<cfile>”)<CR>$<CR>nmap<C-\>d:csfindd<C-R>=expand(“<cword>”)<CR><CR>

映射使用 ctrl s 保存文件(但是一般的终端在收到ctrl s时候会卡住):

nnoremap<c-s>:w<CR>#normalmode:saveinoremap<c-s><Esc>:w<CR>l#insertmode:escapetonormalandsavevnoremap<c-s><Esc>:w<CR>#visualmode:escapetonormalandsave#~/.bash_profileor~/.bashrc#在bash中添加下面的配置解决输入ctrl s卡死问题#enablecontrol-sandcontrol-qstty-ixon4. 颜色美化

终端界面本来就够简陋了,如果可以 我们还是尽量去美化一下配色,让界面看起来更加舒服一些

我们可以下载和配置颜色主题如 https://github.com/tomasr/molokai

一般主题会提供一个主题的配置文件如:molokai.vim

我们只需要把这个文件放置到目录~/.vim/colors之后通过在配置文件中添加配置colorscheme molokai就可以选择对应的主题文件

colorscheme xx命令会在~/.vim/colors目录下查找对应的xx.vim主题配置文件并加载

5. 参考资料

[如何在 Linux 下利用 Vim 搭建 C/C 开发环境? – 韦易笑的回答 – 知乎] https://www.zhihu.com/question/47691414/answer/373700711

[ Vim 8 中 C/C 符号索引:GTags 篇 – 韦易笑的文章 – 知乎] https://zhuanlan.zhihu.com/p/36279445

[ Vim 从入门到精通 ] https://github.com/wsdjeg/vim-galore-zh_cn

[ vim plugin介绍之LeaderF ] https://retzzz.github.io/dc9af5aa

[ vim标签系统 ] https://retzzz.github.io/88014cac

发表评论

登录后才能评论