Vim多链命令,第一个使用范围

时间:2013-08-23 09:38:01

标签: vim

某些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"

2 个答案:

答案 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

使用命令链时需要注意一些陷阱:

    当用于链接多个系统命令时,
  1. |的行为与我上面描述的不同,例如::read !ls | wc
  2. :g:s:map命令一起使用时必须小心,因为它可能无法达到您的预期,例如::%g/foo/p|>:%s/foo/bar/|>:nmap 10\| map \ l
  3. 注意:您也可以像使用<NL>一样使用|(可以使用Ctrl-V Ctrl-J插入,输出^@)。但是,建议不要使用此用法,因为它更符合链接外部命令。

    还请参见:如果您想全面了解命令链在VIM中的工作方式,那么我建议您阅读VIM的手册:bar(:help :bar)并查看在cpoption的b标志(:help cpoption)。