VIM学习笔记 环绕字符编辑(surround)

surround 插件可以快速编辑围绕在内容两端的字符(pairs of things surrounding things),比如成对出现的括号、引号,甚至HTML/XML标签等。

安装配置

推荐您使用vim-plugVundle等插件管理器,来安装GitHub上的surround插件。

以下将利用实例来介绍surround插件的主要功能,请注意:

新增环绕字符

在常规模式、插入模式和可视化模式下,可以分别使用ysS命令来新增环绕字符:

模式目标
范围
新增
内容
原始文本命令更改效果
常规模式单词字符Hello Worldysiw*Hello *World*
单词标签Hello Worldysiwt<strong>Hello <strong>World</strong>
单词括号print var1, var2ys3w)print (var1, var2)
行尾括号print var1, var2ys$)print (var1, var2)
查找标签William Shakespeare said,
"Brevity is the soul of wit."
ysf"t<em>William Shakespeare said,
<em>"Brevity is the soul of wit."</em>
整行字符Hello Worldyss""Hello World"
整行标签Hello Worldysst<p><p>Hello World</p>
整行新行Hello WorldySS""
Hello World
"
插入模式引号<CTRL-g>s"""
标签<CTRL-g>S<html><html>

</html>
字符可视化模式选中的文本括号print var1, var2veeS)print (var1, var2)
行可视化模式选中的文本标签The passion to save humanity is a
cover for the desire to rule it.
VjS<p><p>The passion to save humanity is a
cover for the desire to rule it.</p>
块可视化模式选中的文本标签Item 1
Item 2
Item 3
<Ctrl-Q>$jjS<li><li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>

请注意:

  1. 插入模式下的操作:
  2. 可视化模式下的操作:

修改环绕字符

使用cs命令可以修改环绕字符:

目标范围替换内容原始文本命令更改效果
单词引号"Hello World"cs"''Hello World'
单词标签及新行'Hello World'cS'<p><p>
Hello World
</p>
单词标签<p>Hello World</p>cst<h1><h1>Hello World</h1>
单词引号Hello World!csw'Hello 'World'!
单词及标点引号Hello World!csW'Hello 'World!'
单词括号(1,2,3)cs)][1,2,3]
单词括号及空格(1,2,3)cs)[[ 1,2,3 ]

删除环绕字符

使用ds命令可以删除环绕字符:

目标范围新增内容原始文本命令更改效果
单词引号'Hello World'ds'Hello World
单词括号(123+4*56)/2ds(123+4*56/2
单词标签<div>Hello</div>dstHello

surround插件主要提供以下命令:

ys添加环绕字符
yS添加环绕字符并拆分新行
yss为整行添加环绕字符
ySS为整行添加环绕字符并拆分新行
cs修改环绕字符
cS修改环绕字符并拆分新行
ds删除环绕字符

surround插件可以识别并处理以下目标实体:

自定义快捷键

如果查看surround插件的源码,将会发现快捷键逐一定义在surround.vim文件中:

plugin_vim_searchindex

也就是说,我们可以直接在vimrc配置文件中,重置或取消插件预定义的快捷键:

" 不定义任何快捷键
let g:surround_no_mappings = 1
" 从plugin/surround.vim复制快捷键定义
” 并按需要进行修改
nmap ds <Plug>Dsurround
nmap cs <Plug>Csurround
nmap cS <Plug>CSurround
nmap ys <Plug>Ysurround
nmap yS <Plug>YSurround
nmap yss <Plug>Yssurround
nmap ySs <Plug>YSsurround
nmap ySS <Plug>YSsurround
" 取消不需要的快捷键
"xmap S   <Plug>VSurround
"xmap gS  <Plug>VgSurround
"imap   <C-S> <Plug>Isurround
imap    <C-G>s <Plug>Isurround
imap    <C-G>S <Plug>ISurround

假设需要输入以下包含多个环绕字符的文本:

{{ nginx_root }}

由于surround插件并不支持.重复命令,如果想要新增多个成对字符,那么需要安装额外的repeat.vim插件。而死板繁琐的替代方案是,自定义快捷键来重复执行命令:

nmap <C-J> ysiw}lysiw{

使用以下命令,可以查看插件的帮助文件:

:help surround

使用感受

一,舍本逐末。为了输入环绕字符的小需求,而发明碾压一切的大轮子。颇有些杀鸡用牛刀的意味。而且平白多出来的快捷键和命令,不但冗长而且别扭,操作起来总有种有苦难言的感觉。

二,盛名之下,其实难副。对于一个被不断被提及的知名插件,从功能和体验上都差强人意,着实让人失望。也许,这就是见面不如闻名吧。

以上,皆为一家之言,还请自行斟酌。

Ver: 2.0 | YYQ<上一篇 | 目录 下一篇>