记录使用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/**

解释一下各项的含义:

设置了path之后,如何查找文件呢?

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文件。