如果我输入@Value
,vim会搜索第五个“某事”。
但是5/something
会将5解释为模式的一部分,并从第5行开始搜索,就好像我输入了execute '5/something'
一样。那很好,但现在:是否有可能以某种方式调用:5/something
以获得execute
行为?我知道我可以在这个特定的例子中重复搜索5次;问题不在于如何获得相同的效果,但通常情况下,如果可以使用5/something
将前缀参数传递给目标命令。
答案 0 :(得分:1)
5/foo
与:5/foo
完全不同。当您使用:execute
时,您可以想象以:
开头的命令。例如execute foo
将成为:foo
。这意味着:5/foo
是一个范围。
通常将范围应用于ex-commands。例如:%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 = command对于范围()|中的i,重复执行| ENDFOR
:h range
:h :execute
:h /
:h @:
:h :for
:h :g
:h q
:h :command
答案 1 :(得分:1)
我认为执行此操作的唯一方法是在:normal
的参数中执行:exe
,并将参数开头的前缀嵌入/连接到:normal
。例如:
:exe 'normal 5/something^M'
其中^M
是文字回车符。 (我知道有16种方法可以输入:
<S-CR>
OS X GUI命令行模式。)再增加8个与上述8相同,但使用 ^ Q 而不是 ^ V 。假设没有重映射,并且在类似Unix的CLI中使用stty -ixon来允许 ^ Q 通过。十六进制字母不区分大小写。)您也可以
:exe 'normal 5/something'.nr2char(13)
现在,如果您想依赖于交互计数,比如说,从映射调用中继承,那么您可以将v:count1
连接为前缀:
nnoremap \t1 :<C-u>exe 'normal '.v:count1.'/something'.nr2char(13)<CR>
功能相同的替代方案:
nnoremap \t1 :<C-u>exe 'normal <C-r>=v:count1<CR>/something'.nr2char(13)<CR>
现在输入 \ t 1 将向前搜索第一次出现的something
和 5 \ t 1 将向前搜索something
的第五次出现。