我想用一个命令用**包围一定数量的单词,而不使用替换(%s...)。例如,我想用一个命令将foo bar baz转换为**foo bar baz**。我只想替换光标所在的引用。我知道插件“surround”(正在测试),但我想确保没有本地方法可以做到这一点。我也可以这样做:
**
%s...
foo bar baz
**foo bar baz**
:%s/foo bar baz/**%**
但我想知道以下操作是否可以通过一个命令快速完成:1.将光标放在第一个单词的开头1.插入**1.转到第三个单词的结尾1.插入**谢谢
rdrgkggo1#
首先,这行不通:
因为%在这里只是一个文字%。您可以使用:help s/\&或:help s/\0重复使用整个匹配:
%
:help s/\&
:help s/\0
:%s/foo bar baz/**&** :%s/foo bar baz/**\0**
而且因为它可以在其他地方执行替换,这不是你想要的。用其他文本包围一些任意文本的规范方法是:1.改变文本,1.插入周围文本的前半部分,1.插入原始文本,1.插入周围文本的后半部分,1.离开插入模式。在这种情况下,没有内置的运动来覆盖您想要包围的文本,它看起来像这样:
v{motion}c**<C-r>"**<Esc>
首先选择foo bar baz,然后围绕它。在其他情况下,当存在拟合运动时,不需要视觉选择:
c{motion}**<C-r>"**<Esc>
请参见:help c、:help i_ctrl-r和:help registers。如果你好奇,我已经把a list of native ways to do what Surround does放在一起了。“用文本包围”在没有Surround的情况下也是可行的,但是复杂性和脆弱性迅速增长,即使没有进入更复杂的场景。说真的,就用环绕吧。
:help c
:help i_ctrl-r
:help registers
1条答案
按热度按时间rdrgkggo1#
首先,这行不通:
因为
%
在这里只是一个文字%
。您可以使用:help s/\&
或:help s/\0
重复使用整个匹配:而且因为它可以在其他地方执行替换,这不是你想要的。
用其他文本包围一些任意文本的规范方法是:
1.改变文本,
1.插入周围文本的前半部分,
1.插入原始文本,
1.插入周围文本的后半部分,
1.离开插入模式。
在这种情况下,没有内置的运动来覆盖您想要包围的文本,它看起来像这样:
首先选择
foo bar baz
,然后围绕它。在其他情况下,当存在拟合运动时,不需要视觉选择:
请参见
:help c
、:help i_ctrl-r
和:help registers
。如果你好奇,我已经把a list of native ways to do what Surround does放在一起了。“用文本包围”在没有Surround的情况下也是可行的,但是复杂性和脆弱性迅速增长,即使没有进入更复杂的场景。
说真的,就用环绕吧。