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:关闭窗口
7. VIM 系列 - 程序员利器(语法检测、代码块补全、symbol管理、函数跳转)的更多相关文章
- vim与程序员 vi/vim 的使用
vim与程序员 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主动的以 ...
- 运维 06 vim与程序员
vim与程序员 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主动的以 ...
- Mac OS X 程序员利器 – Homebrew安装与使用
Mac OS X 程序员利器 – Homebrew安装与使用 Homebrew安装与使用 什么是Homebrew? Homebrew is the easiest and most flexible ...
- 混合开发的大趋势之 一个Android程序员眼中的 React.js 块级作用域 和 let
转载请注明出处:王亟亟的大牛之路 最近都有事干然后,快到月底了这个月给CSDN的博文也就两篇,想想也蛮多天没更了,那就来一篇. 老规矩,先安利:https://github.com/ddwhan012 ...
- 程序员的职业方向: 是-->技术?还是-->管理?
岁之后还能不能再做程序员....... 绝大多数程序员最终的职业目标可能都是CTO,但能做到CEO的人估计会比较少,也有一少部分人自己去创业去当老板,也有部分人转行了,当老板的人毕竟是少数,转行的人都 ...
- xcode4 语法高亮和自动补全失效的解决办法
xcode4 语法高亮和自动补全失效的解决办法xcode4有一个bug,某些时候会造成类名的着色显示不出来,还有就是代码补全不能完全显示,而且没有参数. 解决方法: 首先关闭项目窗口,然后到Organ ...
- linux下vim python代码自动补全
一.vim python自动补全插件:pydiction 可以实现下面python代码的自动补全: 1.简单python关键词补全 2.python 函数补全带括号 3.python 模块补全 4.p ...
- vim配置-程序员【转】
Ubuntu11.10的vim升级后,版本为vi Improved 7.3.154功能很强大了.不过,程序员要根据自己的习惯配置好vimrc文件,是vim更加得心应手. 注:一般用户在自己的当前目录下 ...
- vim与程序员
所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正 ...
随机推荐
- HTML5 CSS3 诱人的实例: 3D立方体旋转动画
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/34120047 创意来自:http://www.html5tricks.com/d ...
- Netty 学习 一、初识Netty【原创】
在过去几年的工作和学习中,比较关注高层次的应用开发,对底层探究较少.实现Web应用的开发,主要依赖Tomcat.Apache等应用服务器,程序员无需了解底层协议,但同样限制了应用的性能和效率.现在开始 ...
- Python集合set
集合 set 集合是无序的 集合的值是唯一的 求两个集合的关系: list1 = [1,4,5,7,3,6,7,9] list2 = set([2,6,0,66,22,8,4]) list3 = se ...
- Java通过JDBC 进行MySQL数据库操作
转自: http://blog.csdn.net/tobetheender/article/details/52772157 Java通过JDBC 进行MySQL数据库操作 原创 2016年10月10 ...
- python生产环境部署
Python部署web开发程序的几种方法 fastcgi ,通过flup模块来支持,在nginx里对应的配置指令是 fastcgi_pass http,nginx使用proxy_pass转发,这个要求 ...
- engine.go
package ;;;;;;;;) ;;;;;) ) ) ) ;; ;;, types.DocumentIndexData{}, true) for { runtime.Gos ...
- in_flight_pqueue.go
// right child } if (*pq)[j].pri >= (*pq)[i].pri { break } ...
- Spring Boot之WebSocket
一.项目说明 1.项目地址:https://github.com/hqzmss/test01-springboot-websocket.git 2.IDE:IntelliJ IDEA 2018.1.1 ...
- Android Gradle基于参数化配置实现差异化构建
一.背景: 项目中有一些特殊的需求,如个别渠道集成腾讯bugly,个别渠道集成易观统计,不同的渠道集成不同的推送策略(如Oppo渠道优先Opush推送),不同的渠道拥有不同的第三方登录集成等等.这些需 ...
- 8000个JQuery特效(插件)
各式各样的JQuery场景实现,可供项目使用,请注意插件版本和浏览器适配 下面是下载地址