打造一个有感觉的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中我们有如下文本:
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(四)的更多相关文章
- [.NET] 一步步打造一个简单的 MVC 电商网站 - BooksStore(四)
一步步打造一个简单的 MVC 电商网站 - BooksStore(四) 本系列的 GitHub地址:https://github.com/liqingwen2015/Wen.BooksStore &l ...
- MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)
前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...
- 打造一个window桌面应用:在线聊天对话机器人
大家好,我是辰哥~~~ 本文目标:打造一个window桌面应用:在线聊天对话机器人. 今天辰哥教大家做一个在线聊天对话机器人桌面应用,已经打包成exe可执行文件,读者可以直接拿来使用, 先上演示图 聊 ...
- [后端人员耍前端系列]AngularJs篇:使用AngularJs打造一个简易权限系统
一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJS来打造一个简易的权限管理系统.下面不多 ...
- Linux强化论:15步打造一个安全的Linux服务器
Linux强化论:15步打造一个安全的Linux服务器 Alpha_h4ck2016-11-30共28761人围观 ,发现 8 个不明物体专题系统安全 可能大多数人都觉得Linux是安全的吧?但我要告 ...
- 在sublimetext上打造一个兼容virtualenv的web&python开发环境
利用Sublimetext3&virtualenv 打造一个Web&Python IDE 注: 环境:window|python3;以下使用的sublimetext插件均用packag ...
- AngularJs打造一个简易权限系统
AngularJs打造一个简易权限系统 一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJ ...
- RethinkDB创始人教你如何打造一个伟大的互联网产品
关于作者 我叫Slava Akhmechet,本人是 RethinkDB 的创始人之一,RethinkDB是开源,分布式数据库,旨在帮助开发人员与运营商在打造实时应用时处理无结构数据 如何打造一个伟大 ...
- [.NET] 一步步打造一个简单的 MVC 网站 - BooksStore(一)
一步步打造一个简单的 MVC 网站 - BooksStore(一) 本系列的 GitHub地址:https://github.com/liqingwen2015/Wen.BooksStore 简介 主 ...
随机推荐
- Android线程间通信更新UI的方法(重点分析EventBus)
Android的UI更新只能在UI线程中,即主线程.子线程中如果要进行UI更新,都是要通知主线程来进行. 几种实现方式总结如下,欢迎补充. 1.runOnUiThread() 子线程中持有当前Acti ...
- Spring Mvc Rest为不支持DELETE/PUT的浏览器添加DELETE/PUT支持
现在都流行RESTFul,但是有一个问题,有些浏览器现在就不支持delete/put方式的请求,这些请求发出去之后都会变成get请求,导致rest接口无法被访问到.为了解决这个问题,spring提出了 ...
- 【转】EXCEL不显示科学计数法
源地址:http://jingyan.baidu.com/article/e4d08ffdcc304e0fd3f60d69.html 2法无效,不知道为何
- C语言scanf函数详细解释
原文链接 函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准 ...
- 数据库 PSU,SPU(CPU),Bundle Patches 和 Patchsets 补丁号码快速参考 (文档 ID 1922396.1)
数据库 PSU,SPU(CPU),Bundle Patches 和 Patchsets 补丁号码快速参考 (文档 ID 1922396.1)
- 实例存储支持的AMI创建步骤
实例存储支持的AMI创建步骤 一.Windows AMI 1. 选择实例存储支持的AMI创建实例. 2. 远程登录实例进行定制化配置. 3. 通过Web控制台或命令行Bundle实例(并自动上传到S3 ...
- Linux常用命令集合
常用的Linux命令,备忘 1 pwd 显示当前目录 命令格式: pwd [选项] 2 cd 更换目录 命令格式: cd [目录名] 例: 3 ls 显示当前目录内容 命令格式: ls [选项] [目 ...
- WEB页面采集器编写经验之一:静态页面采集器
严格意义来说,采集器和爬虫不是一回事:采集器是对特定结构的数据来源进行解析.结构化,将所需的数据从中提取出来:而爬虫的主要目标更多的是页面里的链接和页面的TITLE. 采集器也写过不少了,随便写一点经 ...
- 【SSM 7】Mybatis底层封装思路
一.基本概述 在前面的博客中介绍到Mybatis的逆向生成工具,为我们生成了每个实体的基本增删改查的代码,那么每个实体都是那么多的代码,我们很容易的发现,有很大的相似性.对于这部分代码,应该予以抽象封 ...
- python基础之迭代与解析
先简单看一下文件迭代器 >>> f=open('file1') >>> f.readline() "'aaa','bbb','ccc'\n" & ...