我发现很少有Stack Overflow问题在谈论这个问题,但是它们都只涉及:nmap
或:noremap
命令。
我想要一个命令,而不仅仅是键绑定。有什么办法可以做到这一点?
用例:
运行:make
时,不会自动保存。因此,我想结合使用:make
和:w
。我想创建一个命令:Compile
/ :C
或:Wmake
来实现这一目标。
答案 0 :(得分:5)
有关通过|
连接Ex命令的一般信息,可以在:help cmdline-lines
上找到。
您可以将其应用于交互式命令,映射以及自定义命令中。
请注意,您只需要在映射中使用特殊的<bar>
(以避免过早得出映射定义并立即执行其余的操作,这是一个常见的初学者错误::nnoremap <F1> :write | echo "This causes an error during Vim startup!"<CR>
)。对于自定义命令,您只需编写|
,但请记住哪些命令本身会将其视为其参数。
:help line-continuation
将有助于处理过长的命令定义。将多个命令移至单独的:help :function
也会有所帮助(但请注意,这会巧妙地改变错误处理)。
如果要传递自定义命令行参数,可以将-nargs=*
添加到:command
定义中,然后通过<args>
在右侧指定插入点。例如,要允许您的:write
命令使用命令,可以使用
:command -nargs=* C w <args> | silent make | redraw!
答案 1 :(得分:4)
您可以将命令与|
结合使用,请参见:bar
的帮助:
command! C update | silent make | redraw!
但是,有一种更清洁的方法来实现您想要的。
只需启用'autowrite'
选项即可自动写入
:make
之前修改的文件:
'autowrite' 'aw' 'noautowrite' 'noaw'
'autowrite' 'aw' boolean (default off)
global
Write the contents of the file, if it has been modified, on each
:next, :rewind, :last, :first, :previous, :stop, :suspend, :tag, :!,
:make, CTRL-] and CTRL-^ command; and when a :buffer, CTRL-O, CTRL-I,
'{A-Z0-9}, or `{A-Z0-9} command takes one to another file.
Note that for some commands the 'autowrite' option is not used, see
'autowriteall' for that.
:make
的帮助中提到了此选项。
答案 2 :(得分:2)
经过反复试验,我找到了解决方案。
command C w <bar> silent make <bar> redraw!
这是使用make进行编译的,并且仅当输出为非零时才打印输出。
command COMMAND_NAME COMMAND_TO_RUN
在COMMAND_TO_RUN
可以使用以下命令使用多个命令构造的地方。
COMMAND_1_THAN_2 = COMMAND_1 <bar> COMMAND_2
您可以多次使用它,它与Shell中的管道非常相似。