一般写东西的时候,总会遇到比如写了一长串文字后,突然想给这串文字头尾加个括号,
或者引号。其实很多编辑器都提供这种功能,选中,然后输入括号。但是一直用 Vim,也没发现
有这种功能, 也只能怪自己没有研究。 后来网上找了一圈, 发现了原来有这个插件: surround.vim。
Surround.vim is all about “surroundings”: parentheses, brackets, quotes, XML tags, and more. The plugin provides mappings to easily delete, change and add such surroundings in pairs.
先看下全部的快捷键:
可以看到基本有三种操作:
- 删除
ds 加包在两边的引号,括号或者标签(标签全部用t代替)。
e.g:
“hello, world!” => hello, world! 只要输入 ds"
\hello, world!\ => hello, world! 只要输入 dst
- 添加
note: s 代表sentence iw/w 代表 word。
- 修改
到此, surround vim 你就基本掌握了。 如果你对这些快捷键能倒敲入流,那么你一定能得到许多的便捷。 XD
Vim 的 text object
除了和单个字符打交道外, 我们还处理单词, 句子还有段落, 这些在 Vim 中就是文本对象。
Vim 中纯文本和常见编程语言都有文本对象。也可以利用 Vim 脚本自定义新的文本对象。
Vim 中,编辑命令有如下结构:
|
|
number 用于将命令使用于多个文本对象或移动,如,向后移动三个单词、向前移动两个段落。 number 是可选项,且可以出现在命令的前面或后面。
command 是一个操作,如,修改、删除(剪切),或复制。 command 也是可选的,但如果没有,就只是移动命令,而不是编辑命令。
text object 或 motion 可以是一个文本结构,如单词、句子、段落或移动, 如,向前移行,向后一页,行尾。
editing command 即一个命令加上一个文本对象或移动,如,删除一个单词,修改下一个句子, 复制这个段落。
普通文本对象
普通文本中, Vim 提供三种行为模块: words, sentences and paragraphs.
Words
+ aw – 环绕单词对象 (包括单词外面的空格字符)
+ iw – 在单词对象内部 (不包括单词外面的空格字符)
hello world vim!
在world单词中间敲打
daw
hello_vim!
注意: 一个空格,下划线代替hello world vim!
在world单词中间敲打
diw
hello__vim!
注意: 两个空格,下划线代替Sentences
+ as - 环绕句子对象
+ is - 在句子对象内部
和 Words 同意的道理。 a 表示around, i 表示inner。
Paragraphs
+ ap – 环绕段落对象
+ ip – 在段落对象内部
和 Words 同意的道理。 a 表示around, i 表示inner。
编语言文本对象
Vim 基于常见变成语言结构提供了一些文本对象。
字符串
- a” - 双引号括起来的字符串
- i’ - 双引号括起来的字符串内
- a” - 单引号括起来的字符串
- i’ - 单引号括起来的字符串内
- a` - 反向引号括起来的字符串
- a` - 反向引号括起来的字符串内
光标不需要在引号内,命令默认会寻找当前行的第一个引号。
圆括弧
- a) - 一个括弧块
- i) - 括弧块内
- % 移动是另一种匹配括弧块的方法。 c% 与 ca( 相同。不同点也在于对光标位置的要求。
方括弧
- a] - 一个方括弧块
- i] - 方括弧块内
花括弧
- a} - 一个花括弧块
- i} - 花括弧内
标记语言标签
- at - 一个标签块
- it - 标签块内
- a> - 单个标签
- i> - 单个标签内
其实可以参见: