【从入门到进阶】vim基础配置+ 常用插件(NERDTree, cscope, rainbow等)
文章目录
- 前言
- 一、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等)相关推荐
- python flask快速入门与进阶-Flask基础进阶与python flask实战bbs教程
├─Flask基础进阶 │ 01-HTTP 基础知识.mp4 │ 02-python CGI 与 WebServer.mp4 │ 03-virtuanenv配置及Flask快速示例.mp4 │ 04- ...
- 【树莓派】一、新坑入门-购买篇、基础配置篇
这个系列主要是记录下遇到的坑. 超频.更换国内源请转向:[树莓派]二.超频.更换国内源 这一部分主要是购买方面的问题: 首先劝退:树莓派比较折腾而且需要linux.python基础,建议买来当机顶盒. ...
- 2021-11-15 入门前端VScode必装的常用插件, HTML+CSS常用属性速记.
Html + Css 学习 一.VSCode常用 //1. VScode常用快捷键 * 新建文件:ctrl + N * 切换自动换行:alt + Z * 复制当前行:ctrl + C:ctrl + V ...
- vim:配置vundle插件
前言 以前,安装vim插件,需要自己从网上拷贝插件到vim的plugin目录下,现在找到了一个vundle插件,相当于一个包管理器,可以自动从网上下载需要的插件. 正文 第一步,按照下面的方式下载vu ...
- Docker从入门到进阶之基础操作(3)—— 仓库(Repository)
前两章介绍了Docker的容器和镜像部分,那么这一章就开始介绍仓库 1.仓库 仓库(Repository)是集中存放镜像的地方. 一个容易混淆的概念是注册服务器(Registry).实际上注册服务器是 ...
- 40个web前端实战项目,练完即可就业,从入门到进阶,基础到框架,html_css【附视频+源码】
当下前端开发可以说是一个比较火的职业,所以学习的人比较多,不管是培训还是自学都是希望通过前端可以找到一份好的工作,但是很多自学的朋友在自学过程中有些盲目,不仅大大降低了学习的效率,而且也会打击自己的学 ...
- 【2023最新】32个web前端实战项目,练完即可就业,从入门到进阶,基础到框架,你想要的全都有,建议码住!
1.[网易云音乐首页制作] 2.[实战项目之今日头条] 3.[实战项目之拉勾网] 4.[ReactNative项目之美食APP] 5.[uni-APP项目实战教程] 6.[React项目管理后台系统] ...
- Ubuntu16.04 安装谷歌浏览器并配置常用插件与扩展
安装google浏览器请参考 网址:http://www.linuxidc.com/Linux/2016-05/131096.htm 环境依赖问题不再多写,建议参考我的上一篇文章http://blog ...
- vim 安装与基础配置
目录 零.须知 一.vim 安装 1.预安装 vi 卸载 2.依赖安装 3.源码下载与编译安装 4.在线安装 二.vim 基础配置 1.定位 vimrc 文件 2.添加基础配置 零.须知 以下所有操作 ...
最新文章
- ArcGIS10.2 网络分析之路径分析(二)---构建网络数据集
- The Class Loader Hierarchy--转载
- 苹果cms8x缩图带3D翻转自适应模版
- 华为手机如何升级鸿蒙系统_再见了安卓!华为鸿蒙系统正式上线:这几款手机可先升级...
- Codeforces Round #753 (Div. 3)E. Robot on the Board 1
- 线性规划 (一) 线性规划的基本形式及各种概念
- SiamRPN++相对于SiamRPN的改进
- 【2020 ACM Fellow 华人学者】 Wei Wang 加州大学洛杉矶分校
- 制作纯净的U盘启动盘(避免纯净系统安装后却内置垃圾软件)
- Mip-NeRF 360
- Android JNI开发三: SO库的使用
- 什么东西可以改善睡眠,这些东西应该能帮到你
- 希尔排序的时间复杂度为什么能小于O(n^2)
- Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting的区别
- 文字点选验证码再也不是难题,通过率 96% 的深度学习了解一下!
- 无力吐槽:各位忠实的fans家人们,博客之星评选 我4000粉丝,尽然拼不过一个49粉的博主,期待你们帮忙
- 贪吃蛇大作战:C语言代码
- checkbox标签
- linux网卡掉包或挂掉解决办法
- 模型检测工具汇总(比较全)