今天要介绍的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. win10 下 gulp-sass 无法使用的解决

    参考链接: http://stackoverflow.com/questions/28409100/try-reinstalling-node-sass-on-node-0-12 解决方法: npm ...

  2. Spark Job的提交与task本地化分析(源码阅读八)

    我们又都知道,Spark中任务的处理也要考虑数据的本地性(locality),Spark目前支持PROCESS_LOCAL(本地进程).NODE_LOCAL(本地节点).NODE_PREF.RACK_ ...

  3. Java基础语法目录

    一.Java相关科普知识1.Java的发展历程2.Java的发展方向3.Java的体系特性二.Java第一个程序1.JavaJDK的安装与环境的配置2.记事本开发Java程序的注意事项与常见问题3.J ...

  4. android 对sqlite数据库的增删改查等各种操作

    转载:http://blog.csdn.net/vrix/article/details/6717090 package com.sqlite.main; import java.io.File; i ...

  5. SQL时间相关

    SQL --本周第一天 SELECT DATEADD(Day,-(DATEPART(Weekday,getdate())+@@DATEFIRST-)%,getdate()) --or ,getdate ...

  6. Python实现支持并发、断点续传的FTP

    参考网上一个FTP程序,重写了一遍,并稍加扩展 一.要求 1. 支持多用户同时登录 2. 可以注册用户,密码使用md5加密 3. 可以登录已注册用户 4.  支持cd切换目录,ls查看目录子文件 5. ...

  7. java byte&0xFF

    做串口端口通讯时,数据都是以byte类型发送的 普通的byte范围是-128-127,而java的byte范围是0-255 因此将数据的byte转成java的byte时,需要与0xff(1111111 ...

  8. java单列设计模式 小记

    单例设计模式-------懒汉式,饿汉式 单例设计模式是一种很常见的设计模式 在这里介绍两种单例设计模式 懒汉式与饿汉式 一.先说一说单例设计模式的特点: >>1.单例设计模式保证一个类只 ...

  9. C++设计模式-Decorator装饰模式

    Decorator装饰模式作用:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活. UML图如下: Component是定义一个对象接口,可以给这些对象动态地添加职责. ...

  10. MVC @Html.DropDownList()绑定值

    Controller中: ViewBag.modules = new SelectList(集合.ToList(), "下拉框键", "下拉框值"); View ...