Vim将临时信息写为:write

时间:2014-09-10 16:01:32

标签: vim

我有一个宏调用我在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命令。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

将外部命令输出写入临时文件

通过Vimscript函数

首先,在变量中捕获外部命令的输出,然后可以通过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()执行命令,则还会返回错误消息,并且可以在通知中包含该错误消息。