如果我输入 5/something
vim 将搜索第五次出现的“something”。
但是 execute '5/something'
会将 5 解释为模式的一部分,并从第 5 行开始搜索,就像我输入了 :5/something
一样。很好,但现在:是否可以以某种方式调用 execute
以获得 5/something
行为?我知道在这个特定的例子中我可以重复搜索 5 次;问题不在于如何获得相同的效果,而是一般来说,是否可以使用 execute
将前缀参数传递给目标命令。
最佳答案
普通模式与命令行模式
5/foo
与 :5/foo
有很大不同。当您使用:execute
时你可以想象你的命令以 :
开头。例如execute foo
将变成:foo
。这意味着:5/foo
是一个范围。
范围
范围通常应用于 ex 命令。例如:%s/foo/bar
, :'<,'>left
,或:11-35g/foo/normal 3x
。但是,您可以仅执行一个范围,将光标移动到该位置。有些人(比如我)使用 :{line-number}
而不是{line-number}G
跳转到特定行。
范围可以不仅仅包含数字。它们可以进行标记和搜索,并且可以组合。让我们看:5/foo
例如:
-
:5
跳转到第5行 -
/foo
转到包含foo
的下一行
重复前命令
有很多方法:
- 使用
@:
执行最后一个命令行[count]
次。 - 使用循环!例如
for i in range(5) | execute 'foo' | endfor
- 如果您要在线执行,则使用
:g
。例如:g/foo/...
- 使用宏
或者创建自定义命令来帮助您:
命令! -count=1 -nargs=+ -complete=命令 RepeatEexecute for i in range() | |结束更多帮助请参见
:h range
:h :execute
:h /
:h @:
:h :for
:h :g
:h q
:h :command
关于Vim 脚本 :execute command passing numeric prefix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31749230/