vim-surround
增删改 括号、引号、XML 标签 的利器。i 是为了编辑这些环境内的文字,而 s 就是为了编辑双侧环境。
以字符 "Hello world!" 为例,并且都在普通模式下(按 Esc )
- 增:
- 对光标所在的单词(以空格或者标点符号隔开的内容)增加环境:光标移动在单词的一个字符上,按
ysiw+目标环境(ysiw的记法:you surround in word),如 光标移到H上,按ysiw)得到"(Hello) world!" - 对一整行增加环境:光标移动在某一行,按
yss+目标环境,如yss}、yss<div>
- 对光标所在的单词(以空格或者标点符号隔开的内容)增加环境:光标移动在单词的一个字符上,按
- 删:
- 光标移动在
"Hello world!"任何一个字符上,输入ds"就可把"删除 ,从而得到Hello world! - 删除的方式从内到外,比如
({ Hello } world!)删除{}和(),只需把光标移到{ Hello }某个字符上,使用ds{ds((或者ds}ds)之类的)得到Hello world!
- 光标移动在
- 改:修改单词或一行两边的环境:光标移动在
"Hello world!"任何一个字符上,按cs+当前环境+目标环境即可。例如:- 输入
cs"'就可把"改成',从而得到'Hello world!' - 输入
cs"]就可把"改成],从而得到[Hello world!] - 输入
cs"[就可把"改成[,从而得到[ Hello world! ] - 针对 xml tag,输入
cs"<p>则得到<p>Hello world!</p>
- 输入
注意: {} [] () 三种括号在增、改的时候,左右环境是不一样的,
左环境会在单词左右两侧增加一个空格再放入环境中,右环境直接把单词放进环境里;
但是在删的时候使用左环境或者右环境都可以把环境删除。
相关讨论:What does the "y" stand for in "ysiw"?
#TODO# 进阶版:targets.vim