说我有十行,我想在这些行中出现的某个单词之前加上文字吗?它不必在行的开头。
发件人:
sdfsd foo sdfsd
sfsd foo fsdf
sdfsdf foo sdfsdf
至:
sdfsd bar(foo sdfsd
sfsd bar(foo fsdf
sdfsdf bar(foo sdfsdf
是否还可以不仅在bar(
之前加上foo
实际包围bar(foo)
?
[我也想要一种将//
注释追加到多行(C样式注释)的快速方法。
我使用Vim / GVim 7.2。
转到第一个foo
,按Ctrl-v进入可视块模式,然后向下按直到标记有foo
的所有行。然后按Shift-i插入(块的开头)。完成后,按Esc,插入的字符将被添加到标记块左侧的每一行中。
要插入末尾,再次按Ctrl-v,向上/向下移动以标记所有受影响的行,然后按End或$扩展选择,直到行的结尾。现在,您可以按Shift-a将其添加到所有行的末尾,就像以前使用Shift-<< i一样。
视觉选择也可以使用常规运动命令来完成。因此,要在C语言中注释整个块,可以移至大括号并键入Ctrl
-v % Shift-i / < [/ Esc。:%s/foo/bar(&)/g
将查找foo
,并用bar()
包围匹配的模式。 /g
将在一行中多次执行此操作。
由于您只是匹配foo
,因此您可以执行简单的:s/foo/bar(foo)/g
。但是,如果您决定匹配一个正则表达式而不是一个简单的单词(例如f[a-z][a-z]
),以上内容将起作用。上面的'&'代表您所匹配的内容。
ctrl-V选择一个矩形区域,然后移动光标。突出显示矩形后,按
shift-I将在矩形的左侧插入字符,或者按shift-A将其附加在矩形的右侧。因此,您可以使用此技术制作一个矩形,其中包含要添加前缀的行的最左列,单击shift-I,键入前缀,然后单击转义。
另一种方法是使用替换(如Brian Agnew所提到的)。 Brian的替换将影响整个文件(命令中的%表示“所有行”)。仅影响几行,最简单的方法是在第一行/最后一行时按下shift-V(启用可视行模式),然后移至最后一行/第一行。然后输入::s/^/YOUR PREFIX/
^是一个正则表达式(在这种情况下,是行的开头)。通过在视线模式下键入此命令,您将看到'自动插入到s之前。这意味着替换范围将是视觉选择。
额外提示:如果前缀中包含斜杠,则可以使用反斜杠将其转义,或者可以在命令中使用其他标点符号作为分隔符。例如,要添加C ++行注释,我通常会写:
:s:^:// :
对于添加后缀,除非所有行的长度完全相同,否则替换方法通常更容易。仅将$用作模式而不是^,您的字符串将被附加而不是前置。
如果要同时添加前缀和后缀,则可以执行以下操作:
:s/.*/PREFIX & SUFFIX/
。*匹配整行。替换中的&会将匹配的文本(整行)放回去,但是现在它将添加您的前缀和后缀。
BTW:注释掉代码时,您可能以后想取消注释。您可以使用可视块()选择斜杠,然后按d将其删除,或者您可以使用替换(可能是用ctrl-V
shift-V进行的视线选择) )删除这样的前导斜线:
:s:// ::
:%norm Wibar(
:%norm WEa)
:norm(al)像键入命令一样重播命令:
W-转到下一个单词
i-开始插入模式bar(-输入序列'bar('
或一行:
:%norm Wibar(
ctrl如果您正在运行Windows,则键入ctrlv ESC
Ea)
q
而不是ctrl v。将光标放在顶行的任意位置,然后按
:'a,'b s/foo/bar(&)/
%s/^/<text you want to prepend>/