今天要介绍的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中我们有如下文本:

Hello *World!

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

ysis"

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

" Hello World"

我们也可以通过:cs"'
来将"(双引号)替换为'(单引号)

' Hello World'

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

 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模式中有如下文本:

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>.
进入可视模式后输入:

it

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

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

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

来查看。

打造一个有感觉的vim(四)的更多相关文章

  1. [.NET] 一步步打造一个简单的 MVC 电商网站 - BooksStore(四)

    一步步打造一个简单的 MVC 电商网站 - BooksStore(四) 本系列的 GitHub地址:https://github.com/liqingwen2015/Wen.BooksStore &l ...

  2. MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)

    前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...

  3. 打造一个window桌面应用:在线聊天对话机器人

    大家好,我是辰哥~~~ 本文目标:打造一个window桌面应用:在线聊天对话机器人. 今天辰哥教大家做一个在线聊天对话机器人桌面应用,已经打包成exe可执行文件,读者可以直接拿来使用, 先上演示图 聊 ...

  4. [后端人员耍前端系列]AngularJs篇:使用AngularJs打造一个简易权限系统

    一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJS来打造一个简易的权限管理系统.下面不多 ...

  5. Linux强化论:15步打造一个安全的Linux服务器

    Linux强化论:15步打造一个安全的Linux服务器 Alpha_h4ck2016-11-30共28761人围观 ,发现 8 个不明物体专题系统安全 可能大多数人都觉得Linux是安全的吧?但我要告 ...

  6. 在sublimetext上打造一个兼容virtualenv的web&python开发环境

    利用Sublimetext3&virtualenv 打造一个Web&Python IDE 注: 环境:window|python3;以下使用的sublimetext插件均用packag ...

  7. AngularJs打造一个简易权限系统

    AngularJs打造一个简易权限系统 一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJ ...

  8. RethinkDB创始人教你如何打造一个伟大的互联网产品

    关于作者 我叫Slava Akhmechet,本人是 RethinkDB 的创始人之一,RethinkDB是开源,分布式数据库,旨在帮助开发人员与运营商在打造实时应用时处理无结构数据 如何打造一个伟大 ...

  9. [.NET] 一步步打造一个简单的 MVC 网站 - BooksStore(一)

    一步步打造一个简单的 MVC 网站 - BooksStore(一) 本系列的 GitHub地址:https://github.com/liqingwen2015/Wen.BooksStore 简介 主 ...

随机推荐

  1. STM32F4读写内部FLASH【使用库函数】

    STM32F4Discovery开发帮使用的STM32F407VGT6芯片,内部FLASH有1M之多.平时写的代码,烧写完之后还有大量的剩余.有效利用这剩余的FLASH能存储不少数据.因此研究了一下S ...

  2. C#.Net Mvc运营监控,计算方法/接口/action/页面执行时间

    1.建立一个TimingActionFilter过滤器 public class TimingActionFilter : ActionFilterAttribute { public overrid ...

  3. Spark代码调优(一)

    环境极其恶劣情况下: import org.apache.spark.SparkContext import org.apache.spark.rdd.RDD import org.apache.sp ...

  4. owncloud7.0.2.1升级8.0.3

    进入更新中心升级,会自动备份下载安装,安装完提示更新数据库,跳转页面后提示需要php5.4以上版本,检查当前环境为php5.3.3.服务器为CentOS6.4,使用yum更新最新版本即5.3.3.   ...

  5. 【解决】SharePoint 2013 with SP1安装问题及解决

    安装环境 操作系统:Windows Server 2008 R2 SP1 安装包:SharePoint Server 2013 with SP1 问题及解决 I. 必备组件(prerequisitei ...

  6. JNI开发中String转换chat*工具

    char* Jstring2CStr(JNIEnv* env, jstring jstr) { char* rtn = NULL; jclass clsstring = env->FindCla ...

  7. openlayers中实现自定冒泡的效果

    自定义的Openlayers.Popup.FreshCloud继承自Openlayers.Popup.Framed,实现了比较简洁的冒泡效果,详细代码如下 /** * Class: OpenLayer ...

  8. openlayers

    很久没有写东西了,最近突然想看看地图,就翻看了下,用了2-3周时间看看网页,学习做了下:先看做的效果:

  9. messagePaneHost

    Microsoft.Dynamics.Framework.UI.WinForms.Controls.MessageBarType messageBarType; super(); imageList ...

  10. 让VS 2010在调试字符串时,支持Json数据格式友好显示

    阅读本文如果对Microsoft.VisualStudio.DebuggerVisualizers的用法不熟悉的,可以参考这篇文章.http://www.cnblogs.com/devil0153/a ...