某些Vim函数适用于范围:
:'<,'>TOhtml
第一个命令取一个范围的语法是什么,后一个命令管道结果?
在wiki的评论中,它建议一个允许所有命令运行范围的插件;但在这里我只需要第一个参数来处理范围。
# These are the commands I am attempting to chain
:'<,'>TOhtml
:w! ~/mylink
:q!
# The last two can chain or be one command
:w! ~/mylink | q!
:wq! ~/mylink
# But these fail
:'<,'>TOhtml | wq! ~/mylink
:execute "'<,'>TOhtml" | "wq! ~/mylink"
答案 0 :(得分:3)
使用execute
是可行的方法,但您只需引用:execute
的命令,而不是第二个命令。
即,替换:
:execute "'<,'>TOhtml" | "wq! ~/mylink"
有了这个:
:execute "'<,'>TOhtml" | wq! ~/mylink
答案 1 :(得分:2)
ClothSword,你离我不远了。根据您的VIM设置,有三个表达式可能用于在一行上链接多个命令:|
,\|
和<bar>
,如:
:echom "test 1" | echom "OK"
:echom "test 2" \| echom "OK"
:echom "test 3" <bar> echom "OK"
测试哪一个适合您的方法是运行上述所有三个命令,然后是:messages
。在输出中,您应该看到不起作用的命令的错误消息:无效的exprecion,未定义的变量等...实际的错误消息是无关紧要的。而对于有效的命令,您将看到两行输出,类似于:
test [number]
OK
使用命令链时需要注意一些陷阱:
|
的行为与我上面描述的不同,例如::read !ls | wc
:g
,:s
和:map
命令一起使用时必须小心,因为它可能无法达到您的预期,例如::%g/foo/p|>
,:%s/foo/bar/|>
或:nmap 10\| map \ l
注意:您也可以像使用<NL>
一样使用|
(可以使用Ctrl-V
Ctrl-J
插入,输出^@
)。但是,建议不要使用此用法,因为它更符合链接外部命令。
还请参见:如果您想全面了解命令链在VIM中的工作方式,那么我建议您阅读VIM的手册:bar(:help :bar
)并查看在cpoption的b
标志(:help cpoption
)。