nvim 和 tmux 的配置

如何把 Tmux 和 nvim 的打造成随手的利器

如何把 Tmux 和 nvim 的打造成随手的利器

Tmux 和 vim 的配置

符号索引

gtags

  1. 下载最新版本 gtags

  2. 安装 ./configure && make && make install

  3. 安装 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

  1. 自动索引插件: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

  2. 数据库自动切换

    • 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扩展加载成功