0

当我使用:!运行 shell 命令时,例如:

!echo hi

它同时打印 VimScript 命令及其输出,所以我得到:

:!echo hi
hi

当我在命令行模式下执行此操作时,这是可以的,但是当我通过.vim文件运行它时,我不想看到它 - 我只想看到命令的结果。

有没有办法禁用 VimScript 命令的回显?

我知道我可以使用

echo system('echo hi')

但这会阻止我将它与交互式 shell 程序一起使用......

顺便说一句,我使用的是 Linux——在 Windows 中这并不是一个真正的问题,因为无论如何 shell 命令都在新的控制台窗口上运行......

编辑

这是我的小工作示例:

function! RunShellTask(cmd)
    execute '!'.a:cmd
    return v:shell_error
endfunction

call RunShellTask('echo hi')

我运行它:source %

4

1 回答 1

0

你可以试试这个:redir命令:

                     *:redi* *:redir*
:redi[r][!] > {file} Redirect messages to file {file}.  The messages which
                     are the output of commands are written to that file,
                     until redirection ends.  The messages are also still
                     shown on the screen.  When [!] is included, an
                              :
                              :
                     To stop the messages and commands from being echoed to
                     the screen, put the commands in a function and call it
                     with ":silent call Function()".
                     An alternative is to use the 'verbosefile' option,
                     this can be used in combination with ":redir".

我还没有测试过,但你可以尝试:redir @b,从一个名为 with 的函数中执行 shell 命令:silent call,读取输出(来自寄存器 b),过滤掉 vimscript 命令,将其显示在屏幕上,然后:redir end.

另一种选择是尝试一些提供类似功能的插件:

于 2013-07-01T12:08:36.163 回答