一、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. 下载地址

http://cscope.sourceforge.net

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>        "跳转到下一个位置
最后修改:2023 年 01 月 26 日
如果觉得我的文章对你有用,请随意赞赏