打造一个有感受的vim(四)

今天要介绍的VIM插件的名字叫作surround,这个插件的主要做用是将一个VIM的tex-objects(文本对象)添加或者取消包裹(单引号,双引号,XML标签等等)
下载地址以下:
https://github.com/tpope/vim-surround
安装方式和其余的插件同样,下载对应的压缩包,解压后将surround.vim放在vimfiles/plugin文件夹,surround.txt放在vimfiles/doc文件夹。
完成后为了生成帮助须要在vim执行
:helptags c:\Program\ Files\ (x86)\Vim\Vimfiles\doc
来生成帮助标签,不过这一步不是使用surround必须的。完成以后能够在VIM中输入
:h surround
来查看surround的帮助。
下面来看看surround的简单使用,在VIM中咱们有以下文本:git

Hello *World!

*(星号)在这里表明了当前光标的位置。
在normal模式下输入:github

ysis"

这条命令的意思是将整行用"(双引号包裹起来),结果以下所示正则表达式

" Hello World"

咱们也能够经过:cs"'
来将"(双引号)替换为'(单引号)sql

' Hello World'

最后的命令式ds,用来删除一个包裹:ds'vim

 Hello World

 

这三个命令ys,cs,ds就是surround全部的用法了,经过不一样的参数的组合来实现不一样的结果。而在surround,咱们须要知道的参数就两种:surrounds(包裹标记",',<>,{},[]等),text-objects(文本对象)。
ys:you surround--用一个surrounds来包裹一个已被选择的text-objects(文本对象)。
因此它的语法是:ys[text-objects selection][surrounds]
=======================================我是文本对象的分割线=================================================
关于text-objects(文本对象),其实彻底能够另写一篇博客来介绍,不过它不是本文的主角,因此这里只是简单的介绍。
Vim中的text-objects(文本对象)有w(word),s(sentence),p(paragraph),(),[],{},"",'',b(block),t(tag)等等。
而选择这些对象须要使用对象选择器:a(包含文本对象的首空格和尾空格),i(不包含文本对象的首空格和尾空格)。以及一个可选的能够出如今对象选择器以前的数字来代表选择该对象的次数。假设在VIM的Normal模式中有以下文本:ui

The *quieter you are,the more you are able to<a>hear</a>.


*(星号为光标位置)
按下v键进入可视模式(visual model)
分别输入:插件

aw,iw,as,is,2aw


你会看到不一样的text-objects(文本对象)选择命令之间的区别。如今咱们将光标移动到以下位置
The quieter you are,the more you are able to<a>h*ear</a>.
进入可视模式后输入:orm

it

标签a中的文本对象将被选择。
====================================================================================================
如今咱们对文本对象的选择有了初步的理解,接着继续。
ys命令中咱们选择了合适的文本对象以后,就能够在最后加上surrounds(包裹标记)来将选择的文本对象包起来。
因此开头提到的命令能够分解为:ys is "
对选择的sentence对象(is)用"(双引号)包起来(ys)对象

而cs后面跟一个将要被替换的surrounds和一个用于替换的surrounds
因此cs"'就是将第一个"(双引号)包裹替换为'(单引号)blog

ds后面跟一个将要删除的surrounds
ds"就是将第一个"(双引号)包裹删除。

最后还须要提一下surroud.vim的自定义功能,你能够将一个ASCII的Char定义为一个包裹
例如咱们用以下设置,将a(ASCII=97)表示为一个<ai>包裹

:let g:surround_97 = "<ai>\r</ai>"


其中/r表示将要替换的被选择的文本对象。
对下面这段文本输入:ysisa

Hello *World!

*(星号)在这里表明了当前光标的位置。
你将获得如下结果

<ai>Hello World!</ai>

surround.vim的自定义功能还可使用正则表达式,而且带输入参数,具体的用法能够经过

:help surroud

来查看。