Vim插件简单介绍

Posted 51reboot运维开发

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vim插件简单介绍相关的知识,希望对你有一定的参考价值。


不 断 前 行,方 可 不 被 淘 汰


syantastic


syantastic是一款强大的语法检查插件,支持很多语言的语法与编码风格检查,每次保存文件都会引起这个插件的查错操作。实际上这个插件只是个接口,背后的语法检查是交给各个语言自己的检查器,例如javascript使用jshint,python使用flake8等。

可以在syntax_checkers/language文件中查看syntastic需要的外界语法检查器

➜  ~  ls .vim/bundle/syntastic/syntax_checkers c               docbk           java            objcpp          scala           xhtml css             go              lua             python          text            zsh cuda            haskell         nasm            ruby            typescript ➜  ~  ls .vim/bundle/syntastic/syntax_checkers/python flake8.vim   pep8.vim     py3kwarn.vim pyflakes.vim pylint.vim   python.vim

外界的语法检测器必须在$PATH中,也可以使用软链接。

syntastic特性:

  1. 错误信息被载入location-list,需要:Error命令

  2. 当光标处于有错误的行时,在命令窗口显示错误信息

  3. 在有错误或警告的行显示 signs

  4. 可以在状态栏显示错误信息

  5. 当鼠标放置于有错误的行时,在气泡中显示错误信息

  6. 用语法高亮显示具体出错部分。

如图所示:

Vim插件简单介绍(二)



VimWiki

维基语法的作用有三点:

  1. 使条目更规范,通过一定转换,wiki 能输出为拥有约定俗成格式的HTML;

  2. 节约编辑时间,不用写出完整的HTML标签,也不用在可视化编辑器中点来点去;

  3. 充分的可读性,使用维基语法书写的文档,即使未被转为HTML,内容的语义也是一目了然,甚至表格也能清晰地阅读。

VimWiki官方称之a personal wiki for Vim,一个基于Vim的Wiki 系统,是一个非常不错的用于个人知识管理的利器,并且还支持输出到网页。

在Vim的Normal模式下,键入ww三个键,Vim就会打开wiki首页(index.wiki)。输入模式,在单词上面Enter既可以把此单词变为wiki词条,然后在Normal模式Enter wiki词条,既可以进入相应的词条页面进行编辑。

编辑完词条之后进行保存,然后wh(:Vimwiki2HTML)将当前wiki页转换成Html格式,whh转换为html格式然后打开页面。vimwiki转换html时支持模板文件,配合强大的模板文件,可以自己创建css,或者是实现语法高亮,vimwiki还支持MathJax数学公式编辑。

在vimwiki中使用以下占位符,能对生成的HTML文件做一些特殊的处理。

  1. %toc 自动生成的目录

  2. %title 指定HTML文档的title,建议放到文档最末尾。如果不指定,title 就是文件名

  3. %nohtml 告诉 vimwiki 不为某条目生成HTML文件。即使你在该条目打开时为它单独执行 :Vimwiki2HTML ,也不会生成。

vimwiki 有一个g:vimwiki_valid_html_tags值,可以指定允许写在 wiki 中的HTML标签。

Vimwiki的优点:

  1. 与Vim紧密结合,可使用Vim的内建的正则表达式规则,高效处理文本

  2. 与Vim紧密结合,可利用Vim内建的多种命令,以及可显示多个分页的特性,同时展示多种窗口,快速查看多份资料.

  3. 由于Vim是文本处理工具,所以任何笔记,只要存为文本数据,便可以用Vim来组织和整理

  4. 内置了特别的语法高亮模式,在观感上与普通见到的wiki没有多大的分别.

但是vimwiki的语法是自创的,和广泛使用的轻量级标记语言markdown等不兼容,因此可移植性比较差。


Zen Coding

vim 插件zencoding-vim支持类似的缩写。Zen Coding是一个高效编写HTML, XML, XSL的编辑器插件,支持许多编辑器。

如下内容:

test1
test2
test3

V 进入 Vim 可视模式,“行选取”上面三行内容,然后按键 <c-y>,,这时Vim的命令行会提示Tags:,键入ul>li*,然后Enter。

<ul>    <li>test1</li>    <li>test2</li>    <li>test3</li>
</ul>

zencoding 支持的简写规则,类似于CSS选择器(大写的E代表一个HTML标签):

  1. E 代表HTML标签。

  2. E#id 代表id属性。

  3. E.class 代表class属性。

  4. E[attr=foo] 代表某一个特定属性。

  5. E{foo} 代表标签包含的内容是foo。

  6. E>N 代表N是E的子元素。

  7. E+N 代表N是E的同级元素。

  8. E^N 代表N是E的上级元素。

还提供了连写(E*N)和自动编号(E$*N)功能。div[src=span$]#item$.class$$*3展开后为:

<div id="item1" class="class01" src="span1"></div> <div id="item2" class="class02" src="span2"></div> <div id="item3" class="class03" src="span3"></div>

另外还有许多强大的功能,如下:

查看帮助文档: help zencoding

Tagbar

首先来了解下,ctags为文件中的各种语言对象生成一个索引文件(或称为标签文件,tags)。标签文件允许这些项目能够被一个文本编辑器或其它工具简捷迅速的定位。一个“标签”是指一个语言对象,它对应着一个有效的索引项 (这个索引项为这个对象而创建)。

ctags 能够为多种程序语言文件的语言对象信息生成可读格式的交叉索引列表,并且支持用户用正则表达式自定义语言对象。

对于C/C++,其生成的标记文件tags中包括这些对象的列表:

  • 用#define定义的宏

  • 枚举型变量的值

  • 函数的定义、原型和声明

  • 名字空间(namespace)

  • 类型定义(typedefs)

  • 变量(包括定义和声明)

  • 类(class)、结构(struct)、枚举类型(enum)和联合(union)

  • 类、结构和联合中成员变量或函数

要生成tags十分简单:

  1. c: ctags –R src

  2. c++:ctags -R --c++-kinds=+p --fields=+iaS --extra=+q src

    • --c++-kinds=+p : 为C++文件增加函数原型的标签

    • --fields=+iaS : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S)

    • --extra=+q : 为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全

    • -R : 递归生成src中所有源文件的tags文件

使用tags文件也很简单,把光标移动到某个元素上,CTRL+]就会跳转到对应的定义,CTRL+o可以回退到原来的地方。如果当前光标下是个局部变量,gd跳到这个局部变量的定义处。

tags必须在vim运行的当前目录,才能在vim里面正确跳转,不过也可以使用set tags="/path/tags"即可。

而vim下的TagBar插件(Taglist的升级版)则是为了方便浏览源文件的标签,TagBar提供了一个侧边栏列出了当前文件所有的标签。如下图:

Vim插件简单介绍(二)

注意:mac自带的ctags程序不是exuberant ctags, 所以使用时会出现问题,可以用homebrew重新安装ctags,然后做一个软链接即可,具体如下:

$ brew install ctags $ cd /usr/local/Cellar/ctags/5.8/bin
$ ./ctags --version
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert  Compiled: Jun 14 2013, 11:41:43  Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net  Optional compiled features: +wildcards, +regex $ cd /usr/bin
$ sudo ln -s /usr/local/Cellar/ctags/5.8/bin/ctags ./ctags

其他插件

vim-javascript 

vim 自带的 javascript 缩进简直没法使用,同时还有 html 里的 javascript 缩进也是一塌糊涂。而强大的插件vim-javascript则解决了上面的问题。

pydoc 

pydoc将python帮助文档集成到vim中,可以方便地一边写程序一边浏览帮助文档,如下图:

Vim插件简单介绍(二)

vim-flake8 

vim的默认配置对python的支持有限,要在编写代码时及时得到变量拼写错误等提示,可安装。 Python 社区著名的,是官方的python代码规范,如果想编写严格遵循PEP 8的代码,可使用pep8。为了方便,有人将两个插件整合到一起,打造出flake8,该工具可通过插件vim-flake8与vim整合。

pep8、flake8的安装很简单:

$ sudo pip install pep8 $ sudo pip install pyflakes $ sudo pip install flake8

不过由于syntastic的存在,没有多大必要使用vim-flake8了。

SingleCompile 

有时候想编译运行一个简单的源文件,这种情况退出vim在编译运行无疑显得麻烦,而SingleCompile很好地解决了这个问题。SingleCompile有以下特点:

  1. 编译运行源文件时用到了vim的quickfix feature和

  2. 自动选择使用编译器或者解释器;

  3. 支持多种语言;

  4. 可以自定义编译/解释的模板;

可以设置以下键映射:

nmap <F7> :SCCompile<cr>
nmap <F5> :SCCompileRun<cr>

TagHighlight 

给类/结构体/枚举等数据类型添加语法高亮显示, 使 vim 在显示效果上可与 Visual Studio 相媲美。 成功安装该插件后, 打开项目文件, 执行如下命令即可显示高亮效果: :UpdateTypesFile

TagHighlight支持许多种语言:C、C++、Java等。

Powerline 

Powerline插件美化vim状态栏的显示。我的配置如下:

set laststatus=2     " Always show the statusline set t_Co=256         " Explicitly tell Vim that the terminal support 256 colors
let g:Powerline_symbols = 'unicode'

效果图如下:

Vim插件简单介绍(二)

禁用插件


可以列出当前加载的所有插件:

:scriptnames //list all plugins

启动vim时可以禁用所有插件:

--noplugin Skip loading plugins. Implied by -u NONE.

也可以禁用指定的某些插件。如果是使用pathogen管理插件,则有两种方法:

  1. 修改.vim/bundle中插件目录名字,比如要禁用插件syntastic,可以通过下面命令:

   ➜  ~  mv .vim/bundle/syntastic .vim/bundle/syntastic~

2.  使用g:pathogen_disabled变量,可以将插件名添加到该变量:


   " To disable a plugin, add it's bundle name to the following list   let g:pathogen_disabled = ['syntastic']   if v:version < '703584'       call add(g:pathogen_disabled, 'YouCompleteMe')   endif   execute pathogen#infect()

上面命令将禁用syntastic插件,并且当vim版本号低于7.3.584时,禁用YouCompleteMe插件。

Vim插件简单介绍(二)

课程信息

12期 Python实战班 将于11月26日开班,现在开始报名啦

课程不断升级,更加贴近实战!

课程大纲:  (查看原文)

咨询QQ:  Ada  279312229      小夏   979950755



戳原文,更有料!

以上是关于Vim插件简单介绍的主要内容,如果未能解决你的问题,请参考以下文章

从零开始配置vim(27)——代码片段

VIM 代码片段插件 ultisnips 使用教程

vim代码片段插件ultisnips的使用

我是这样用vim写代码的--插件篇

Vim插件简单介绍

Vim中的“有用”的插件介绍