转: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。