我如何在Vim中将行中的文本添加到多行?
假设我有十行,而且我希望在文本中添加文字,以便在这些行中发生某些词语? 它不一定在行的开头。
从:
sdfsd foo sdfsd
sfsd foo fsdf
sdfsdf foo sdfsdf
至:
sdfsd bar(foo sdfsd
sfsd bar(foo fsdf
sdfsdf bar(foo sdfsdf
是否有可能不仅要加上bar(
但实际上用bar(foo)
包围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[az][az]
),上面的方法就行得通了。 上面的'&'代表您已经匹配的内容。
要为一组行加前缀,我使用两种不同的方法之一:
一种方法是块选择(由sth提到)。 一般来说,你可以用ctrl-V选择一个矩形区域,然后用光标移动。 一旦突出显示了一个矩形,按shift-I将在矩形的左侧插入字符,或者shift-A将它们附加到矩形的右侧。 因此,您可以使用这种技术制作一个矩形,其中包含要作为前缀的行的最左侧列,按Shift-I键,输入前缀,然后点击转义。
另一种方法是使用替代(如Brian Agnew所述)。 Brian的替换会影响整个文件(命令中的%表示“所有行”)。 为了影响几行,最简单的方法是在第一行/最后一行上移动shift-V(启用视觉模式),然后移动到最后/第一行。 然后键入:
:s/^/YOUR PREFIX/
^是一个正则表达式(在这种情况下,该行的开头)。 通过在视觉线条模式下输入,你会在s之前自动插入'<,'>。 这意味着替代的范围将是视觉选择。
额外提示:如果您的前缀包含斜杠,则可以使用反斜杠将其转义,或者可以使用不同的标点符号作为命令中的分隔符。 例如,要添加C ++行注释,我通常会写:
:s:^:// :
为了添加后缀,替换方法通常更容易,除非您的所有行的长度完全相同。 只需使用$作为模式而不是^,并且您的字符串将被添加而不是预先添加。
如果你想同时添加一个前缀和一个后缀,你可以这样做:
:s/.*/PREFIX & SUFFIX/
*匹配整行。 替换中的&会将匹配的文本(整行)放回,但现在它会添加您的前缀和后缀。
顺便说一句:在注释代码时,您可能会稍后取消注释。 你可以使用visual-block(ctrl-V)来选择斜线,然后按d来删除它们,或者你可以使用一个替换(可能是用shift-V进行视觉选择)来删除这样的斜杠:
:s:// ::
链接地址: http://www.djcxy.com/p/49435.html
上一篇: How can I prepend text in the middle of the line to multiple lines in Vim?