记录使用vim查看kernel代码的过程,逐步打造成为一个Souce Insight。
session & viminfo
使用vim打开编辑了一些文件,并想把这些文件作为一个工程,下次直接恢复编辑。
:mks sesseion-kernel.vim
可以在vim启动时设置参数读取session文件来还原设置
$vim -S /path/to/Session.vim
如果启动vim后想读取一个session设置,重新打开该工程
:source session-kernel.vim
后面编辑增减了文件,更新session文件
:mks! session-kernel.vim
工程文件中保存相对路径(这样该工程文件就可以在不同机器上通用)。
:set sessionoptions -= curdir :set sessionoptions += sesdir :set sessionoptions? sessionoptions=blank,buffers,folds,help,options,tabpages,winsize,sesdir
使用.vimrc配置简化操作
" execute project related configuration in current directory autocmd VimEnter * :call s:ReadSession() function! s:ReadSession() let session_file = "./session.vim" if filereadable( session_file ) execute "so " . session_file endif endfunction autocmd VimLeave * :call s:WriteSession() function! s:WriteSession() let session_file = "./session.vim" if filereadable( session_file ) execute "mks! " . session_file endif endfunction
多窗口
打开当前文件所在的目录 ,fe
使用,fe打开了一个目录窗口,需要在上一个窗口打开目录窗口中的某个文件 P
浏览当前打开的所有文件 ,be ,bv
Ctrl-W h 移动到窗口左边 Ctrl-W j 移动到窗口下边 Ctrl-W k 移动到窗口上边 Ctrl-W l 移动到窗口右边
:vnew //垂直打开一个新的窗口
tags
将当前目录下的所有文件生成tags文,放置在当前路径下 #ctags -R ./
打开vim,设置tags选项为当前目录下的tags文件 :set tags=tags
跳转到指定的标签,例如跳转到main函数 :tag main
显示标签栈 :tags
跳转到当前光标下的标签 CTRL-]
跳到标签栈中较早的标签 CTRL-T
查看所有的main函数 :ts main
打开gitk工具
#gitk //当前目录打开gitk这个GUI Ctrl + Z //将gitk到后台运行 #jobs //查看后台运行的程序 #bg //将程序到后台运行
文件搜索
设置vim的文件搜索路径:
set path=.,/usr/include,,~/workspace/4412/kernel-4412/**
解释一下各项的含义:
- . //在当前文件所在目录中搜索
- /usr/include //在/usr/include目录中搜索
- //表示一个空的字符,在当前工作路径中搜索,也就是:pwd命令显示的路径
- ~/workspace/4412/kernel-4412/** //在其所有子目录树中进行搜索
设置了path之后,如何查找文件呢?
- 将光标定位到某个文件的单词,在normal模式下按下"gf",使用Ctrl+^可以返回上一个文件;
- 将光标定位到某个文件的单词,在normal模式下按下"ctrl+w f"可以在一个水平窗口打开该文件
- 使用:find命令,例如:find printk.c
lookupfile插件
生成文件名列表tag文件,为lookupfile插件所用:
$echo '!_TAG_FILE_SORTED 2 /2=foldcase/' >tagfile $find `pwd` -type f \( -name "*.[ch]" -o -name "*.[ch]pp" \) -printf "%f\t%p\t1\n"|sort -f >> filenametags
有关lookupfile插件的使用,参考vimrc的gist文件。