参考:Vim神器 | vim+ctags+cscope+Taglist+Nerdtree打造成sourceinsight
vim+ctags+cscope+taglist+nerdtree
将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)
文章目录
听说vim很强大?是的,最近笔者需要在Linux下编写一些C代码和查看一些C源码,但是默认的vim并不支持函数之间的跳转、查看函数的定义等等,所以笔者就将vim打造成了一个IDE(可以勉强称得上吧)。首先我们来看一下搭建完成之后的样子:
再来看一段简单的操作:
那么下面我们通过ctags+cscope+Taglist+Nerdtree将vi/vim打造成一个IDE。
0. 环境描述
Linux版本:ubuntu 16.04_64 LTS
vi版本:vi/vim v7.4
所用用户:root
1. 安装vim和vim基本插件
1)首先安装好vim和vim的基本插件:
这些使用apt-get安装即可:
sudo apt-get install vim vim-scripts vim-doc
其中vim-scripts
是vim的一些基本插件,包括语法高亮的支持、缩进等等。
vim中文帮助文档tar包下载地址:http://sourceforge.net/projects/vimcdoc/files/vimcdoc/
解压后其中有个doc文件夹,将其中的内容全部复制到~/.vim/doc
,或者vim安装目录下的doc目录中,此时vim中的help信息已经是中文的了。
网页版中文帮助文档网址http://vimcdoc.sourceforge.net/doc/help.html,首页就是vim帮助文档的目录,阅读起来更方便有效、更有针对性!
2)vim配置文件
vim强大的功能,其来源基本上就两个地方:Vim插件以及Vim配置文件。
vim本身的系统配置文件夹是在/usr/share/vim/
和/etc/vim/
两个文件夹下。一般情况下,我们不会去改变这两个文件夹下的配置文件,而是在用户文件夹/home/user
(其中,user为用户名,我的用户名是lingd)下建立自己的配置文件。进入用户文件夹(/home/user/)之后,用gedit新建一个名叫.vimrc
的文件:
cd ~
gedit .vimrc
注:使用gedit主要是为了方便大段大段的文字粘贴!
然后把下面的文字拷贝进这个文件之后保存:
" This line should not be removed as it ensures that various options are
" properly set to work with the Vim-related packages available in Debian.
debian.vim
" Uncomment the next line to make Vim more Vi-compatible
" NOTE: debian.vim sets 'nocompatible'. Setting 'compatible' changes numerous
" options, so any other options should be set AFTER setting 'compatible'.
set nocompatible
" Vim5 and later versions support syntax highlighting. Uncommenting the
" following enables syntax highlighting by default.
if has("syntax")
syntax on " 语法高亮
endif
colorscheme ron " elflord ron peachpuff default 设置配色方案,vim自带的配色方案保存在/usr/share/vim/vim72/colors目录下
" detect file type
filetype on
filetype plugin on
" If using a dark background within the editing area and syntax highlighting
" turn on this option as well
set background=dark
" Uncomment the following to have Vim jump to the last position when
" reopening a file
if has("autocmd")
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
"have Vim load indentation rules and plugins according to the detected filetype
filetype plugin indent on
endif
" The following are commented out as they cause vim to behave a lot
" differently from regular Vi. They are highly recommended though.
"set ignorecase " 搜索模式里忽略大小写
"set smartcase " 如果搜索模式包含大写字符,不使用 'ignorecase' 选项。只有在输入搜索模式并且打开 'ignorecase' 选项时才会使用。
set autowrite " 自动把内容写回文件: 如果文件被修改过,在每个 :next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令时进行;用 :buffer、CTRL-O、CTRL-I、'{
A-Z0-9} 或 `{
A-Z0-9} 命令转到别的文件时亦然。
set autoindent " 设置自动对齐(缩进):即每行的缩进值与上一行相等;使用 noautoindent 取消设置
"set smartindent " 智能对齐方式
set tabstop=4 " 设置制表符(tab键)的宽度
set softtabstop=4 " 设置软制表符的宽度
set shiftwidth=4 " (自动) 缩进使用的4个空格
set cindent " 使用 C/C++ 语言的自动缩进方式
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s "设置C/C++语言的具体缩进方式
"set backspace=2 " 设置退格键可用
set showmatch " 设置匹配模式,显示匹配的括号
set linebreak " 整词换行
set whichwrap=b,s,<,>,[,] " 光标从行首和行末时可以跳到另一行去
"set hidden " Hide buffers when they are abandoned
set mouse=a " Enable mouse usage (all modes) "使用鼠标
set number " Enable line number "显示行号
"set previewwindow " 标识预览窗口
set history=50 " set command history to 50 "历史记录50条
"--状态行设置--
set laststatus=2 " 总显示最后一个窗口的状态行;设为1则窗口数多于一个的时候显示最后一个窗口的状态行;0不显示最后一个窗口的状态行
set ruler " 标尺,用于显示光标位置的行号和列号,逗号分隔。每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示在屏幕的最后一行上。
"--命令行设置--
set showcmd " 命令行显示输入的命令
set showmode " 命令行显示vim当前模式
"--find setting--
set incsearch " 输入字符串就显示匹配点
set hlsearch
注:配置文件中,以单个双引号开头的文字为注释。
保存文件之后,启动vim。此时,vim已经是这种效果了(语法高亮挺漂亮的–这个是由vim-scripts中的插件支持的)。
3)管理vim插件------vim-addons
通过vim-addons,我们可以管理vim插件。我们在sudo apt-get install vim vim-scripts vim-doc时
,一般会自动安装上vim-addons
。若未安装可通过sudo apt-get install vim-addon-manager
手动安装。安装完成后,就可以用vim-addons管理vim插件了。
系统中已有的vim-scripts中包含的插件及其状态:
上面我们介绍了如何独立于系统配置文件之外,建立自己的vim配置文件。当我们自己下载安装vim插件的时候,也可以另外建立目录,放置我们自己的插件。这个目录一般为/home/user/.vim
,另外还需要建立一个插件子目录,一个插件文档子目录,以上的可以进入/home/user目录下通过下面的命令执行:
mkdir .vim
cd .vim
mkdir plugin
mkdir doc
vim官方插件的安装,xxxx是要安装的插件名,以status中显示的名称为准。安装插件xxxx时使用以下命令(前提是在目录/home/user/.vim/下建立好了plugin和doc两个文件夹)
vim-addons install xxxx
关于vim-addons命令的详细用法,可以通过“man vim-addons
”查看其帮助文档。
4)vim自动补全------OmniCppComplete
vim的自动补全功能可通过其插件OmniCppComplete实现。
① 安装OmniCppComplete:
vim-addons install omnicppcomplete
② 配置OmniCppComplete:
在vim配置文件/home/user/.vimrc
中加入如下的配置:
"-- omnicppcomplete setting --
" 按下F3自动补全代码,注意该映射语句后不能有其他字符,包括tab;否则按下F3会自动补全一些乱码
imap <F3> <C-X><C-O>
" 按下F2根据头文件内关键字补全
imap <F2> <C-X><C-I>
set completeopt=menu,menuone " 关掉智能补全时的预览窗口
let OmniCpp_MayCompleteDot = 1 " autocomplete with .
let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window
let OmniCpp_GlobalScopeSearch=1 " enable the global scope search
let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members
"let OmniCpp_DefaultNamespaces=["std"]
let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column
let OmniCpp_ShowAccess=1
(前几行就是提供了C++中的./->/::等操作符的提示和自动完成)
OmniCppComplete是基于ctags数据库即tags文件实现的(基于ctags生成的索引信息来实现自动补全的),所以在ctags -R生成tags时还需要一些额外的选项,这样生成的tags文件才能与OmniCppComplete配合运作。使用下列命令生成tags文件,就可以与OmniCppComplete配合运作:
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
- –c+±kinds=+p : 为C++文件增加函数原型的标签
- –fields=+iaS : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S)
- –extra=+q : 为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全
③ vim自动补全功能的测试
为了测试自动补全功能,我们先打开一个.c文件,如下图:
用vim打开前面的play_media_file.c文件,在43行中,输入eLI,然后按下Ctrl+X Ctrl+O
,此时vim会弹出一个窗口,所有以eLI开头的tag都会出现在这个窗口中。
当自动补全下拉窗口弹出后,一些可用的快捷键:
快捷键 | 含义 |
---|---|
Ctrl+P | 向前切换成员 |
Ctrl+N | 向后切换成员 |
Ctrl+E | 表示退出下拉窗口, 并退回到原来录入的文字 |
Ctrl+Y | 表示退出下拉窗口, 并接受当前选项 |
Ctrl+X Ctrl+L | 整行补全 |
Ctrl+X Ctrl+N | 根据当前文件里关键字补全 |
Ctrl+X Ctrl+K | 根据字典补全 |
Ctrl+X Ctrl+T | 根据同义词字典补全 |
Ctrl+X Ctrl+I | 根据头文件内关键字补全 |
Ctrl+X Ctrl+] | 根据标签补全 |
Ctrl+X Ctrl+F | 补全文件名 |
Ctrl+X Ctrl+D | 补全宏定义 |
Ctrl+X Ctrl+V | 补全vim命令 |
Ctrl+X Ctrl+U | 用户自定义补全方式 |
Ctrl+X Ctrl+S | 拼写建议 |
帮助文档 :help omnicppcomplete
5)提示函数原型echofunc
echofunc可以在命令行中提示当前输入函数的原型。
echofunc下载地址:http://www.vim.org/scripts/script.php?script_id=1735
下载完成后,把echofunc.vim
文件放到 ~/.vim/plugin
文件夹中,当你在vim插入(insert)模式下紧接着函数名后输入一个"("
的时候,这个函数的声明就会自动显示在命令行中。如果这个函数有多个声明,则可以通过按键"Alt+-"
和"Alt+="
向前和向后翻页,这两个键可以通过设置g:EchoFuncKeyNext
和g:EchoFuncKeyPrev
参数来修改。这个插件需要tags文件的支持,并且在创建tags文件的时候要加选项"--fields=+lS
"(OmniCppComplete创建的tag文件也能用), 整个创建tags文件的命令如下:
$ ctags -R --fields=+lS
其他插件说明详见echofunc.vim
如果你在编译vim时加上了"+balloon_eval
"特性,那么当你把鼠标放在函数名上的时候会有一个tip窗口弹出,该窗口中也会有函数的声明。
2. 安装配置ctags
ctags可以实现找到这个函数的定义处,也可以退回到上一步。那么要想使用ctags,
1)首先使用下面的命令安装:
$ sudo apt-get install ctags
当然也可以选择源码包方式进行安装,https://sourceforge.net/projects/ctags/files/,解压缩之后,在源代码目录中依次执行下述命令即可:
$ ./configure
$ make
$ make install
安装完成之后,想要使用ctags,那么必须在你想要调试或者查看的代码目录中有tags文件,使用如下语句即可生成tags文件,当用户在当前目录中运行vi时,会自动载入此tags文件。
2)生成tags文件
在源码根目录下执行以下命令来为程序源代码生成标签文件,其-R选项表示递归操作,同时为子目录也生成标签文件,vim利用生成的标签文件,可以进行检索,并在不同的文件、元素之间来回切换。
ctags -R
也可以用ctags file_name1.c filename2.c filename3.h
来产生ctags文件或者ctags *.c *.h
字段补全:
为了使得字段补全有效,在生成tags时需要一些额外的参数,推荐的c++参数主要是:
$ ctags -R --c++-kinds=+px --fields=+iaS --extra=+q
① 选项-R 表示递归创建,也就包括源代码根目录(当前目录)下的所有子目录;
② 选项c+±kinds 用于指定C++语言的 tags记录类型, --c-kinds用于指定c语言的,通用格式是 --{language}-kinds。–c+±kinds=+px 是为c/c+语言添加函数原型信息;
③ 选项fileds 用于指定每条标记的扩展字段域。–fields=+iaS 是为标签添加继承信息(inheritance),访问控制信息(access)和函数特征(Signature)如参数表或原型等;
④ 选项extra用于增加额外的条目: f表示为每个文件增加一个条目, q为每个类增加一个条目。–extra=+q 是为类成员添加标签;
3)指定tags文件位置
(a)假如你想让你当前目录文件中的函数名在其他目录中打开vim时也能被定位到的话,那么可以把当前目录的tags
文件路径添加到~/.vimrc
中,如下所示:
set tags+=/root/mit6.828/jos/tags
如果要引用多个不同目录的tags文件,可以用逗号隔开,set tags=path1, path2...,
或者
set tags+=path1
set tags+=path2
(b)如果经常在不同工程里查阅代码,那么可以在~/.vimrc中添加:
set tags=tags;
set autochdir
第一个命令里的分号是必不可少的,这个命令让vim首先在当前目录里寻找tags文件,如果没有找到tags文件,就到父目录中查找,一直向上递归。因为tags文件中记录的路径总是相对于tags文件所在的路径,所以要使用第二个设置项来改变vim的当前目录。
4)配置
"--ctags setting--
" 按下F5重新生成tag文件,并更新taglist
map <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
imap <F5> <ESC>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
tags包括以下文件:
- #define定义的宏
- 枚举型变量的值
- 函数的定义、原型和声明
- 名字空间(namespace)
- 类型定义(typedefs)
- 变量(包括定义和声明)
- 类(class)、结构(struct)、枚举类型(enum)和联合(union)类
- 结构和联合中成员变量或函数
个人的理解,ctags能定位函数主要是将上述的信息存储到了tags文件中,当我们使用ctags一些命令时,它都会从设置tags路径中查找相应的值,然后跳转过去。下面的cscope同理。
3. 安装配置cscope
cscope可以说是ctags的升级版,他可以在代码中实现快速切换到函数的定义处、查找某个函数被使用的情况等等。
1)假如没有安装cscope可以使用下述命令先安装:
$ sudo apt-get install cscope
同样也可以使用源码包进行安装,https://sourceforge.net/projects/cscope/files/,安装命令同上。接下去就是配置cscope,因为使用cscope查找函数定义等,需要用到cscope.out数据库,通过下面命令即可递归所有源码文件生成.out文件。
2)生成索引文件:
$ cscope -Rbkq
当然我们也可以将相关文件汇集到某一个文件(如cscope.files),然后再使用cscope -bkq -i cscope.files生成out文件,如下:
生成.out文件之后,我们需要在当前用户的用户目录中的.vimrc文件中把.out数据库的路径配置进去,假如不配置的话,cscope无法查找.out所在目录文件中的函数等。
3)添加索引文件位置:
使用cs add命令添加.out的路径,即在~/.vimrc
文件中添加下面这些内容即可:
cs add /home/jackie/fragmetation/linux-4.12.1/linux/cscope.out
当然我们也可以在vim打开的文件中,在底线命令模式下输入上述内容,但是底线命令模式的话,重新打开vim之后,要想再次使用该路径下的cscope.out,那么得再次添加。同ctags,假如将当前目录A中的.out文件的路径添加到了~/.vimrc文件中的话,那么在其他地方打开vim,也可以定位目录A中文件的内容了。
.vimrc文件不存在的话,那么自己创建一下;
当前用户的用户目录:比如root用户那么就是在/root目录下
4)在~/.vimrc中添加set cscopequickfix=s-,c-,d-,i-,t-,e-
这样通过:cs find xxx
查找某个符号后,会立即跳转到第一个找到该符号出现的位置,然后可以通过:copen
来打开quickfix窗口,在quickfix窗口中显示所有出现的位置。
下面配置可使vim 向前自动查找并加载cscope.out
if has("cscope")
set csprg=/usr/bin/cscope
set csto=0
set cst
set csverb
set cspc=3
"add any database in current dir
if filereadable("cscope.out")
cs add cscope.out
"else search cscope.out elsewhere
else
let cscope_file=findfile("cscope.out", ".;")
let cscope_pre=matchstr(cscope_file, ".*/")
if !empty(cscope_file) && filereadable(cscope_file)
exe "cs add" cscope_file cscope_pre
endif
endif
endif
4. 安装配置Taglist
Taglist其实是一个vim的插件,能将当前vim打开的文件中函数名、变量名等在一个窗口中列出来,并支持通过列出的函数名实现跳转。
1)安装taglist
(a)从http://vim-taglist.sourceforge.net/index.html 下载taglist安装包。
(b)进入~/.vim
目录,将taglist安装包解压,将解压后的/doc
和/plugin
目录复制到.vim
目录下
(c)进入~/.vim/doc
目录,在vim下运行helptag .
命令。这个步骤是将doc下的帮助文档加入到vim的帮助主题中,这样我们就可以通过在vim中运行help taglist.txt
查看taglist帮助。
(d)打开配置文件~/.vimrc
,加入以下两行:
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
到此安装已经完成。
接下来是使用Taglist,在vim打开的文件中,切换到底线命令模式,输入Tlist
即可使用该插件了。在vim命令行下运行:Tlist(:TlistOpen, :TlistToggle)
打开Taglist窗口,运行:Tlist(:TlistClose, :TlistToggle)
关闭Taglist窗口。
2)配置
当然你想设置快捷键也可以,如下就是将F2设置为打开Taglist的快捷键了:
" Tlist 的快捷键
map <F2> :Tlist <CR>
其他一些选项可在~/.vimrc脚本中添加。如:
"设置ctags路径
let Tlist_Ctags_Cmd = '/usr/bin/ctags'
"启动vim后自动打开taglist窗口
let Tlist_Auto_Open = 1
"不同时显示多个文件的tag,仅显示一个
let Tlist_Show_One_File = 1
"taglist为最后一个窗口时,退出vim
let Tlist_Exit_OnlyWindow = 1
"非当前文件,函数列表折叠隐藏
let Tlist_File_Fold_Auto_Close=1
"taglist窗口显示在右侧,缺省为左侧
let Tlist_Use_Right_Window = 1
"设置taglist窗口大小
"let Tlist_WinHeight = 100
let Tlist_WinWidth = 40
"是否一直处理tags.1:处理;0:不处理
let Tlist_Process_File_Always=1 "实时更新tags
let Tlist_Inc_Winwidth=0
"设置taglist打开关闭的快捷键F8
noremap <F8> :TlistToggle<CR>
"更新ctags标签文件快捷键设置
noremap <F6> :!ctags -R<CR>
我们可以通过ctrl+w
快捷键或者鼠标点击
在Taglist窗口和编辑区之间切换焦点,在Taglist窗口用鼠标选择某个符号并点击或者用键盘选择某个符号并回车,就可以跳转到该符号定义的位置。
附:Taglist下载地址:https://www.vim.org/scripts/script.php?script_id=273
5. 安装配置Nerdtree
Nerdtree其实也是一个vim插件,他是列出当前目录的文件结构,同安装Taglist类似。
1)安装Nerdtree
(a)先下载压缩包(下载地址:http://www.vim.org/scripts/script.php?script_id=1658)
(b)解压得到doc/,nerdtree_plugin/,plugin/,syntax/
将后面3个文件夹的xxx.vim结尾的插件复制到./vim/plugin/目录下,并chmod a+x
权限,将doc/目录下的NERD_tree.txt复制到./vim/doc目录下并在当前目录下执行vim,在vim命令行中:helptags .
,这样以后就能在vim中通过:help NERD_tree.txt
来查看对应的帮助文档。
Nerdtree使用方式也跟Taglist一样,在vim打开的文件中,切换到底线命令模式,输入:NERDTree 或 :NERDTreeToggle
,回车就可以了,当然你也可以设置快捷键方式。
2)配置
考虑到Nerdtree和Taglist共同显示的问题,我们可以将NERDTree设置到vim窗口的右侧(默认为左侧),在~/.vimrc
文件中添加如下内容
let NERDTreeWinPos="right"
当你想打开NERDTree窗口的时候,自动显示书签,那么在~/.vimrc
文件中添加如下内容
let NERDTreeShowBookmarks=1
当你想在vim启动的时候默认开启NERDTree,那么在~/.vimrc文件中添加如下内容,其中autocmd
可以缩写为au
autocmd VimEnter * NERDTree
设置NERDTree打开关闭的快捷键F2
noremap <F2> :NERDTreeToggle<CR>
这样以后在vim中直接按F2就能在右边显示文件列表栏了。
附:Nerdtree的下载地址:https://www.vim.org/scripts/script.php?script_id=1658
6. 上述工具的简单使用
这篇先讲一下上述工具的简单基本的使用,更加详细的工具介绍以后还会推出。
6.1. ctags的简单使用
当前目录生成tags文件之后,在当前目录vim一个文件,这样就可以操作了:
命令 | 意义 |
---|---|
:ta x(ta是tag的缩写) | 跳转到符号x的定义处,如果有多个符号,直接跳转到第一处(该命令是在当前窗口显示标签) |
:stag x | 新窗口显示符号x,光标跳到符号处 |
:ts x | 列出符号x的定义 |
:tj x | 可以看做上面两个命令的合并,如果只找到一个符号定义,那么直接跳转到符号定义处,如果有多个,则让用户自行选择 |
:tn/:tp | 在符号的多个定义之间跳转 |
Ctrl+] | 跳转到当前光标下符号的定义处,和ta类似 |
Ctrl+t | 退到跳转之前 |
Ctrl+W+] | 新窗口显示当前光标下单词的标签,光标跳到标签处 |
:tfirst (简写 :tf ) |
到第一个匹配(在各匹配的标签间移动) |
:[count]tprevious (简写 :tp ) |
向前 [count] 个匹配 |
:[count]tnext ((简写 :tn ) |
向后 [count] 个匹配 |
:tlast (简写 :tl ) |
到最后一个匹配 |
:tselect TagName | 选择要跳转到哪一个 |
:ptag TagName | 预览窗口显示TagName标签,光标跳到标签处 |
Ctrl+W + } | 预览窗口显示当前光标下单词的标签,光标跳到标签处 |
:pclose | 关闭预览窗口 |
:pedit file.h | 在预览窗口中编辑文件file.h(在编辑头文件时很有用) |
:psearch atoi | 查找当前文件和任何包含文件中的单词并在预览窗口中显示匹配,在使用没有标签文件的库函数时十分有用 |
6.2. cscope的简单使用
cscope用的比较多的是在vim底线命令模式中输入如下格式的内容:
:cs find {
querytype} {
name}
其中{querytype}内容如下:
querytype | 含义 |
---|---|
0或者s | 查找这个C符号 |
1或者g | 查找这个定义 |
2或者d | 查找被这个函数调用的函数(们 ) |
3或者c | 查找调用这个函数的函数(们) |
4或者t | 查找这个字符串 |
6或者e | 查找这个egrep匹配模式 |
7或者f | 查找这个文件 |
8或者i | 查找#include这个文件的文件(们) |
比如我想查找main这个函数的定义,那么在底线命令行中输入:
cs find g main
6.3. Taglist使用
在Vim命令行下运行“:Tlist
”就可以打开Taglist窗口,再次运行“:Tlist
”则关闭。
左右窗口切换Ctrl+ww
在taglist窗口中,可以使用下面的快捷键:
快捷键 | 含义 |
---|---|
<CR> |
跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样 |
o | 在一个新打开的窗口中显示光标下tag |
<Space> |
显示光标下tag的原型定义 |
u | 更新taglist窗口中的tag |
s | 更改排序方式,在按名字排序和按出现顺序排序间切换 |
x | taglist窗口放大和缩小,方便查看较长的tag |
+ | 打开一个折叠,同zo |
- | 将tag折叠起来,同zc |
* | 打开所有的折叠,同zR |
= | 将所有tag折叠起来,同zM |
[[ | 跳到前一个文件 |
]] | 跳到后一个文件 |
q | 关闭taglist窗口 |
显示帮助 |
6.4. vim使用
1)高亮所有搜索模式匹配
shift + *
向后搜索光标所在位置的单词shift + #
向前搜索光标所在位置的单词n和N
可以继续向后或者向前搜索匹配的字符串:set hlsearch
高亮所有匹配的字符串:nohlsearch
临时关闭:set nohlsearch
彻底关闭,只有重新:set hlsearch才可以高亮搜索
2)语法高亮
syntax on
syntax off
3)vimgrep
vimgrep /匹配模式/[g][j] 要搜索的文件/范围
g: 表示是否把每一行的多个匹配结果都加入
j: 表示是否搜索完后定位到第一个匹配的位置
:vimgrep /pattern/%
在当前打开文件中查找:vimgrep /pattern/ *
在当前目录下查找所有:vimgrep /pattern/ **
在当前目录及其子目录下查找所有:vimgrep /pattern/ *.c
查找当前目录下所有的.c文件:vimgrep /pattern/ **/*
只查找子目录:cn
查找下一个:cp
查找上一个:copen
打开quickfix:cw
打开quickfix:cclose
关闭quickfix:help vimgrep
查看vimgrep帮助
通过:vimgrep /pattern/gj path
来查找字符串,最好将右边的文件列表显示栏关闭,这样quickfix窗口显示比较方便查看。
4)修改了配置文件.vimrc并保存后,如果希望不重启vim而让配置立即生效,可以在打开的vim中执行:
source ~HOME/.vimrc
5)vim颜色配置方案
:highlight
可以查看具体的颜色配置:highlight LineNr term=underline,bold ctermfg=3 guifg=Brown
:set colorcolumn=80
设置边界线为80列:set colorcolumn=0
取消边界线设置:highlight colorcolumn ctermbg=4 guibg=Blue
:help cterm-colors
可以查看颜色对应的值
6)vim打开多个文件
vim file1 file2 file3 file4
或者进入vim后使用:e文档名
来打开文档
:n
跳到后面那个文件:N
跳到前面那个文件:files
查看打开了哪些文件:file
查看当前的文件名
7)vim自动补全
ctrl + n
或者ctrl + p
http://jingyan.baidu.com/article/76a7e409b5d525fc3b6e15fc.html
8)复制vim文件中所有内容
gg
回到文件首shift + v
进入VISUAL LINE模式shift + g
全选所有内容ctrl + insert
复制所选的内容
9)[[
跳到函数头部,]]
跳到函数尾部
10)quickfix是vim的标准插件,本身就带有quickfix功能将编译过程中产生的错误信息保存到文件中,然后vim利用这些信息跳转到源文件的对应位置,我们就可以进行错误的修正,之后跳到下一个错误重复上述操作,从而极大地提高编译错误的修改效率
quick常用命令:
:cc
显示详细错误信息:cp
跳到上一个错误:cn
跳到下一个错误:cl
列出所有的错误:copen
打开quickfix窗口,可以在后面添加窗口高度参数,如10行,:copen 10:cclose
关闭quickfix窗口
11)按v进入可视化界面,然后通过左右键选择文本,再按y进行复制,p就可以进行粘帖了
12)不退出vim,直接在vim中执行":!gcc file.c -o file
"就可以编译程序了
13)vim常用快捷键
快捷键 | 含义 |
---|---|
% | 跳转到配对的括号去 |
[[ | 跳转到当前或者上一代码块(函数定义、类定义等)的开头去(但要求代码块中’{'必须单独占一行) |
][ | 跳转到当前代码块(函数定义、类定义等)的结尾去(但要求代码块中’{'必须单独占一行) |
]] | 跳转到下一代码块(函数定义、类定义等)的开头去(但要求代码块中’{'必须单独占一行) |
[/ | 跳到注释开头(只对/* */注释有效) |
]/ | 跳到注释结尾(只对/* */注释有效) |
gD | 跳转到当前文件内标识符首次出现的位置,可用于跳转到全部变量的定义处;查找局部变量时,要是多个函数中定义了该局部变量,使用gD进行查找,找到的变量定义可能不是你需要的 |
gd | 跳转到当前函数内标识符首次出现的位置,可用于跳转到局部变量的定义处 |
‘’ | 跳转到光标上次停靠的地方, 是两个’, 而不是一个" |
mx | 设置书签,x只能是a-z的26个字母 |
`x | 跳转到书签处 |
> | 增加缩进,"x>"表示增加以下x行的缩进 |
< | 减少缩进,"x<"表示减少以下x行的缩进 |
附录:
vim 官网:http://www.vim.org/sponsor/index.php
ctags 官网:http://ctags.sourceforge.net/
cscope官网:http://cscope.sourceforge.net/
taglist 官网:http://vim-taglist.sourceforge.net/download.html
nerdtree 官网:http://www.vim.org/scripts/script.php?script_id=1658