用过source insight、vim(未使用插件)建立编写linux内核工程,一直想找个更合适的工具。毕竟,source insight是商业软件,而vim如果不使用插件还是不怎么方便。了解到vim和emacs都可以用插件构建出源码工程,尝试过emacs没能成功,也许是我用vim已经习惯了,最近用vim尝试了一下,就没有问题。
vim的linux内核工程主要参考了《Linux内核开发环境管理和搭建(Git&Vim)》。Ubuntu系统下。
(1)从https://www.kernel.org/下载最新稳定版本linux-4.16.4.tar.xz,运行tar -xvf linux-4.16.4.tar.xz解压。
(2)在https://download.csdn.net/download/notbaron/9907972 下载所需要的插件。
(3)运行cd后,在当前用户主目录建立文件夹.vim/autoload/,.vim/syntax/,.vim/doc/,.vim/plugin/。
(4)将plug.vim复制到.vim/autoload/ ;
taglist的doc文件夹内容复制到.vim/doc/,plugin文件夹内容复制到.vim/plugin/ ;
winmanager的doc文件夹内容复制到.vim/doc/,plugin文件夹内容复制到.vim/plugin/ ;
minibufexpl.vim复制到.vim/plugin/ ;
a.vim复制到.vim/plugin/ ;
grep.vim复制到.vim/plugin/ ;
visualmark.vim复制到.vim/plugin/ 。
(5)对于supertab.vmb
vim supertab.vmb
:so %
(6)ctags 在Ubuntu上自带。
内核源码linux-4.16.4中执行make tags,会生成tags
(7)tar -xzvf cscope-15.8b.tar.gz 解压cscope, sudo make & make install编译安装。
在源码根目录linux-4.16.4中执行如下:
$ cscope -Rbq
会生成三个文件, cscope.in.out, cscope.out, cscope.po.out
(8)运行cd后,在当前用户主目录建立文件.vimrc,内容如下:
" Specify a directory for plugins
" - For Neovim: ~/.local/share/nvim/plugged
" - Avoid using standard Vim directory names like 'plugin'
call plug#begin('~/.vim/plugged')
" Make sure you use single quotes
" 注意要使用单引号
" Shorthand notation; fetches https://github.com/junegunn/vim-easy-align
" 如果插件在 GitHub 的地址是 https://github.com/junegunn/vim-easy-align
" 可以缩写成下面这样
Plug 'junegunn/seoul256.vim'
Plug 'junegunn/vim-easy-align'
" Any valid git URL is allowed
" 或者直接给定插件 git 地址
Plug 'https://github.com/junegunn/vim-github-dashboard.git'
" Multiple Plug commands can be written in a single line using | separators
" 多个 `Plug` 命令可以写在一行,用 `|` 符号分割
Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'
" On-demand loading
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
" Using a non-master branch
Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
" Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
Plug 'fatih/vim-go', { 'tag': '*' }
" Plugin options
Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' }
" Plugin outside ~/.vim/plugged with post-update hook
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
" Unmanaged plugin (manually installed and updated)
Plug '~/my-prototype-plugin'
" Initialize plugin system
call plug#end()
syntax enable
syntax on
colorscheme desert
set tags=/home/yong/linux-4.16.4/tags
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
let g:winManagerWindowLayout='FileExplorer|TagList'
nmap wm :WMToggle
set cscopequickfix=s-,c-,d-,i-,t-,e-
cs add /home/yong/linux-4.16.4/cscope.out /home/yong/linux-4.16.4
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplMapWindowNavVim = 1
filetype plugin indent on
set completeopt=longest,menu
let g:SuperTabRetainCompletionType=2
let g:SuperTabDefaultCompletionType="<C-X><C-O>"
(9)
Vim-plug
(plug.vim)是一个
mini
的插件管理器
打开vim后执行:PlugInstall来安装插件,:PlugUpdate来更新插件,执行 :PlugClean来移除未使用的插件,:PlugUpgrade来更新vim-plug本身。PlugStatus:查看插件状态。
(10)进入源码linux-4.16.4目录,运行vim,在vim中执行wm,或者:WMToggle。https://blog.csdn.net/sxw1002/article/details/54866124
常用操作
ctrl + w + h 光标focus左侧树形目录
ctrl + w + l 光标focus右侧文件显示窗口
ctrl + w + w 光标自动在左右侧窗口切换
ctrl + w + r 移动当前窗口的布局位置
O 递归打开选中结点下的所有目录
x 合拢选中结点的父目录
X 递归合拢选中结点下的所有目录
P 跳到根结点
p 跳到父结点
K 跳到当前目录下同级的第一个结点
J 跳到当前目录下同级的最后一个结点
k 跳到当前目录下同级的前一个结点
j 跳到当前目录下同级的后一个结点
试用了一下,觉得不好用,想查找include/linux/mm.h文件中的typedef struct page,最后vim卡住不动了。