7. VIM 系列 - 程序员利器(语法检测、代码块补全、symbol管理、函数跳转)

目录

1. 语法检查利器 ale

安装 ale

Plug \'w0rp/ale\'

配置

  • 显示状态栏+不需要高亮行
let g:ale_sign_column_always = 1
let g:ale_set_highlights = 0
  • 错误和警告标志
let g:ale_sign_error = \'x\'
let g:ale_sign_warning = \'!\'
  • 文件保存时,显示警告
let g:ale_lint_on_text_changed = \'never\'
let g:ale_lint_on_enter = 0
  • 使用clang对c和c++进行语法检查,对python使用pylint进行语法检查
let g:ale_linters = {
\\   \'c++\': [\'clang\'],
\\   \'c\': [\'clang\'],
\\   \'python\': [\'pylint\'],
\\}

使用clang分析的话,确保clang已经安装, 如若没有安装,即可运行如下命令进行安装

sudo apt-get install clang
  • 效果图

2. 补全代码块

  • 安装
Plug \'SirVer/ultisnips\'
Plug \'honza/vim-snippets\'
  • 配置
let g:UltiSnipsExpandTrigger=\"<tab>\"
let g:UltiSnipsJumpForwardTrigger=\"<c-h>\"
let g:UltiSnipsJumpBackwardTrigger=\"<c-l>\"

使用vim打开文件,输入main,然后敲 tab,会有如下效果

:插件有默认的代码块模板,若是需要自定义,则去~/.vim/plugged/vim-snippets 路径下修改。

3. symbol 管理器 taglist.vim

taglist.vim 插件依赖ctags,所有首先得安装ctags。

安装ctags

$ sudo apt install -y exuberant-ctags

在.vimrc上配置

set tags=./.tags;,.tags

安装taglist.vim插件

Plug \'vim-scripts/taglist.vim\'

插件配置

map <silent> <F10> :TlistToggle<cr>

效果图

normal模式下按下<F10>
出现如下效果

自动更新symbol

使用vim-gutentags 自动更新tags文件。

安装vim-gutentags插件

Plug \'ludovicchabant/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

:gutentags 需要靠上面定义的 project_root 里的标志,判断文件所在的工程,如果一个文件没有托管在 .git/.svn 中,gutentags 找不到工程目录的话,就不会为该野文件生成 tags,这也很合理。想要避免的话,你可以在你的野文件目录中放一个名字为 .root 的空白文件,主动告诉 gutentags 这里就是工程目录。

更新symbol

function! UpdateCtags()
    TlistUpdate
endfunction

autocmd BufWritePost *.c,*.h,*.cpp call UpdateCtags()

保存文件时候,更新symbol。

4. 函数跳转

函数跳转也是用到了tags文件,symbol管理已经将相关环境安装好了。

<c-]>:跳转到定义处。

<c-t>:往回跳转

<c-w>]:新建一个窗口,并显示定义。

<c-w>c:关闭窗口

人已赞赏
随笔日记

[开发技巧]·Numpy广播机制的深入理解与应用

2020-11-9 4:31:06

随笔日记

聊一聊快速排序(Js)

2020-11-9 4:31:08

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索