如何把 Tmux 和 nvim 的打造成随手的利器
Tmux 和 vim 的配置
符号索引
gtags
-
下载最新版本 gtags
-
安装
./configure && make && make install
-
安装 pygments 支持 c/c++/Java 以外的更多语言
-
gtags 使用 pygments 来作为分析前端支持 50+ 种语言
-
使用
ctags/universal-ctags
作为前端只能生成定义索引不能生成引用索引,因此我们要安装 pygments ,保证你的 $PATH 里面有 python -
pip install pygments
-
设置 Vim 里的两个环境变量
let $GTAGSLABEL = 'native-pygments' let $GTAGSCONF = '/usr/local/share/gtags/gtags.conf'
- 第一个 GTAGSLABEL 告诉 gtags 默认 C/C++/Java 等六种原生支持的代码直接使用 gtags 本地分析器,而其他语言使用 pygments 模块。
- 第二个环境变量必须设置,否则会找不到 native-pygments 和 language map 的定义, Windows 下面在
gtags/share/gtags/gtags.conf
,Linux 下要到/usr/local/share/gtags
里找,也可以把它拷贝成~/.globalrc
,Vim 配置的时候方便点。 - 实际使用 pygments 时,gtags 会启动 python 运行名为 pygments_parser.py 的脚本,通过管道和它通信,完成源代码分析,故需保证 gtags 能在 $PATH 里调用 python,且这个 python 安装了 pygments 模块。
-
自动索引 gutentags
-
自动索引插件:
vim-gutentags
-
Gtags 它有两个非常不好用的地方:
- 代码修改了需要自己手动去运行 gtags ,更新符号索引
- 会在代码目录下生成:GTAGS,GRTAGS,GPATH 三个文件,污染项目目录
-
用
vim-gutentags
插件可以自动生成索引,并且把索引文件放到指定的目录下-
在
~/.config/nvim/init.vim
中添加Plug 'ludovicchabant/vim-gutentags'
-
执行
:PlugInstall
安装插件 -
配置
vim-gutentags
" gutentags 搜索工程目录的标志,碰到这些文件/目录名就停止向上一级目录递归 let g:gutentags_project_root = ['.root', '.svn', '.git', '.hg', '.project'] " 所生成的数据文件的名称 let g:gutentags_ctags_tagfile = '.tags' " 将自动生成的 tags 文件全部放入 ~/.cache/tags 目录中,避免污染工程目录 let s:vim_tags = expand('~/.cache/tags') let g:gutentags_cache_dir = s:vim_tags " 配置 ctags 的参数 let g:gutentags_ctags_extra_args = ['--fields=+niazS', '--extra=+q'] let g:gutentags_ctags_extra_args += ['--c++-kinds=+px'] let g:gutentags_ctags_extra_args += ['--c-kinds=+px'] " 检测 ~/.cache/tags 不存在就新建 if !isdirectory(s:vim_tags) silent! call mkdir(s:vim_tags, 'p') endif
-
-
通过上面的配置,可以在后台自动打理 ctags 和 gtags 数据库,检测文件改动,并更新到
~/.cache/tags
目录中,避免污染你的项目目录。 -
上面定义了项目标志文件(
.git, .svn, .root, .project, .hg
),gutentags 需要确定当前文件所属的项目目录,会从当前文件所在目录开始向父目录递归,直到找到这些标志文件。如果没有,则 gutentags 认为该文件是个野文件,不会帮它生成 ctags/gtags 数据,所以如果你的项目不在 svn/git/hg 仓库中的话,可以在项目根目录 touch 一个空的名为 .root 的文件即可。 -
在
init.vim
中加入set csprg=/usr/local/bin/gtags-cscope
,让 cscopeprg 指向 gtags-cscope,以便像cscope一样的使用 gtags
-
-
数据库自动切换
-
gutentags 可以为我们自动 cs add 命令添加当前更新好的 gtags 数据库到 vim ,但同时编辑两个以上的项目时,gutentags 会把两个数据库都连接到 vim 里,于是你搜索一个符号,两个项目的结果都会同时出现,基本没法用了。
-
安装 gutentags_plus.vim 插件并配置
Plug 'ludovicchabant/vim-gutentags' Plug 'skywind3000/gutentags_plus' " enable gtags module let g:gutentags_modules = ['ctags', 'gtags_cscope'] " config project root markers. let g:gutentags_project_root = ['.root'] " generate datebases in my cache directory, prevent gtags files polluting my project let g:gutentags_cache_dir = expand('~/.cache/tags') " change focus to quickfix window after search (optional). let g:gutentags_plus_switch = 1
-
快捷键
快捷键 说明 <leader>cs
查找光标下的符号(引用) <leader>cg
查找光标下的符号定义 <leader>cd
查找被该函数调用的函数 <leader>cc
调用此函数的函数 <leader>ct
找到光标下的文本字符串 <leader>ce
用egrep查找光标下的字符 <leader>cf
查找光标下文件名所在的完整路径 <leader>ci
查找包含光标下文件名的文件 <leader>ca
查找当前光标下变量所在的位置 <leader>cz
在ctags数据库中查找当前单词
-
highlight.disableLanguages, list of filetypes to ignore for this extension.
模糊搜索 LeaderF
-
安装
Plug 'Yggdroot/LeaderF', { 'do': './install.sh' }
-
验证
:echo g:Lf_fuzzyEngine_C # 返回1意味着C扩展加载成功