Vim 脚本 :execute command passing numeric prefix

标签 vim

如果我输入 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/

相关文章:

vim - 如何在 Vim 中写入连续命名的文件?

Vimrc 冲突导致加载时出现垃圾

vim - 搜索和替换相同的视觉区域

vim - 有没有办法在 VIM 中映射键范围?

vim - 当文件中有折叠时,gvim自动显示折叠列

vim - 如何在 gVim 中正确使用 vim.eval()?

linux - 退出 Vim 外部命令行 Shell

vim - 如何在 vim 或 emacs 等编辑器中的 Web 浏览器(例如 Firefox)中打开文件?

Vim:用制表符缩进,用空格对齐

xcode - 使用 XVim 插件将 jj 映射到 <esc>