vim插件—surround.vim

转:http://foocoder.com/blog/mei-ri-vimcha-jian-surround-dot-vim.html/

今天介绍一个必备的插件——surround.vim,来自Tim Pope大神,很多著名的插件包括pathogen.vim都是出自他手,后面我还会介绍更多他写的插件。

是我最常用的插件之一。这个插件专门用来处理成对的包围符号……比如说括号,单双引号,XML标签等。

使用也非常简单好记,遵循vim本身的规则。

先来看一组实例,就知道这个插件的用途和使用方式了:

光标在

"Hello world!"

中时按下cs"' ,则会替换双引号为单引号:

'Hello world!'

继续按下cs'<q>,则会替换单引号为标签

<q>Hello world!</q>

按下 cst",则回到初始的双引号:

"Hello world!"

要删除符号,则按下ds"

Hello world!

当光标在hello上时,按下ysiw],则会变为

[Hello] world!

这个操作为其加上了包围符号。

总结下:

1.删除包围符号的命令是ds,后面加的字符表示要删除的符号。比如:

"Hello *world!"           ds"         Hello world!

2.替换包围符号的命令是cs,命令后跟两个参数,分别是被替换的符号和需要使用的符号。比如

"Hello *world!"           cs"'        'Hello world!'

3.添加包围符号的命令是ys(ys可以记为you surround),命令后同样跟两个参数,第一个是一个vim“动作”(motion)或者是一个文本对象。

其中motion即vim动作,比如说w向后一个单词。文本对象简单的来说主要是来通过一些分隔符来标识一段文本,比如iw就是一个文本对象,即光标下的单词。不理解的朋友可以将光标放置在单词hello的中央,分别试一下ysw和ysiw的区别应该就明白啦。如果大家需要详细介绍motion和文本对象,可以留言或者直接公众账号回复,我看看要不要单独介绍下。

Hello w*orld!             ysiw)       Hello (world)!

另外:yss命令可以用于整行操作,忽略中间的空格。 yS和ySS还能让包围内容单独一行并且加上缩进。

4.添加包围符号还有个非常好用的方式:在可视模式v下,按下S后即可添加想要添加的包围符号了。

再说一个小技巧:在包围符号为括时,输入左括号(或者{,则会留一个空格

Hello w*orld!             ysiw(       Hello ( world )!

而右括号则不留空格,也是非常好用,看编码风格使用。

今天就介绍到这里,欢迎关注我的公众账号,最新的文章都会第一时间推送到。有问题可以直接回复。

转:http://www.dutor.net/index.php/2010/10/vim-surround/

写程序时,尤其在C/C++程序中,有大量的配对的符号(surrounding):( ), [ ], { }, < > ‘ ‘, ” “,另外标记语言(如XML)更是由无数的配对标记组成:,

. 如果能够快速地处理这些surroundings,就能大大提升编程的效率。
Vim本身就有这种配对符号的能力,在Vim中这叫做text object,可以使用:h text-objects查看这些text objects。你会发现Vim只能对这些配对符所包含的文本或者整个text object进行删除和修改,却不能对surrounding进行修改,更不能为普通文本添加surrounding。
既然有这种需求,就肯定会有热心人士努力,来满足这种需求,方便了自己,也方便了整个Vim用户群。Tim Pope同志就为Vim写了这款插件,surround.vim:

This plugin is a tool for dealing with pairs of “surroundings.” Examples of surroundings include parentheses, quotes, and HTML tags. They are closely related to what Vim refers to as |text-objects|. Provided are mappings to allow for removing, changing, and adding surroundings.

下面是surround.vim插件帮助文档中的示例:

  Old text                  Command     New text ~
  "Hello *world!"           ds"         Hello world!
  [123+4*56]/2              cs])        (123+456)/2
  "Look ma, I'm *HTML!"     cs"<q>      <q>Look ma, I'm HTML!</q>
  if *x>3 {                 ysW(        if ( x>3 ) {
  my $str = *whee!;         vlllls'     my $str = 'whee!';
  <div>Yo!*</div>           dst         Yo!
  <div>Yo!*</div>           cst<p>      <p>Yo!</p>

其中,*表示光标所在位置。
下面是surround.vim插件支持的快捷键的列表:

Normal mode
-----------
ds  - delete a surrounding
cs  - change a surrounding
ys  - add a surrounding
yS  - add a surrounding and place the surrounded text on a new line + indent it
yss - add a surrounding to the whole line
ySs - add a surrounding to the whole line, place it on a new line + indent it
ySS - same as ySs

Visual mode
-----------
s   - in visual mode, add a surrounding
S   - in visual mode, add a surrounding but place text on new line + indent it

Insert mode
-----------
<CTRL-s> - in insert mode, add a surrounding
<CTRL-s><CTRL-s> - in insert mode, add a new line + surrounding + indent
<CTRL-g>s - same as <CTRL-s>
<CTRL-g>S - same as <CTRL-s><CTRL-s>

关于这些快捷键,更加详析的解释参见该插件的help文档。
需要注意的一点是,安装此插件后,在Visual Mode内原来的s与S(substitute)命令便不再有效,如果你经常在V模式下使用替换命令,你可能需要对该插件略作修改,将V模式下对应的键映射代码注释掉。
另外,如果你在终端中使用Vim,Insert Mode中使用Ctrl + s键时,则可能会使终端冻结(Ctrl + q解除冻结)。此时你可以使用对应的Ctrl + g版本的快捷键。
最后,你可以在这里下载该插件,安装方式和其它插件相同:把得到的zip文件解压缩到.vim下即可,为了使用help文档,可能还需要执行一次:helptags ~/.vim/doc。

    A+
发布日期:2021年07月26日  所属分类:未分类

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: