一、vim配置文件
查看各个配置文件路径
vim --version
用户级配置文件
$HOME/.vimrc 只对当前用户有效
系统级配置文件
/etc/vim/vimrc 对所有的用户都有效
二、使用ctags在函数、变量、宏之间来回跳转
1. 解压&编译&安装
tar xvf ctags-xx.tar.gz
./configure
make
make install
2. 生成并导入tags文件
Tags文件包含了:用#define定义的宏、函数的定义和声明、变量、类、结构体、枚举、联合及其成员变量及函数
Tags文件没有包含函数使用信息,如果想知道一个函数在什么地方被调用过,需要使用cscope
生成项目的tags文件:
ctags –R *
将tags文件导入vim:
:set tags=/home/linux4.4/tags
若新增或修改了函数名、结构体类型,要重新生成tags文件。
3. 常用命令
在vim命令行模式
命令 | 说明 |
---|---|
:tag {ident} | 跳转到指定的标签 |
:tags | 显示标签栈 |
在Normal模式下
命令 | 说明 |
---|---|
Ctrl+] | 跳转到当前光标下的标签 |
Ctrl+t/o | 跳回标签栈中叫早的标签 |
:tn/tp | 在符号的多个定义之间跳转 |
:ta x | 跳转到符号x的定义处 |
:ts x | 列出符号x的定义 |
:tj x | 可以看作上面2个命令的合并,如果只找到一个定 义,直接跳转;若找到多个,则让用户自行选择 |
Ctrl+p/n | 自动补全、前后选择 |
Ctrl+y | 选中插入 |
三、使用taglist显示函数、宏、结构体列表
1. 解压&安装
unzip taglist_xx.zip
mkdir -p ~/.vim/doc
cp doc/taglist.txt ~/.vim/doc
cp plugin/taglist.vim ~/.vim/plugin
2. 使用
打开taglist窗口
:Tlist
使用空格键,在屏幕底行显示函数原型
关闭taglist窗口
TlistClose
3. .vimrc配置
nmap tl :Tlist<CR>
let Tlist_Show_One_File = 1 " 只显示当前文件的tags
let Tlist_Exit_OnlyWindow = 1 "如果Taglist窗口是最后一个窗口则退出Vim
"let Tlist_Use_Right_Window = 1 "在右侧窗口中显示
let Tlist_File_Fold_Auto_Close = 1 " 自动折叠
"let Tlist_Auto_Open = 1 "默认打开taglist
let Tlist_Sort_Type = "name" " 按姓名排列tags
let Tlist_Process_File_Always=1 " 实时更新tags
四、winmanager显示文件列表窗口
1. 解压&安装
unzip winmanager.zip
cp doc/winmanager.txt ~/.vim/doc/
cp plugin/*.vim ~/.vim/plugin
2. 使用
WMToggle
WMClose
3. .vimrc配置
nmap wm :WMToggle<CR> "快捷键设置
let g:winManagerWindowLayout='FileExplorer|TagList' "不同窗口
nmap lu :FirstExplorerWindow<cr> "lu跳转到左上窗口
nmap lb :BottomExplorerWindow<CR> "lb跳转到左下窗口
五、cscope安装及使用
1. 下载地址
2. 编译&安装
./configure;make;make install
3. 配置查找方式
set cscopequickfix=s-,c-,d-,i-,t-,e- "在vimrc中修改
4. 生成Cscope符号表数据库
在源码目录下运行下面的命令
cscope -Rbq
5. 测试运行
cscope -Rk
6. 使用
:cs add /home/linux-4.4/cscope.out /home/linux-4.4
:cs find g usb_submit_urb
:cs find c usb_submit_urb
7. 常用的查找命令
命令 | 函数 |
---|---|
s | 查找本C符号 |
g | 查找本定义 |
d | 查找本函数调用的函数 |
c | 查找调用本函数的函数 |
t | 查找本字符串 |
f | 查找本文件 |
i | 查找包含本文件的文件 |
六、quickfix进行位置列表显示及跳转
1. 常用命令
命令 | 含义 |
---|---|
:cc | 显示详细错误信息( :help :cc ) |
:cp | 跳到上一个错误 ( :help :cp ) |
:cn | 跳到下一个错误 ( :help :cn ) |
:cl | 列出所有错误 ( :help :cl ) |
:cw | 如果有错误列表,则打开quickfix窗口 ( :help :cw ) |
:col | 到前一个旧的错误列表 ( :help :col ) |
:cnew | 到后一个较新的错误列表 ( :help :cnew ) |
2. .vimrc配置
set cscopequickfix=s-,c-,d-,i-,t-,e-
map <F6>s :cs find s <C-R>=expand("<cword>")<CR><CR>
map <F6>g :cs find g <C-R>=expand("<cword>")<CR><CR> <C-R>
map <F6>c :cs find c <C-R>=expand("<cword>")<CR><CR> :cw<CR>
map <F6>t :cs find t <C-R>=expand("<cword>")<CR><CR>
map <F6>e :cs find e <C-R>=expand("<cword>")<CR><CR>
map <F6>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
map <F6>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
map <F6>d :cs find d <C-R>=expand("<cword>")<CR><CR>
map cw :cw<cr> "配置打开位置列表快捷键
map <F6> :cw<cr> "配置打开位置列表快捷键
map <F3> :cp<cr> "跳转到前一个位置
map <F4> :cn<cr> "跳转到下一个位置
七、总结
.vimrc文件
call plug#begin('~/.vim/plugged')
Plug 'itchyny/lightline.vim'
Plug 'tpope/vim-fugitive'
Plug 'junegunn/gv.vim'
Plug 'airblade/vim-gitgutter'
Plug 'vim-scripts/winmanager'
Plug 'vim-scripts/taglist.vim'
call plug#end()
" 为显示lightline设置显示2行状态 插件的状态需要在倒数第二行显示
set laststatus=2
" 状态栏下面不在单独显示模式
set noshowmode
" 配置lightline主题 let 就是定义了一个全局变量
let g:lightline = {
\ 'colorscheme': 'one',
\ }
"********************************************************************************
" 基本设置
"********************************************************************************
"不要使用vi的键盘模式,而是vim自己的
set nocompatible
"开启语法高亮功能
syntax enable
"语法高亮度
syntax on
"高亮显示当前行
set cursorline
" 在状态栏显示正在输入的命令
set showcmd
" 侦测文件类型
filetype on
" 载入文件类型插件
filetype plugin on
" 为特定文件类型载入相关缩进文件
filetype indent on
"搜索忽略大小写
set ignorecase
"tab键4个空格
set tabstop=4
"自动缩进与级别
set shiftwidth=4
set autoindent
"表示不需要备份文件
set nobackup
"表示不创建临时交换文件
set noswapfile
"自动读取更改文件
set autoread
"自动保存
set autowrite
" vim 中可以使用鼠标
set mouse=a
" 选择模式使用鼠标
set selectmode=mouse,key
" 共享剪贴板
set clipboard+=unnamed
"********************************************************************************
" 主题设置
"********************************************************************************
" GUI 模式浅色背景,终端模式深色背景
if has('gui_running')
set background=light
else
set background=dark
endif
" 主题设置为 solarized
"dic"colorscheme solarized
"colorscheme molokai
"********************************************************************************
" 编码设置
"********************************************************************************
" 帮助语言首选
set helplang=cn
" 菜单使用的语言
set langmenu=zh_CN.UTF-8
" Vim 所工作的终端的字符编码方式
set termencoding=utf-8
" Vim 内部使用的字符编码方式
set encoding=utf8
" Vim 启动时会按照 fileencodings 所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,
" 并且将 fileencoding 设置为最终探测到的字符编码方式
set fileencodings=ucs-bom,utf8,gbk,cp936,gb2312,gb18030
" 文件输入输出使用的格式,默认为 UNIX 格式
set fileformats=unix,dos
"********************************************************************************
" 搜索配置
"********************************************************************************
" 高亮显示搜索结果
set hlsearch
" 输入搜索时,同时高亮部分的匹配
set incsearch
" 搜索时忽略大小写
set ignorecase
" 搜索时尝试smart,即模式中有大写字母时不忽略大小写
" 括号映射
"inoremap [ []<Esc>i
"inoremap ] []<Esc>i
"inoremap ( ()<Esc>i
"inoremap ) ()<Esc>i
"inoremap { {<CR>}<Esc>O
"inoremap } {<CR>}<Esc>O
"inoremap < <><Esc>
"inoremap " ""<Esc>
"inoremap ' ''<Esc>
map - ddp
map = dd2kp
inoremap <C-L> <Esc>la
inoremap <C-H> <Esc>ha
inoremap <C-J> <Esc>ja
inoremap <C-K> <Esc>ka
set autochdir
set tags=tags;
nmap tl :Tlist<CR>
let Tlist_Show_One_File = 1 " 只显示当前文件的tags
let Tlist_Exit_OnlyWindow = 1 "如果Taglist窗口是最后一个窗口则退出Vim
"let Tlist_Use_Right_Window = 1 "在右侧窗口中显示
let Tlist_File_Fold_Auto_Close = 1 " 自动折叠
"let Tlist_Auto_Open = 1 "默认打开taglist
let Tlist_Sort_Type = "name" " 按姓名排列tags
let Tlist_Process_File_Always=1 " 实时更新tags
nmap wm :WMToggle<CR> "快捷键设置
let g:winManagerWindowLayout='FileExplorer|TagList' "不同窗口
nmap lu :FirstExplorerWindow<cr> "lu跳转到左上窗口
nmap lb :BottomExplorerWindow<CR> "lb跳转到左下窗口
set cscopequickfix=s-,c-,d-,i-,t-,e-
map <F6>s :cs find s <C-R>=expand("<cword>")<CR><CR>
map <F6>g :cs find g <C-R>=expand("<cword>")<CR><CR> <C-R>
map <F6>c :cs find c <C-R>=expand("<cword>")<CR><CR> :cw<CR>
map <F6>t :cs find t <C-R>=expand("<cword>")<CR><CR>
map <F6>e :cs find e <C-R>=expand("<cword>")<CR><CR>
map <F6>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
map <F6>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
map <F6>d :cs find d <C-R>=expand("<cword>")<CR><CR>
map cw :cw<cr> "配置打开位置列表快捷键
map <F6> :cw<cr> "配置打开位置列表快捷键
map <F3> :cp<cr> "跳转到前一个位置
map <F4> :cn<cr> "跳转到下一个位置