Home » Misc » VIM 配置、插件及使用技巧
  • 06
  • 10月

VIM 配置、插件及使用技巧

本文主要介绍我自己的 VIM 配置文件(主要是 Python + Web开发)、常用插件以 及 VIM 使用技巧。

1   配置文件

注解

配置文件文件名( ~ 表示用户的家目录):

  • Linux : ~/.vimrc
  • Windows : ~/_vimrc

主要使用场景是 Python + Web 开发,配置文件经过一定时间的使用,还是可以习 惯了的:

" 正常模式关闭输入法,插入模式开启输入法
" LINUX下需要安装fcitx.vim插件
autocmd! InsertLeave * set imdisable
autocmd! InsertEnter * set noimdisable

" 50ms, 避免退出插入模式时会有较严重的延迟
set ttimeoutlen=50

" 不要使用vi的键盘模式,而是vim自己的
set nocompatible

" 启用 pathogen 插件
execute pathogen#infect()

" 保存文件时自动删除行末空格
autocmd BufWritePre * :%s/\s\+$//e

" 设置mutt写信文本宽度
autocmd BufRead mutt-* setlocal textwidth=76

" 设置git commit message文本宽度及英文拼写检查
autocmd Filetype gitcommit setlocal spell textwidth=72

set ai "设置自动缩进(autoindent)
set ts=4 "制表符宽度(tabstop)
set sw=4 "自动缩进宽度(shiftwidth)
set sts=4 "softtabstop宽度
"set et "使用空格替代制表符(expandtab)

if has("gui_running")
  if has("gui_win32")
    set columns=90
  endif
  set colorcolumn=81
endif

" 设置自动断行
set textwidth=79
set formatoptions+=mM "这个对中文比较友好

"设置代码折叠
set foldenable
set foldmethod=syntax "用语法高亮来定义折叠
set foldopen-=search
set foldopen-=undo

" 用空格键来开关折叠
set foldenable
"set foldmethod=manual
nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>

set number "显示行号
set nobackup "不要备份文件,根据需要设置
set fenc=utf-8 "设置默认文件编码
set fencs=utf-8,ucs-bom,utf-16,gb18030,gbk,gb2312,cp936 "自动检测文件编码

" 侦测文件类型
filetype on

" 载入文件类型插件
filetype plugin on

" 为特定文件类型载入相关缩进文件
filetype indent on

" 语法高亮
syntax on

" 高亮当前行
set cursorline

" 高亮当前列
set cursorcolumn

" 显示括号匹配 [], {}, ()
set showmatch

" 开启自动完成,按下C-X C-O就能唤出自动补全的窗口了
" HTML下输入</之后按C-X C-O可自动补全标签
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS

" 单独设置空格相关变量
autocmd FileType python setlocal sta tw=79 sw=4 ts=4 et sts=4 ai shiftround
autocmd FileType html,htmldjango setlocal et sta ts=2 sw=2 sts=2

"一旦一行的字符超出设定的宽度就把那些字符的背景设为某个颜色
highlight OverLength ctermbg=red ctermfg=white guibg=#dddddd
match OverLength /\%81v.\+/

" NERD_tree config
let NERDTreeChDirMode=2
let NERDTreeIgnore=['\.vim$', '\~$', '\.pyc$', '\.swp$']
let NERDTreeSortOrder=['^__\.py$', '\/$', '*', '\.swp$',  '\~$']
let NERDTreeShowBookmarks=1
map <F3> :NERDTreeToggle<CR>
map <leader>n :NERDTreeToggle<CR>

" TagList Plugin Configuration
" let Tlist_Ctags_Cmd='/usr/bin/ctags'
let Tlist_GainFocus_On_ToggleOpen = 1
" let Tlist_Close_On_Select = 1
let Tlist_Show_One_File = 1
let Tlist_Use_Right_Window = 1
let Tlist_File_Fold_Auto_Close = 1
map <F8> :TlistToggle<CR>

" Viewport Controls
" ie moving between split panes
map <silent>,h <C-w>h
map <silent>,j <C-w>j
map <silent>,k <C-w>k
map <silent>,l <C-w>l

" Syntastic Settings
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*

let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0

let g:syntastic_python_checkers = ['flake8']

2   常用插件

目前用到的第三方插件比较少,用到的主要是 NERDTree 这个文件管理器插件以及 TagList 插件。

注解

插件放置路径( ~ 表示用户的家目录):

  • Linux : ~/.vim/
  • Windows : ~/vimfiles/

2.1   pathogen插件管理器

插件主页: https://github.com/tpope/vim-pathogen

具体安装步骤查看项目主页.

2.2   NERDTree 文件管理器插件

插件主页: http://www.vim.org/scripts/script.php?script_id=1658

GITHUB主页: https://github.com/scrooloose/nerdtree

根据上面配置文件的设置,按 F3 打开/关闭 NERDTree 。

NERDTree提供了丰富的键盘操作方式来浏览和打开文件,我简单介绍一些常用的快捷键:

移动 和编辑文件一样,通过h j k l移动光标定位
o 打开关闭文件或者目录,如果是文件的话,光标出现在打开的文件中
go 效果同上,不过光标保持在文件目录里,类似预览文件内容的功能
i 和 s 可以水平分割或纵向分割窗口打开文件,前面加 g 类似 go 的功能
t 在标签页中打开
T 在后台标签页中打开
p 到上层目录
P 到根目录
K 到同目录第一个节点
J 到同目录最后一个节点
m 显示文件系统菜单(添加、删除、移动操作)
? 帮助
q 关闭

2.3   TagList(TagBar) 插件

注解

推荐使用 TagBar, 是 TagList 的 升级版本.

主页: https://github.com/majutsushi/tagbar

TagList 插件,是一款基于 ctags ,在 vim 代码窗口旁以分割窗口形式显示当前的 代码结构概览,增加代码浏览的便利程度的 vim 插件。

插件主页: http://www.vim.org/scripts/script.php?script_id=273

要使用 taglist plugin ,必须满足:

  • 打开vim的文件类型自动检测功能: filetype on
  • 系统中装了 Exuberant ctags 工具,并且 taglist plugin 能够找到此工具( 因为 taglist 需要调用它来生成 tag 文件)
  • 你的 vim 支持 system() 调用

根据上面配置文件的设置,按 F7 打开/关闭 TagList 。

在 taglist 窗口中,可以使用下面的快捷键:

<CR> 跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样
o 在一个新打开的窗口中显示光标下tag
<Space> 显示光标下tag的原型定义
u 更新taglist窗口中的tag
s 更改排序方式,在按名字排序和按出现顺序排序间切换
x taglist窗口放大和缩小,方便查看较长的tag
+ 打开一个折叠,同zo
- 将tag折叠起来,同zc
* 打开所有的折叠,同zR
= 将所有tag折叠起来,同zM
[[ 跳到前一个文件
]] 跳到后一个文件
q 关闭taglist窗口
<F1> 显示帮助

2.4   Syntastic

Syntastic 是一个语法检查插件, 支持绝大多数主流语言的检查. Syntastic 本身不提供检查功能, 而是借助第三方工具来执行检查工作.

插件主页: https://github.com/scrooloose/syntastic

若使用这个插件的话, 则 Vim-Flake8 可以移除, 因为这两个插件这部分功能相同, 有可能造成不必要的冲突, 当然, Flake8 还是要安装的.

在系统层面安装 Flake8:

easy_install Flake8
# or
pip install Flake8

Flake8 配置文件示例:

[flake8]
ignore = E501,E203,E226,E302,E41
exclude = tests/*,mydeps/*,docs/*,migrations/*

注解

Flake8 配置文件路径:

  • Linux: ~/.config/flake8
  • Windows: ~/.flake8

技巧

pep8-naming 是命名检查插件.

Web 前端开发使用的插件:

  • JavaScript - jshint(基于 node.js)
  • html - jshint, tidy(需要编译)
  • css - PrettyCSS, csslint

额外的 Vim 配置:

let g:syntastic_html_checkers = ['tidy', 'jshint']
let g:syntastic_javascript_checkers = ['jshint']
let g:syntastic_css_checkers = ['prettycss']

jshint 安装:

npm install -g jshint

PrettyCSS 安装:

npm install -g PrettyCSS

Tidy 项目主页: https://github.com/htacg/tidy-html5

2.5   indent/python.vim

Python 自动缩进插件.

插件主页:

这个插件只有一个 python.vim 文件, 下载之后放到插件路径 plugin 目录即可.

2.6   vim-powerline

项目主页: https://github.com/Lokaltog/vim-powerline

使用之前需要先安装 powerline-status:

pip install powerline-status

2.7   vim-fugitive

这是一个 Git 插件.

项目主页: https://github.com/tpope/vim-fugitive

2.10   vim-javascript

项目主页: https://github.com/pangloss/vim-javascript

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

2.11   vim-jsbeautify

vim-jsbeautify 是 jsbeautifier 的 VIM 插件, jsbeautifier 是基于 nodejs 的 JavaScript, HTML, CSS 格式化工具. 使用这个插件需要安装 nodejs.

插件主页: https://github.com/maksimr/vim-jsbeautify

通过 pathogen 安装:

cd ~/.vim/bundle
git clone https://github.com/maksimr/vim-jsbeautify.git
cd vim-jsbeautify && git submodule update --init --recursive

2.12   ack.vim

Vim 中可以使用 grep 搜索代码,但使用起来比较麻烦, 所以就出现了 Ack, Ag 这样的程序。大大降低了代码搜索的难度。

Ack 是 Perl 编写的一个程序,用于代码搜索。 但是 Windows 平台下安装会比较麻烦。 而且在 Git Bash 中无法使用(可能是没配置好)。

Ack 的一些非常强大的特性:

  • 默认搜索当前工作目录
  • 默认递归搜索子目录
  • 忽略元数据目录,比如 .svn, .git, CSV 等目录
  • 忽略二进制文件(比如 pdf, image, coredumps ) 和备份文件(比如 foo~, *.swp 等)
  • 在搜索结果中打印行号,有助于找到目标代码
  • 能搜索特定文件类型(比如 Perl, C++, Makefile ), 该文件类型可以有多种文件后缀
  • 高亮搜索结果
  • 支持 Perl 的高级正则表达式,比 grep 所使用 GNU 正则表达式更有表现力。

相比于搜索速度, ack 总体上比 grep 更快。 ack 的速度只要表现在它的内置的文件类型过滤器。 在搜索过程中, ack 维持着认可的文件类型的列表,同时跳过未知或不必要的文件类型。 它同样避免检查多余的元数据目录。

Ag (The Silver Searcher) 是类似 Ack 的代码搜索工具,但是比 Ack 更快, 默认会忽略 .gitignore, .hgignore 匹配的文件。 Windows 下有独立程序文件,方便使用。

注解

ag (0.29) 命令在 Windows 下的表现和 Linux 略有差异:

ag --python -w User

--python 放到后面,则会被误以为是指定的路径。

ack.vim 是 Ack 的 Vim 插件,而且也可以指定搜索程序为 ag

插件主页: https://github.com/mileszs/ack.vim

若要使用 ag 为搜索程序, Vim 只需要增加下面的几行配置即可:

if executable('ag')
    let g:ackprg = 'ag --vimgrep'
endif

3   使用技巧

3.1   刪除空白行

刪除沒有內容的空行:

g/^$/d

刪除包含有空格組成的空行:

g/^\s*$/d

除以空格或tab開頭到結尾的空行:

g/^[ |\t]*$/d

3.2   配对标点操作技巧

这称得上是一个 Vim 的杀手级 Tip,利用该 Tip,你可以快速处理 '"()[]{}<> 等配对标点符号中的文本内容 ,包括更改、删除、复制等。

ci'、ci"、ci(、ci[、ci{、ci< - 分别更改这些配对标点符号中的文本内容
di'、di"、di(、di[、di{、di< - 分别删除这些配对标点符号中的文本内容
yi'、yi"、yi(、yi[、yi{、yi< - 分别复制这些配对标点符号中的文本内容

PS: 把 i 改成 a 的话,会连配对标点一起操作……

对于经常用Vim写代码的朋友来说,善用此Tip将极大的提高编码效率。

3.3   CSS 属性排序

使用下面这个命令可以对 CSS 属性进行重新排序:

:g/{/ .+1,/}/-1 sort

警告

  1. 各个属性单独一行, 花括号开闭不能在同一行
  2. 样式不能为空, 若有空样式, 可以在内部增加一行注释

3.4   Windows gVim 在新标签中打开文件

写一个注册表文件,内容如下:

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\Shell\Edit with Vim in NewTab]
@="Edit with &Vim in NewTab"
[HKEY_CLASSES_ROOT\*\Shell\Edit with Vim in NewTab\command]
@="\"C:\\Program Files\\Vim\\vim73\\gvim.exe\" -p --remote-tab-silent \"%1\" \"%*\""

以上内容存在一个文件为 gvim.reg 的文件,“双击”运行就可以。右键菜单会 多出一个选项“Edit with Vim in NewTab”,打开的文件共用一个 VIM 实际,而不 会打开多个 VIM 窗口。

注意 VIM 默认路径为: C:\Program Files\vim ,请根据实际情况修改。

而若是“双击”打开方式,则可以修改注册表 HKEY_CLASSES_ROOT\Applications\gvim.exe\shell\open\command 将其键值 修改为:

"C:\Program Files\Vim\vim73\gvim.exe" -p --remote-tab-silent "%1"
Tags:   vim .