Vim 4 经常使用插件

Vim 系列教程目录:php

Vim 插件网站

Vim 之因此强大, 有个很大的缘由就是他有丰富的插件. 插件能够极大地加强 Vim 的功能. 那么去哪里下载插件呢? 插件怎么安装和管理呢, 听我慢慢道来.python

先说到哪里去找插件, 这里列出两个网站:git

  • 官方插件网址 界面丑, 速度慢, 有时候还打不开, 不建议使用...
  • VimAwesome 比较推荐的一个插件网站, 好看好用, 每一个插件都有介绍, 还有安装方式说明, 以及每一个插件官网的连接.

在这些网站上找到合适的插件后, 就能够进行安装了.github

插件管理: vim-plug

Vim 自己就提供了安装和管理插件的方式, 可是不太方便, 我就很少说了. 如今比较流行的方式有两种: vim-plug 和 Vundle, 这两款插件都是用于"安装和管理别的插件"的插件.编程

我最近在用的是 vim-plug, 下面介绍一下它的用法.vim

安装 vim-plug

安装方式很简单, 下载 plug.vim, 放在 $VIM/vim81/autoload/ 目录中, 就算是完成安装了. 注意: 这里说是下载安装, 其实就是把该插件的源代码保存到名为 plug.vim 的文件, 而后放在对应的目录里就能够了. 官方还提供了使用命令的方式下载安装, 但其实还不如手动下载来得方便.bash

在 vimrc 中配置

安装好 vim-plug 后, 须要在 vimrc 中进行启用配置和插件配置, 方式以下:编程语言

" 以 call plug#begin 开始, 这句命令后面的小括号里用于指定 其余插件的安装目录, 注意不要使用 'plugin' 这种默认名称, 像我这样的写法就行 call plug#begin('$VIM/vimfiles/vim-plug') " 配置插件, 方式有三种: 
" 1. 插件的短别名(即 Github 中的 用户名/仓库名), 2. 插件的 Github 仓库地址, 3. 本地路径 Plug 'altercation/vim-colors-solarized' Plug 'nlknguyen/papercolor-theme' Plug 'scrooloose/nerdtree' " 以 call plug#end() 结束
call plug#end()
复制代码

上面就是在 vimrc 中启用 vim-plug, 以及配置其余插件的方式. 简单来说, 按照 VimAwesome 上给出的插件名写就行, 很简单.编辑器

插件的安装, 移除, 升级

在 vimrc 中配置好插件以后, 须要使用 vim-plug 的命令进行安装, vim-plug 提供了以下命令, 你能够在命令模式下使用这些命令:oop

  • :PlugInstall 安装全部插件. 注意: 要安装插件, 须要先在 vimrc 中配置插件名称, 而后执行这个安装命令
  • :PlugClean 移除无用插件. 要移除插件, 须要先在 vimrc 中把要移除的插件名称删掉, 而后执行这个移除命令
  • :PlugUpdate 升级全部插件
  • :PlugUpgrade 升级 vim-plug 自己
  • :PlugStatus 查看插件状态

OK, vim-plug 的使用就是这么简单. 具体更加细节的配置能够参考官方文档, 这里再也不赘述.

关于插件依赖的 Python

有些插件须要依赖 Python (好比 UltiSnip), 若是你装了这样的插件, 可是你的 Vim 却不支持 Python, 启动时就会报错(你能够继续使用 Vim, 可是看到报错会很烦).

关于 Python 依赖, 有这么几点须要确认:

  1. 确认 Vim 自己支持调用 Python. 经过 :version 命令, 能够看到 Vim 的版本信息以及支持的特性信息, 若是你能看到以下信息, 则说明 Vim 支持调用 Python:
+python/dyn
+python3/dyn
复制代码
  1. 确认 Vim 支持的 Python 版本, 一样使用 version 命令查看, 在此命令输出的最下面能够看到以下信息:
-DDYNAMIC_PYTHON_DLL=\"python27.dll\" -DDYNAMIC_PYTHON3_DLL=\"python36.dll\" 复制代码

这说明 Vim 支持 Python 2.7 和 Python 3.6 3. 32位的 Vim 只能调用 32 位的 Python, 同理, 64位的 Vim 只能调用 64位的 Python, 要查看 Vim 的版本, 仍是使用 version 命令. 4. 系统中须要安装了对应的 Python 版本. 5. 在命令模式下验证是否真的没问题. 例如 Vim 支持 Python3, 则在命令模式经过 :py3 1 这个命令查看是否真的能够. py3 是 Vim 调用 Python 时使用的命令, 后面的 1 是此命令的参数(能够是任意参数), 若是不报错, 则说明系统中有对应的 Python 版本.

我所使用的 Vim8.1 是 32 位版本, 我以前电脑里装了64位的 3.7, 结果报错, 改成 32 位的 3.6 就没问题了.

主题

主题的话, 这里推荐两款我比较喜欢的主题:

其中 PagerColor 是亮色主题, Dracula 是暗色主题.

PaperColor 有个很好的地方: 同时支持亮色和暗色模式. 可在 vimrc 中作以下配置:

Plug 'nlknguyen/papercolor-theme'
" 启用亮色主题 set background=light colorscheme PaperColor " 启用暗色主题
" set background=dark " colorscheme PaperColor
复制代码

Dracula 是我比较喜欢的一款深色主题, 在 vimrc 中配置的时候要注意:

" 后面的配置表示把 dracula 主题放在 dracula 目录下 Plug 'dracula/vim', { 'as': 'dracula' } " 启用主题
colorscheme dracula
复制代码

启用主题以后, 你会发现 Vim 变得漂亮多了, 果真人靠衣装.

下面我再介绍一些基本的, 通用的插件.

The NERD tree

目录树插件, 上古神器, 这么多年来一直还在更新, 不容易. 安装就不说了, 本身参照 Awesome 上的名字进行配置便可. 帮助文档: help NERDTree

经常使用命令

命令 含义 备注
:NERDTree [dir/bookmark] 打开 NERDTree 后面能够跟目录/书签做为参数
:NERDTreeToggle 打开/关闭 NERDTree
:NERDTreeMirror 将当前的 NERDTree 共享到另外一个 NERDTree, 两者是同一个 buffer, 互相同步 首先得有另外一个 NERDTree
:Bookmark [name] 将当前节点保存为书签, 能够指定名称 必须在 NERDTree 中才可使用
:ClearBookmark [name] 删除书签, 若是不给名称, 则删除当前节点对应书签 同上
:EditBookmark 编辑全部书签 同上

经常使用指令

如下指令都须要在 NERDTree 中才能生效

指令 含义 备注
o 打开文件/目录/书签 若是是在目录上, 则是打开或关闭
i/s 在新窗口/垂直新窗口打开文件 针对文件的命令
t 在新标签打开目录/书签 若是是目录, 则自动打开一个新的 NERDTree
m 显示 NERDTree 菜单 菜单中能够选择添加/删除/修改文件或目录
O 递归打开当前节点
x 关闭当前节点的父目录
X 递归关闭当前节点直到最上层目录
D 删除当前 Bookmark 针对 Bookmark 的命令
r 刷新当前目录
q 关闭当前 NERDTree

配置

在 vimrc 中添加以下配置:

" 显示隐藏文件 let NERDTreeShowHidden=1 " 显示书签
let NERDTreeShowBookmarks=1
" NERDTree 大小改成 45 字符宽度, 默认 31 let NERDTreeWinSize=45 " 显示简写的 NERDTree 菜单
let NERDTreeMinimalMenu=1
" 设置箭头样式 let g:NERDTreeDirArrowExpandable='▸' let g:NERDTreeDirArrowCollapsible='▾' " 删除文件时自动删除文件对应 buffer
let NERDTreeAutoDeleteBuffer=1
" <leader>h 切换显示 nnoremap <leader>h :NERDTreeToggle<cr> 复制代码

关于 CWD

前面咱们介绍过 CWD(Current Working Directory), 当前工做目录. NERDTree 是很依赖 CWD的, 当你打开 NERDTree 的时候, NERDTree 会自动以 CWD 做为根目录显示文件目录. 使用 :NERDTree 命令时, 你能够指定一个目录做为参数, 那么此时这个目录就是 CWD. 若是你不指定目录参数, 则 CWD 就是用户目录.

在 NERDTree 中, 能够在某个目录节点上使用 cd 指令, 将 CWD 更改成指定目录. 不过有时候使用 cd 指令更改 CWD 会致使一些奇怪的问题, 好比 NERDTree 失效了, 此时可使用 :NERDTree 命令重启 NERDTree.

repeat.vim

. 这个指令只能重复 Vim 原生的上次指令, 若是是本身映射的指令或是插件映射的指令, 是没法重复的. repeat.vim 就是用来解决这个问题的. 无需配置, 装上就能用了, 虽然用处不大, 可是聊胜于无.

surround.vim

上古神器, 能够快速地给文本两边添加成对的符号, 如 ([{" 等等. 帮助文档: help surround

下文我简单介绍下其用法, 我会将成对的符号称为 "surroundings", 这也是官方文档中的称呼

使用方法

  1. 删除 surroundings 指令为 ds (Delete Surroudings), 能够将文本两边的 surroundings 删掉, 用法为 ds<surrounding>, 看下面几个例子(星号表示光标的位置):
Old Text command New Text
"Hello *world!" ds" Hello *world
(123+4*56)/2 ds) 123+4*56/2
<div>Yo!*</div> dst Yo!*

注意, dst 这个指令中, t 是个文本对象, a tag, surround 中的文本对象和 Vim 中的一致.

  1. 改变 surroundings 指令为 cs (Change Surroundings), 能够改变文本两边的 surroundings, 用法为: cs<old surrounding><new surrouding>, 下面给出几个例子:
Old text Command New text ~
"Hello *world!" cs"' 'Hello world!'
"Hello *world!" cs"<q> <q>Hello world!</q>
(123+4*56)/2 cs)] [123+456]/2
(123+4*56)/2 cs)[ [ 123+456 ]/2
<div>Yo!*</div> cst<p> <p>Yo!</p>

除了 cs 指令, 还有一个 cS 指令, 给当前文本替换 surroundings 的时候, 会给当前文本单独 分配一行, 并进行代码格式化.

  1. 添加 surroundings 指令为 ys (You Surroundings), 给文本添加 surroundings, 用法为 ys<text object><surrounding>, 下面给出一些例子:
Old text Command New text ~
Hello w*orld! ysiw) Hello (world)!
Ti*tle ysiw<h1> <h1>Title</h1>
很Geek的作法 ysiw<space><space> 很 Geek 的作法

有一个特殊指令: yss, 能够对当前行添加 surroundings, 添加时自动忽略两边的空格:

Old text Command New text ~
Hello w*orld! yssB {Hello world!}

相似 cS, yS 也能够在给文本添加 surroundings 的时候给文本单独分行并进行代码格式化, 而 ySS 则能够给当前行添加 surroundings, 而且格式化

  1. 可视模式指令 按 v 进入可视模式, 接下来按 S<surrounding> 能够给选中的文本添加 surroundings

个人一些配置

写文档时, 在中英文混输的状况下, 最好在英文单词两边加上空格, 看着比较舒服, 也比较规范, 可是有时候常常忘记, 因此我定义了以下快捷键:

" 给单词两边加上空格 nmap <leader><space><space> ysiw<space><space> " 给单词左边加上空格
nmap <leader><space>h wbi<space><esc>w
" 给单词右边加上空格 nmap <leader><space>l ea<space><esc>b 复制代码

这些配置依赖 surround.vim, 因此要先装插件. 另外, 有了 repeat.vim 这个插件, 这些指令也是可使用 . 进行重复的, 很方便.

SuperTab

上古神器, 在插入模式下使用 Tab 键进行补全. 帮助文档: help supertab

用法其实很简单, 这里给一个文档中的例子:

> Example ('|' denotes the cursor location):  
> bar  
> baz  
> b|`<Tab>`    Hitting `<Tab>` here will start the completion, allowing you to  
            then cycle through the suggested words ('bar' and 'baz').
复制代码

意思就是说, 你先输入过 bar, 又输入过 baz, 当你再次输入 b, 而后按 Tab 键, 会弹出一个候选列表帮你进行补全, 在补全列表出现后继续按 Tab/Shift-Tab, 能够在候选词中循环.

EasyMotion

上古神器, 是对 Vim 移动指令的加强. 帮助文档: help easymotion

这里简单介绍一下用法: 加入你想找到下面这句话中的 amet 这个单词上:

<cursor>Lorem ipsum dolor sit amet.

<cursor> 表示你如今光标的所在处, 你须要输入四次 w. 可是使用 EasyMotion 的话, 你可使用这个指令: <leader><leader>w, 你会发现每一个单词的首字母都被高亮成一个新的不重复的字母了, 你直接按被高亮的那个字母, 就能够跳过去了.

一样的, 若是你想跳到某一个出现字母 o 的地方, 你可使用 <leader><leader>fo, 那么全部字母o都被高亮成新的字母了, 你直接按下高亮的字母就能够跳过去了.

你试试就知道个人意思了.

CtrlP

上古神器, 用于查找 Buffer, 文件列表, 最近使用文件等, 如今还在缓慢更新, 这几年慢慢的被 fzf 代替了, 可是因为 fzf 配置比较麻烦, 如今我暂时还用 CtrlP. 帮助文档: help CtrlP

用法很简单, 按快捷键 Ctrl-p 可在 Vim 底部打开一个窗口, 而后你能够输入文件名中的字符, CtrlP 会进行模糊匹配查找.

经常使用快捷键

下面给出几个经常使用快捷键, 注意下面的快捷键都只能在 CtrlP 的窗口中使用:

快捷键 功能 备注
Ctrl-j/k 在文件列表中上下移动
Ctrl-f/Ctrl-b 切换到下一个/上一个搜索模式 搜索模式有三个: Buffer, 文件目录, MRU(最近最常使用)
Ctrl-c 关闭 CtrlP
F7 在 CtrlP 面板中删除光标所在条目(buffer, mru)
Ctrl-s/Ctrl-v 在水平/垂直的分割窗口中打开文件
Ctrl-t 在新 tab 中打开文件

注意: CtrlP 也很依赖 CWD, 它列出文件目录中的文件时, 也是 CWD 下的文件.

配置

" 默认使用缓冲区搜索模式打开 CtrlP let g:ctrlp_cmd='CtrlPBuffer' " 将为多字节字符开启输入事件循环, 用于解决中文文件名的问题(实验特性)
let g:ctrlp_key_loop= 1
" CtrlP 窗口最大高度和最小高度都是 10, 即固定大小 let g:ctrlp_match_window='min:10,max:10' 复制代码

小结

本节介绍了几个经常使用的插件, 都是很基本和通用的, 不涉及到具体编程语言, 有了它们, 会让你的 Vim 用起来更舒服.

相关文章
相关标签/搜索