ctags安装与配置
sudo apt-get install ctags
进入源码目录,如:/home/xxx/arm/linux-2.6.24.7目录下
输入命令ctags -R *,你会发现多了一个tags文件,这个就是索引文件
向vim注册索引文件tags的路径
vi ~/.vimrc
"--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>
set tags=tags
set tags+=./tags "add current directory's generated tags file
set tags+=~/arm/linux-2.6.24.7/tags "add new tags file,(不要将tags移动到别的目录,否则ctrl+]时,会提示找不到源码文件)
标签浏览器Taglist
Taglist用于列出了当前文件中的所有标签(宏, 全局变量, 函数名等)
安装
vim-addons install taglist
配置
vim ~/.vimrc
"-- Taglist setting --
let Tlist_Ctags_Cmd='ctags' "因为我们放在环境变量里,所以可以直接执行
let Tlist_Use_Right_Window=1 "让窗口显示在右边,0的话就是显示在左边
let Tlist_Show_One_File=0 "让taglist可以同时展示多个文件的函数列表
let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏
let Tlist_Exit_OnlyWindow=1 "当taglist是最后一个分割窗口时,自动推出vim
"是否一直处理tags.1:处理;0:不处理
let Tlist_Process_File_Always=1 "实时更新tags
let Tlist_Inc_Winwidth=0
Cscope
Cscope是一个类似于ctags的工具,不过其功能比ctags强大很多
vi ~/.vimrc
"-- Cscope setting --
if has("cscope")
set csprg=/usr/bin/cscope " 指定用来执行cscope的命令
set csto=0 " 设置cstag命令查找次序:0先找cscope数据库再找标签文件;1先找标签文件再找cscope数据库
set cst " 同时搜索cscope数据库和标签文件
set cscopequickfix=s-,c-,d-,i-,t-,e- " 使用QuickFix窗口来显示cscope查找结果
set nocsverb
if filereadable("cscope.out") " 若当前目录下存在cscope数据库,添加该数据库到vim
cs add cscope.out
elseif $CSCOPE_DB != "" " 否则只要环境变量CSCOPE_DB不为空,则添加其指定的数据库到vim
cs add $CSCOPE_DB
endif
set csverb
endif
map <F4> :cs add ./cscope.out .<CR><CR><CR> :cs reset<CR>
imap <F4> <ESC>:cs add ./cscope.out .<CR><CR><CR> :cs reset<CR>
" 将:cs find c等Cscope查找命令映射为<C-_>c等快捷键(按法是先按Ctrl+Shift+-, 然后很快再按下c)
nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<CR><CR> :copen<CR><CR>
cscope的主要功能是通过其"find"子命令来实现的
"cscope find"的用法:
cs find c|d|e|f|g|i|s|t name
0 或 s 查找这个 C 符号(可以跳过注释)
1 或 g 查找这个定义
2 或 d 查找这个函数调用的函数
3 或 c 查找调用过这个函数的函数
4 或 t 查找这个字符串
6 或 e 查找这个 egrep 模式
7 或 f 查找这个文件
8 或 i 查找包含这个文件的文件
用法:
1.为源码建立一个cscope数据库
lingd@ubuntu:~/arm/linux-2.6.28.7$ cscope -Rbq
lingd@ubuntu:~/arm/linux-2.6.28.7$ ls cscope.*
cscope.in.out cscope.out cscope.po.out
Vim 有12个粘贴板依次编号为:0、1、2、...、9、a、"、+,其中 + 号为系统粘贴板,” 为临时粘贴板。系统剪切板中的内容可在其他程序中使用。上面的复制指令都可以配合剪切板进行操作。
"nyw 复制当前单词到 n 号剪切板(双引号开始)
"np 粘贴 n 号剪切板内容到当前位置后
"+Y 复制当前行到系统剪切板
"+ny 复制当前行加下面 n 行到系统剪切板
"+p 粘贴系统剪切板内容到当前位置后
"+yy // 复制当前行到剪切板
"+p // 将剪切板内容粘贴到光标后面
"ayy // 复制当前行到寄存器 a
"ap // 将寄存器 a 中的内容粘贴到光标后面
1. `$ vim --version | grep clipboard`查看vim是否支持clipboard功能
2. 如果`+clipboard`则跳过这一步; 如果显示的是`-clipboard`说明不支持, 需要`$ sudo apt install vim-gtk`, 因为默认安装的vim有些功能不支持, 安装`vim-gtk`包可以`get the extra features`
3. 使用`+`寄存器与系统粘贴板互通数据, `"+yy`等操作
参数资料: How to make vim paste from (and copy to) system's clipboard?