请注意,我不使用 Visual Studio,并且对其中的可用功能知之甚少。以下是我认为在 Vim 中有用的示例,而不是 Visual Studio 中缺少的功能的列表。
宏
为复杂(但重复)的操作创建宏很容易。用一个简单的例子来说明,假设我们从:
Line1
Line2
Line3
Line4
Line5
现在我们想将每一行都包含在 print(""); 语句中。
将光标放在第一行,输入:
-
qx 开始将宏录制到寄存器x
-
Shift+I
print(" Esc 在行首插入文本
-
Shift+A
"); Esc 在行尾追加文本
-
j下一行
-
q停止录制宏
-
4@x 执行寄存器x 中的宏4次
有关 Vim 宏的更多信息,请参阅 :help complex-repeat。
文本对象
请注意,这是 Vim 对传统 Vi 的改进之一。如果它不起作用,你可能是在 Vi 兼容模式下运行的;使用 :set nocompatible 启用 Vim 的全部功能。
文本对象允许您轻松选择文本区域。假设我们从以下文本开始,并将光标放在一些文本上:
<b><i>some text</i></b>
现在我们要删除<i> 和</i> 之间的所有内容。这可以通过简单地输入命令dit (d'elete i'nner t'ag) 来完成!或者,如果我们想在选择中包含标签本身,请使用 dat (d'elete a t'ag)。要删除 <b> 标记内的所有内容,请使用 d2it (d'elete two i'nner t'ags)。
您可以类似地使用daw(删除一个单词)、dap(删除一个段落)、di"(删除双引号内)等;完整列表见:help text-objects。
另一个有用的文本对象示例:
v2ap"+y
-
v 切换视觉模式。这样可以更轻松地查看您选择的内容,并让您在执行命令之前通过一系列多个动作调整您的选择。
-
2ap 选择本段和下一段
-
"+选择系统剪贴板作为下次操作的寄存器
-
y 将选择拉到给定的寄存器中
换句话说,该命令会将文本中的两个段落复制到系统剪贴板(例如,将它们粘贴到 StackOverflow 上)。
全局编辑
global 命令用于将 Ex 命令应用于与给定正则表达式匹配的所有行。例子:
-
:global/test/print 或 :g/test/p 将打印包含短语 test 的所有行
-
:global/test/delete 或 :g/test/d 将删除上述行
-
:global/test/substitute/^/#/ 或 :g/test/s/^/#/ 将搜索包含短语 test 的行,并通过用符号 # 替换正则表达式锚 ^(行首)将它们注释掉。
您还可以通过将搜索动作 /pattern 或 ?pattern 作为范围传递来做一些很酷的事情:
-
:?test?move . 向后搜索包含 test 的行,并将其移动到文件中的当前位置
-
:/test/copy . 向前搜索包含 test 的行,并将其复制到文件中的当前位置
祝你好运,愉快地学习 Vim!