文章目录

  • 前言
  • 一、vim基础配置
  • 二、常用插件
    • 2.1 Vundle
      • 2.1.1 Vundle安装
      • 2.1.2 Vundle配置
      • 2.1.3 安装插件
      • 2.1.4 Vundle常用指令
    • 2.2 NERDTree
      • 2.2.1 NERDTree安装
      • 2.2.2 NERDTree配置
    • 2.3 NERD Commenter
      • 2.3.1 NERD Commenter安装
      • 2.3.2 NERD Commenter配置
    • 2.4 Tagbar
      • 2.4.1 Tagbar安装
        • 2.4.1.1Tagbar依赖准备
        • 2.4.1.2 Tagbar安装
      • 2.4.2 Tagbar配置
    • 2.5 cscope
      • 2.5.1 cscope安装
      • 2.5.2 cscope配置
      • 2.5.3 cscope使用
      • 2.5.3.1 建立cscope.files
      • 2.5.3.2 cscope使用例子
    • 2.6 lightline
      • 2.6.1 lightline安装
      • 2.6.2 lightline配置
    • 2.7 rainbow
      • 2.7.1 rainbow安装
      • 2.7.2 rainbow配置
  • 总结

前言

在Windows平台上阅读/写代码常用的工具估计是VS Code或者Source Insight,在Linux平台上个人则认为是vim+cscope/ vim+ ctags了,对于从事底层开发的人员来说就更是了。

参加工作也有一段时间了,虽然参加工作后一直在共vim写代码,但是一直时间梳理一下vim的配置,这次就打算梳理下自己vim的配置,方便大家借鉴,也方便自己今后参考,不断完善。

本文主要是针对平时实践中用到的一些基本配置和插件进行总结,本帖也比较面向刚开始使用vim的小伙伴,如果有问题欢迎大家指正,交流学习~

一、vim基础配置

vim的配置文件在home的user路径下,即/home/<user name>/.vimrc,如果你第一次使用vim的话可以新建一个配置文件,执行vim ~/.vimrc即可。

我的vim基础配置如下:

 "====== Basic Configuration ======
set number                   " 显示行号
set cursorline               " 突出显示当前行
set cursorcolumn             " 设置列高亮
set autoindent               " 自动缩进
set cindent
set tabstop=4                " Tab键的宽度
set softtabstop=4            " 统一缩进为4
set shiftwidth=4
set noexpandtab              " 不要用空格代替制表符 或者使用expandtab将tab保存为space
set smarttab                 " 在行和段开始处使用制表符
set ignorecase               "搜索忽略大小写
set hlsearch                 "搜索逐字符高亮
set incsearch                "增强搜索
set smartindent              " 提供自动缩进
syntax on                    " 语法高亮nnoremap <c-n> :tabnext<cr>    "切换下一个使用:tabe打开的tag页 映射为 ctrl+n
nnoremap <c-p> :tabprev<cr>    "切换上一个使用:tabe打开的tag页 映射为 ctrl+p

二、常用插件

2.1 Vundle

Vundle 是 Vim bundle 的简称,是一个 Vim 插件管理器。
有了它就可以更为方便地管理所要安装的插件,包括安装,更新,清理等功能

2.1.1 Vundle安装

首先需要通过git来下载 vundle:

git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

执行完如下Vundle就被安装在了~/.vim/bundle/Vundle.vim目录下,今后通过Vundle安装的插件都会被管理在~/.vim/bundle/目录下。

2.1.2 Vundle配置

为了使用Vundle你还需要在vim的配置文件中添加如下配置,并且将你想通过Vundle管理的插件都添加在call vundle#begin()call vundle#end()块中:

PS: 对于初学者来说可能不确定需要添加哪些插件,那就可以先只添加Plugin 'VundleVim/Vundle.vim'这一项

现在只是打一个地基,继续往下看,大家可以再结合本帖的介绍,并结合自己实际使用来往里慢慢添加自己想用的插件~

"====== vundle configuration ======
set nocompatible                " be iMproved
filetype off                    " required!
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()" let Vundle manage Vundle
Plugin 'VundleVim/Vundle.vim'" My Plugin
Plugin 'preservim/nerdtree'
Plugin 'preservim/nerdcommenter'
Plugin 'majutsushi/tagbar'
Plugin 'itchyny/lightline.vim'
Plugin 'luochen1990/rainbow'call vundle#end()
filetype plugin indent on   " requeired

2.1.3 安装插件

  • 方法一
    执行如下命令在vim中安装:
vim
:PluginInstall
  • 方法二
    执行如下命令在terminal中安装:
vim +PluginInstall +qall

2.1.4 Vundle常用指令

:BundleList              # 列举.vimrc中配置的所有插件
:BundleInstall           # 安装列表中的全部插件
:BundleInstall!          # 更新列表中的全部插件
:BundleSearch foo        # 查找foo插件
:BundleSearch! foo       # 刷新foo插件缓存
:BundleClean             # 清除列表中没有的插件
:BundleClean!            # 清除列表中没有的插件

2.2 NERDTree

NRDTree是vim编辑器的文件系统资源管理器。使用这个插件,用户可以直观地浏览复杂的目录层次结构,快速打开文件进行阅读或编辑,并执行基本的文件系统操作。简单来说就是有一个可视化的目录层级结构,如下图所示:

2.2.1 NERDTree安装

本文的插件都基于Vundle管理,因此在Vundle的call vundle#begin()call vundle#end()块中加入如下部分,然后执行Vundle的插件安装(2.1.3)即可:

Plugin 'preservim/nerdtree'

2.2.2 NERDTree配置

以下配置大家可以根据个人喜好添加到vimrc中,完全不配置的话也可以直接在vim中输入:NERDTree即可使用了。

" 通过F2键来开启和关闭NERDTree
map <F2> :NERDTreeMirror<CR>
map <F2> :NERDTreeToggle<CR>" 启动vim时自动打开NERDTree,并将光标放在Tree的Tag
autocmd VimEnter * NERDTree" 启动vim时自动打开NERDTree,并将光标放在vim打开的文件
autocmd VimEnter * NERDTree | wincmd p" 如果退出vim后只剩Tree的Tag的话,则自动退出Tree的Tag
autocmd BufEnter * if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif

2.3 NERD Commenter

用vim撸代码的时候是不是会经常苦于vim不能像一般的IDE一样可以方便的批量注释,那么接下来介绍的这个插件你值得拥有~

本帖介绍的NERD Commenter 是跟NERDTree同一Maintainer的,用于批量注释的插件。

2.3.1 NERD Commenter安装

同NERDTree一样,在Vundle的call vundle#begin()call vundle#end()块中加入如下部分,然后执行Vundle的插件安装即可

Plugin 'preservim/nerdcommenter'

2.3.2 NERD Commenter配置

我在使用这个插件的时候用的都是默认的映射,感觉也挺方便的,但在那之前,需要设置一下leader键,大家可以理解为我们平时键盘上的Ctrl键,不需要太在意,根据自己的习惯,设置一个键即可,我设置的是减号-,在vimrc里添加这一行

let mapleader="-"

关于默认映射,大家可以根据自身的习惯来决定是否修改,常用的默认映射如下:

<leader>cc  " 注释掉在Visual模式中选择的当前行或文本
<leader>ci  " 反转在Visual模式中选中行的注释,即已注释的行则取消注释,未注释的行则添加注释
<leader>cA  " 在本行尾部添加注释
<leader>cu  " 取消选在Visual模式中中行的注释

以上映射的使用方法就是先按下<leader>键,然后紧接着按下你想用的映射即可,即如果你想在某行尾部添加注释,则将光标停在该行,如果像我一样设置的<leader>键为减号,则键入-cA即可实现

2.4 Tagbar

Tagbar可以使得我们快速浏览当前文件的标签,并获得其结构的概述。就像文章的目录一样,把各个变量,函数名等归类显示。

2.4.1 Tagbar安装

2.4.1.1Tagbar依赖准备

  • Vim >= 7.3.1058
    也就是说需要vim的版本大于等于7.3.1058,只要系统版本不是很旧的话,一般都是满足的,不确定的可以执行一下命令查看:
vim --version | head -n 1
  • ctags
    ctags的版本有很多种,这里提供一种安装方式:
sudo apt-get install ctags

2.4.1.2 Tagbar安装

同以上两个插件一样,在Vundle的call vundle#begin()call vundle#end()块中加入如下部分,然后执行Vundle的插件安装即可

Plugin 'majutsushi/tagbar'

2.4.2 Tagbar配置

Tagbar的配置比较简单,基本上配置一个快捷键的映射即可满足使用,这里将开启/关闭的快捷键映射为F3

" 通过F3键来开启和关闭Tagbar
nnoremap <F3> :TagbarToggle<CR>

2.5 cscope

不知道使用vim查看代码的时候有没有一个困惑,就是像IDE一样查看函数在哪里定义的,以及被谁调用的,会觉得很不方便。

cscope最初就是为了解决这个问题,尤其是c code的这个问题而生的。

通过它生成的的符号数据库,可以检索符号的声明,定义,调用关系等,它涵盖了ctags的功能,比ctags更加强大。

2.5.1 cscope安装

sudo apt-get install cscope

2.5.2 cscope配置

安装完成后在~/.vimrc中添加如下关于cscope的配置项,包括了添加cscope.out,快捷键的映射等设置,至于如何生成cscope.out文件,下面会介绍。

"====== cscope configuration ======
" 指定了执行cscpoe的命令
" csto 值决定了:cstag执行查找的顺序。为0则cscope数据将会被优先查找,然后才会查找tag文件。为1,则查找顺序相反。默认值是0
" cscopequickfix指定了是否使用quickfix窗口来显示cscope的结果if has("cscope")set csprg=/usr/bin/cscope set csto=0  " cscope数据将会被优先查找set nocsverb" 添加当前目录下的数据库if filereadable("cscope.out")       cs add cscope.out" 添加环境变量中指定的数据库elseif $CSCOPE_DB != ""cs add $CSCOPE_DBendifset cscopequickfix=s-,g-,c-,f-,t-,d-,i-,e-,a-" 快捷键映射nnoremap <leader>fs :cs find s <c-r>=expand("<cword>")<cr><cr>:copen<cr>  " 查找C语言符号,即查找函数名、宏、枚举值等出现的地方nnoremap <leader>fg :cs find g <c-r>=expand("<cword>")<cr><cr>:copen<cr>  " 查找函数、宏、枚举等定义的位置nnoremap <leader>fd :cs find d <c-r>=expand("<cword>")<cr><cr>:copen<cr>  " 查找本函数调用的函数       nnoremap <leader>fc :cs find c <c-r>=expand("<cword>")<cr><cr>:copen<cr>  " 查找调用本函数的函数nnoremap <leader>ft :cs find t <c-r>=expand("<cword>")<cr><cr>:copen<cr>  " 查找指定的字符串nnoremap <leader>fe :cs find e <c-r>=expand("<cword>")<cr><cr>:copen<cr>  " 查找egrep模式,相当于egrep功能,但查找速度快多了nnoremap <leader>ff :cs find f <c-r>=expand("<cfile>")<cr><cr>:copen<cr>  " 查找并打开文件,类似vim的find功能nnoremap <leader>fi :cs find i <c-r>=expand("<cfile>")<cr><cr>:copen<cr>  " 查找包含本文件的文件nnoremap <c-j> :cnext<cr>      " 切换至下一个cscopequickfix的搜索结果 映射为 ctrl+j            nnoremap <c-k> :cprev<cr>      " 切换至上一个cscopequickfix的搜索结果 映射为 ctrl+k                                                                  nnoremap <leader>t :copen<cr>  " 打开cscopequickfix窗口autocmd FileType qf nnoremap <buffer> <CR> <CR>:cclose<CR>
endif

2.5.3 cscope使用

cscope的符号表和基于符号的索引一般是以项目为单位的,完成了上面的配置之后,还需要建立符号和索引。

2.5.3.1 建立cscope.files

假设你的项目是以c code编写,则cd 到你项目的根目录,执行如下命令:

find -name "*.[chsS]" > cscope.files
cscope -bkq

上面两条命令的目的分别是

  • 从项目的根目录开始递归搜索所有的.c.h.s.S文件,然后写入cscope.files文件中
  • 建立cscope的数据库索引

具体cscope的指令用法如下,大家可以根据自身需求选择,一般使用我上面写的就可以了

-R: 在生成索引文件时,搜索子目录树中的代码
-b: 只生成索引文件,不进入cscope的界面
-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
-k: 在生成索引文件时,不搜索/usr/include目录
-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪去找源文件列表。可以使用“-”,表示由标准输入获得文件列表
-I <dir>: 在-I选项指出的目录中查找头文件
-u: 扫描所有文件,重新生成交叉索引文件
-C: 在搜索时忽略大小写
-P <path>: 在以相对路径表示的文件前加上的path,这样你不用切换到数据库文件所在的目录也可以使用它

这种方式有一个缺点,就是必须在建立数据库的目录下打开文件才可以使用cscope进行搜索,细心的朋友可以发现2.4.2节中 cscope的配置里有一条添加环境变量中指定的数据库的if分支,代码块如下:

    elseif $CSCOPE_DB != ""cs add $CSCOPE_DB

如果设置了CSCOPE_DB这个环境变量,即使不在建立数据库的目录下打开文件,也可以使用数据库建立的索引进行检索了

添加环境变量的方法有很多种,大家可以自行搜索,这里就不展开介绍了,只给出一种最简单的方式,即在~/.bashrc的末尾添加如下内容,然后source ~/.bashrc即可

CSCOPE_DB="cscope.out path"

上面的cscope.out path代表着你通过cscope -bkq命令生成的cscope.out文件的绝对路径

2.5.3.2 cscope使用例子

完成以上的配置之后,就可以去使用了,按照我的配置,则查找函数的定义为leader键fg,因为leader键被映射为了减号,则执行-fg即可查找函数的定义了,例如光标放在platform_driver_register()上面键入-fg,则跳出cscopequickfix显示搜索该函数的定义位置,即红框中的内容了

2.6 lightline

lightline是一个轻量级且可配置的 Vim 状态行/表格插件,配置这个插件,用vim打开文件后,在屏幕的底部有一个栏,告诉你你在处理什么文件,并且根据vim的状态改变状态栏的颜色

2.6.1 lightline安装

在Vundle的call vundle#begin()call vundle#end()块中加入如下部分,然后执行Vundle的插件安装即可

 Plugin 'itchyny/lightline.vim'

2.6.2 lightline配置

set laststatus=2
let g:lightline = { ‘colorscheme’: ‘PaperColor’ } "配置状态栏主题

2.7 rainbow

大部分编程语言都有方括号,圆括号,花括号等括号
rainbow插件可以帮忙区分哪两个括号是一对,增加代码的可读性,也会让你的代码变得丰富多彩

2.7.1 rainbow安装

在Vundle的call vundle#begin()call vundle#end()块中加入如下部分,然后执行Vundle的插件安装即可

 Plugin 'luochen1990/rainbow'

2.7.2 rainbow配置

将以下配置添加到~/.vimrc中即可

"rainbow
let g:rainbow_active = 1
let g:rainbow_conf = {
\   'guifgs': ['royalblue3', 'darkorange3', 'seagreen3', 'firebrick'],
\   'ctermfgs': ['lightblue', 'lightyellow', 'lightcyan', 'lightmagenta'],
\   'operators': '_,_',
\   'parentheses': ['start=/(/ end=/)/ fold', 'start=/\[/ end=/\]/ fold', 'start=/{/ end=/}/ fold'],
\   'separately': {
\       '*': {},
\       'tex': {
\           'parentheses': ['start=/(/ end=/)/', 'start=/\[/ end=/\]/'],
\       },
\       'lisp': {
\           'guifgs': ['royalblue3', 'darkorange3', 'seagreen3', 'firebrick', 'darkorchid3'],
\       },
\       'vim': {
\           'parentheses': ['start=/(/ end=/)/', 'start=/\[/ end=/\]/', 'start=/{/ end=/}/ fold', 'start=/(/ end=/)/ containedin=vimFuncBody', 'start=/\[/ end=/\]/ containedin=vimFuncBody', 'start=/{/ end=/}/ fold containedin=vimFuncBody'],
\       },
\       'html': {
\           'parentheses': ['start=/\v\<((area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)[ >])@!\z([-_:a-zA-Z0-9]+)(\s+[-_:a-zA-Z0-9]+(\=("[^"]*"|'."'".'[^'."'".']*'."'".'|[^ '."'".'"><=`]*))?)*\>/ end=#</\z1># fold'],
\       },
\       'css': 0,
\   }
\}

然后重启vim就可以看到变化啦


总结

今天就先总结到这,之后会继续更新的~

如果有哪里理解错的地方欢迎大家留言交流,如需转载请标明出处。

如果你没看懂一定是我讲的不好,欢迎留言,我继续努力。

手工码字码图码代码,如果有帮助到你的话留个赞吧,谢谢。

以上。

【从入门到进阶】vim基础配置+ 常用插件(NERDTree, cscope, rainbow等)相关推荐

  1. python flask快速入门与进阶-Flask基础进阶与python flask实战bbs教程

    ├─Flask基础进阶 │ 01-HTTP 基础知识.mp4 │ 02-python CGI 与 WebServer.mp4 │ 03-virtuanenv配置及Flask快速示例.mp4 │ 04- ...

  2. 【树莓派】一、新坑入门-购买篇、基础配置篇

    这个系列主要是记录下遇到的坑. 超频.更换国内源请转向:[树莓派]二.超频.更换国内源 这一部分主要是购买方面的问题: 首先劝退:树莓派比较折腾而且需要linux.python基础,建议买来当机顶盒. ...

  3. 2021-11-15 入门前端VScode必装的常用插件, HTML+CSS常用属性速记.

    Html + Css 学习 一.VSCode常用 //1. VScode常用快捷键 * 新建文件:ctrl + N * 切换自动换行:alt + Z * 复制当前行:ctrl + C:ctrl + V ...

  4. vim:配置vundle插件

    前言 以前,安装vim插件,需要自己从网上拷贝插件到vim的plugin目录下,现在找到了一个vundle插件,相当于一个包管理器,可以自动从网上下载需要的插件. 正文 第一步,按照下面的方式下载vu ...

  5. Docker从入门到进阶之基础操作(3)—— 仓库(Repository)

    前两章介绍了Docker的容器和镜像部分,那么这一章就开始介绍仓库 1.仓库 仓库(Repository)是集中存放镜像的地方. 一个容易混淆的概念是注册服务器(Registry).实际上注册服务器是 ...

  6. 40个web前端实战项目,练完即可就业,从入门到进阶,基础到框架,html_css【附视频+源码】

    当下前端开发可以说是一个比较火的职业,所以学习的人比较多,不管是培训还是自学都是希望通过前端可以找到一份好的工作,但是很多自学的朋友在自学过程中有些盲目,不仅大大降低了学习的效率,而且也会打击自己的学 ...

  7. 【2023最新】32个web前端实战项目,练完即可就业,从入门到进阶,基础到框架,你想要的全都有,建议码住!

    1.[网易云音乐首页制作] 2.[实战项目之今日头条] 3.[实战项目之拉勾网] 4.[ReactNative项目之美食APP] 5.[uni-APP项目实战教程] 6.[React项目管理后台系统] ...

  8. Ubuntu16.04 安装谷歌浏览器并配置常用插件与扩展

    安装google浏览器请参考 网址:http://www.linuxidc.com/Linux/2016-05/131096.htm 环境依赖问题不再多写,建议参考我的上一篇文章http://blog ...

  9. vim 安装与基础配置

    目录 零.须知 一.vim 安装 1.预安装 vi 卸载 2.依赖安装 3.源码下载与编译安装 4.在线安装 二.vim 基础配置 1.定位 vimrc 文件 2.添加基础配置 零.须知 以下所有操作 ...

最新文章

  1. ArcGIS10.2 网络分析之路径分析(二)---构建网络数据集
  2. The Class Loader Hierarchy--转载
  3. 苹果cms8x缩图带3D翻转自适应模版
  4. 华为手机如何升级鸿蒙系统_再见了安卓!华为鸿蒙系统正式上线:这几款手机可先升级...
  5. Codeforces Round #753 (Div. 3)E. Robot on the Board 1
  6. 线性规划 (一) 线性规划的基本形式及各种概念
  7. SiamRPN++相对于SiamRPN的改进
  8. 【2020 ACM Fellow 华人学者】 Wei Wang 加州大学洛杉矶分校
  9. 制作纯净的U盘启动盘(避免纯净系统安装后却内置垃圾软件)
  10. Mip-NeRF 360
  11. Android JNI开发三: SO库的使用
  12. 什么东西可以改善睡眠,这些东西应该能帮到你
  13. 希尔排序的时间复杂度为什么能小于O(n^2)
  14. Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting的区别
  15. 文字点选验证码再也不是难题,通过率 96% 的深度学习了解一下!
  16. 无力吐槽:各位忠实的fans家人们,博客之星评选 我4000粉丝,尽然拼不过一个49粉的博主,期待你们帮忙
  17. 贪吃蛇大作战:C语言代码
  18. checkbox标签
  19. linux网卡掉包或挂掉解决办法
  20. 模型检测工具汇总(比较全)

热门文章

  1. 小程序云开发基础教程一
  2. mysql分组排序加序号
  3. 用Python勾勒世界地图和中国地图
  4. WinForm 保存label和textBox中内容至txt
  5. 重命名文件夹显示被占用
  6. 去智联招聘扒了九千多条数据,为了搞清楚数据分析就业情况
  7. ccf练习-魔咒词典(字符串分割,<map>存储)
  8. 小米Android N新功能,雷军:小米将率先支持Android N新VR功能
  9. win10设置锁屏密码
  10. windows下mysql初始密码设置