在GVim中运行shell命令而不回显Vim命令

在GVim中运行shell命令而不回显Vim命令,shell,vim,Shell,Vim,当我使用:以运行shell命令,如: !echo hi 它打印VimScript命令及其输出,因此我得到: :!echo hi hi 当我在命令行模式下运行它时,这是正常的,但是当我通过.vim文件运行它时,我不想看到它-我只想看到命令的结果 有没有办法禁用VimScript命令的回显 我知道我可以用 echo system('echo hi') 但这会阻止我在交互式shell程序中使用它 顺便说一句,我使用的是Linux-在windows中这并不是一个真正的问题,因为shell命令无论如

当我使用
以运行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%
运行它。您可以尝试使用
: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
,从调用
:静默调用的函数执行shell命令,读取输出(从寄存器b),过滤出vimscript命令,在屏幕上显示,然后
:redir end

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


如何执行
.vim
文件?@vidit请参阅更新question@IdanArye你在gvim吗?我看不到命令行中输出的命令version@IdanArye听起来您正试图像使用交互式shell一样使用vim。。。如果您要使用很多命令行工具,为什么不在命令行中使用vim呢?您可以运行不同的选项卡、shell、suspend vim,或者使用终端多路复用器测试您的程序,或者运行
git push
。正如一位用户在这里所说,“VIM不是IDE”OK。真正有趣的是,gvim和vim在这方面的行为不同。我想知道gvim是否有一个vim没有的选项集,或者这个选项集是否被编译成了gvim。谢谢,但是这些都不符合我的目的。你是说插件?您是否使用
:redir
尝试了该过程?
:redir
对我没有帮助,因为VimScript命令仍会回显到屏幕上。至于插件——正如我所说,我并没有试图从Vim运行交互式shell。当我真的想要它的时候,我更喜欢,但这不是这里的问题。我指的是我上面描述的完整过程。您的意思是,即使在通过
:silent call
调用的函数中,VimScript命令的输出也会被回显?因为,如果不清楚,如果您创建了一个将内容回显到屏幕的函数,请输入
:redir@b
:silent call MyFunc()
:redir end
屏幕上没有消息,MyFunc()的整个输出都在@b(寄存器b)上。至少这是我在这里看到的——我没有在Linux上测试这个。