我有一个宏调用我在vimrc中定义的函数
:function! DoStuff()
:!mycommand
:end
map <C-p>i :call DoStuff()<CR>
当我按下宏键时,我得到一个带有mycommand输出的shell,它运行正常,但我希望改进它。
我注意到当我写一个文件(:w)时,在命令栏中短时间显示一条短消息,表示&#34;文件X写了#34;,我希望在宏时获得相同的结果按下序列我想检查命令是否正常(检查返回码)然后显示一条消息(如#34; Ok&#34;或&#34; Not Okay&#34;),如:write命令。
有什么想法吗?
答案 0 :(得分:0)
首先,在变量中捕获外部命令的输出,然后可以通过writefile()
将其内容写入(临时)文件。
:let output = system('mycommand')
:call writefile(output, 'path/to/tempfile')
如果您需要对捕获的内容应用任意命令,或者需要Vim来处理不同的文件编码,则必须使用缓冲区:
:new path/to/tempfile
:0read !mycommand
:write
:bdelete
当您需要按原样输出时,这是最简单的方法:
:!mycommand > path/to/tempfile
执行外部命令后,特殊变量v:shell_error
包含最后一个shell命令的退出状态。您可以测试它以向用户报告消息:
!mycommand
if v:shell_error != 0
echohl ErrorMsg
echomsg "The command failed"
echohl None
else
echomsg "The command succeeded"
endif
如果您已使用system()
执行命令,则还会返回错误消息,并且可以在通知中包含该错误消息。