(24条消息) Ubuntu 搭建强大的 IDE —— Vim + Vundle + 插件(上)_ubuntu安装vundle_阿基米东的博客-CSDN博客
(转)Vim十大必备插件 - shanql - 博客园 (cnblogs.com)
我们知道在每个账户的根目录下可以用 .vimrc 文件进行对vim的配置,同时不影响其他账户使用vim。同样的在 .vimrc 中可以进行对 ctags 以及 cscope 的配置,让使用方式的第2步在vim开启时刻就完成。
此外还可以运用 nmap 映射一个快捷键,在 vim 中运行 shell 命令以完成关键词文件的生成,也就是上述第1步。
vim .vimrc
首先再用户根目录下进入 .vimrc文件。在其中添加以下语句。
"Generate tags and cscope.out from FileList.txt (c, cpp, h, hpp)
nmap :!find -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" > FileList.txt
\ :!ctags -L -< FileList.txt
\ :!cscope -bkq -i FileList.txt
将 find,ctags, cscope 命令映射到 ctrl + @ 快捷键上。
find具体实现的是查找当前目录以及子目录下所有 .h, .hpp, .c, .cpp文件,将找到的文件名放到 FileList.txt 文件中。如果你需要 java 文件,或是 hidl 文件,或是 .xml 文件,则将想要的文件后缀添加到 find 命令中即可。
ctags -L 是采用指定文件生成 tags,用这个命令生成 tags 会让它只包含 FileList.txt 文件中所列的文件。以这种方式过滤特定后缀的文件,使得 tags 大大减小。(tags的大小直接影响跳转的效率。有时包含一些编译生成文件.bin ,.so 等会让 tags 变得特别大,在跳转时非常卡顿,会列出许多无效的索引。)
cscope -bkq -i 同理会使用指定文件提供的文件列表生成 cscope.out。
编辑完成退出后,就可以使用 ctrl + @ 快捷生成 tags 以及 cscope.out 了。
cd xxxxxxx
vim ./
:qa!
进入工程相关代码目录(非工程根目录,不然你会为整个工程生成插件文件。有的工程非常大,导致生成插件文件会非常卡,并且不根本不需要无关的代码索引,所以你只需要进入你负责的代码目录就行),vim 打开本目录,然后 ctrl + @ 生成插件文件。
生成后输入:qa! 强制退出 vim ,此时插件所需文件就完全准备好了。
再次回到用户根目录,进入 .vimrc 文件。在里面添加如下配置。
if has("cscope")
set csto=0
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
endif
set csverb
"set cst 这两句会将cscope当作tag,当找不到时会卡住,因此注释掉
"set cscopetag
endif
nmap zs :cs find s =expand("")
nmap zg :cs find g =expand("")
nmap zc :cs find c =expand("")
nmap zt :cs find t =expand("")
nmap ze :cs find e =expand("")
nmap zf :cs find f =expand("")
nmap zi :cs find i ^=expand("")$
nmap zd :cs find d =expand("")
vim 打开时会自动加载当前目录下的 tags 文件,因此 tags 不用配置了。但 cscope.out 需要配置才能在 vim 打开时加载。
如上的配置将在当前目录执行 cs add cscope.out 以完成加载,并将 cscope.out 当作 tags 使用。此外映射了 cs 的快捷建。其中 z + c 和 z + t 两个快捷操作可以实现跳转到定义,以及搜索光标所在字符串出现的所有位置。
最后保存退出,那么所有的快捷配置就完成了。
每当拿到新的工程代码,进入相关代码目录,利用 vim ./ 打开当前目录, 然后 crtl + @ 生成插件所需文件,最后退出 vim。此步只需进行一次。
在此目录中打开任意代码文件或任意子目录代码文件,
利用 crtl + ] 跳转到定义。
利用 z + c 跳转到调用。
利用 z + t 查找光标所在的字符串出现的所有位置。
利用 crtl + t 跳转回到上次的位置。
至此我们强大的IDE快捷使用方式就介绍完了。需要完善你的 IDE 使其超越 VS,那么你可以多多去了解其他 vim 的插件,诸如 Tlist,Minibuffer,omnifunc等。
4. cscope快捷键.vimrc中配置
1 2 3 4 5 6 7 8 9 |
noremap |
這邊將:cs
出現的所有指令全部設定快捷鍵。假設有個hello()
函數,欲查詢他的定義,只要將游標移動到函數名稱任何一個字元上,按下Ctrl+\
再按g
,則可跳轉到他的定義,依此類推。使用Ctrl+T
可以跳回上一個位置,無論中間指標移動幾次,非常方便。
或者:
nmap表示在vim的普通模式下映射,当然相对与编辑模式和可视模式而言的,我们不多说。
有了这个快捷键,我们使用cscope的效率就提升了,加上 ctrl+] , ctrl+o , ctrl+t 我们看项目代码基本就比较舒服了。
===============================================================
cscope需要包含多个目录时,可以先将目录导入到一个文件中,然后再使用cscope命令
具体参考文档
vim+ctags+cscope+Taglist+Nerdtree打造成sourceinsight - 知乎 (zhihu.com)
ctrlp模糊查找文件插件的使用:
(45条消息) Vim插件推荐--模糊搜索插件ctrlp使用方法_ctrlp vim_tboqi1的博客-CSDN博客