今天要介绍的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. 【uTenux】学习一个嵌入式操作系统-uTenux

    [这个是汇总] 最近有点时间,参加了EEPW论坛和悠龙咨询组织的一个嵌入式操作系统uTenux试用活动.本来想借助这个活动提供的开发板做一个小项目,奈何OS使用功底太次.于是,这个活动被我降低到了学习 ...

  2. 高阶c++

    模板就是宏.模板能不能再往一步? http://perilla.codeplex.com/ enhanced c++ template grammar: rule 1: c++ identifier ...

  3. NSOperationQueue与GCD的使用原则和场景

    首先,我们要明确NSOperationQueue与GCD之间的关系: NSOpertaionQueue用GCD构建封装的,是GCD的高级抽象. 其次,我们要区别两者的不同: GCD仅仅支持FIFO队列 ...

  4. 有关TabBar的一些性质

    // 计入导航控制器时,要使得底部的TabBar消消失 test.hidesBottomBarWhenPushed = YES; /** *  布局子控件 */ - (void)layoutSubvi ...

  5. 菜单栏被flex页面遮挡解决办法

  6. dede 二次开发系统迁移到 IIS 时会出现的问题及解决方案

    1.IIS 会默认站点所有文件只读,故一开始请打开目录权限,注意赋予权限对象是 webuser 或 IIS user;  若是集群的话,则目录共享给IIS对应的用户 2.后台不能登陆 查看数据库配置文 ...

  7. HUD 4007 [扫描线][序]

    /* 大连热身B题 不要低头,不要放弃,不要气馁,不要慌张 题意: 坐标平面内给很多个点,放置一个边长为r的与坐标轴平行的正方形,问最多有多少个点在正方形内部. 思路: 按照x先排序,然后确定x在合法 ...

  8. ActivityGroup、TabHost之子页面不刷新——getLocalActivityManager() 以及intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法

    TabHost继承自ActivityGroup,以下不再单独列出. ActivityGroup在第一次创建的时候会完整的执行子Activity或子view的生命周期,但在从其他子activity或子v ...

  9. 从 A/Looper: Could not create epoll instance. errno=24 错误浅谈解决各种 bug 的思路

    今天代码写着写着就莫名闪退了,手机也没有“程序停止运行”的提示,logcat也没有看到蓝色的调用栈log,这样的闪退最是蛋疼了,还好必现.复现几次之后,终于从logcat中看到了一行可疑的log: A ...

  10. CocoaPods安装记录

    1. ruby版本过低的解决方法 查看ruby版本:$ruby -v 终端会输出你的ruby 版本信息 查看目前的所有ruby版本:$rvm list known 安装ruby版本:$rvm inst ...