【问题标题】:How do I disable the "Press ENTER or type command to continue" prompt in Vim?如何在 Vim 中禁用“按 ENTER 或键入命令继续”提示?
【发布时间】:2009-05-20 23:52:15
【问题描述】:

有什么方法可以禁用执行外部命令后出现的“按回车键或键入命令继续”提示?

编辑:找到解决方法:在我的 .lvimrc 中的快捷方式中添加一个额外的 <CR>

map <F5> :wall!<CR>:!sbcl --load foo.cl<CR><CR>

有更好的想法吗?

【问题讨论】:

  • 在 Windows 7 上,您经常会收到此提示,因为已打印“无法打开交换文件”错误但您没有看到它们,这会导致提示。解决方案是将set dir=$TEMP 放入您的vimrc 中。这告诉 vim 为其临时文件使用正确的临时文件夹。这反过来又修复了错误并删除了“按 Enter”提示。

标签: vim


【解决方案1】:

我不确定如何在全局范围内执行一个命令:

:silent !<command>

一定要在silent后面加一个空格

【讨论】:

  • 不幸的是,它对我没有多大帮助,它弄乱了屏幕,我必须按 Ctrl-L... 这比按空格键更烦人。
  • 为我的 grep 脚本工作!
  • 按照下面的评论者(谁建议在命令末尾添加额外的),在使用静默时,可以添加额外的,这样就不用按了手动。那么,与屏幕配合得很好。
  • 只需使用 :silent !command,然后 :redraw!之后 - 我认为它不会自动执行此操作,因为脚本可能会对您想要停留的屏幕做一些事情,例如,时钟或其他状态监控......只是猜测
  • 是的.. 它也把我的屏幕弄乱了。 :redraw! 选项解决了它。双 &lt;cr&gt; 可能是相似的。并且不那么复杂
【解决方案2】:

找到一种解决方法:添加一个额外的&lt;CR&gt; 到地图命令。

map <F5> :wall!<CR>:!sbcl --load foo.cl<CR><CR>

【讨论】:

  • 永远不会想到这一点。绝对精彩!
  • 是的,在我的命令中添加额外的 也可以解决问题。
  • 非常简单。超级有效!
【解决方案3】:
:help hit-enter

【讨论】:

  • 我很好奇为什么有人否决了这个答案,因为:help hit-enter 在“Press ENTER...”提示符下提供了一些相当有用的背景信息。需要解释一下吗?
  • 来自 ':help hit-enter' 的哪些信息回答了这个问题?我找不到它。
  • 您可能会在使用 shell 之前从 write all 命令中获得“Press ENTER”提示。 hit-enter 链接到的 shortmess 下的信息在这种情况下是有效的。但是,您得到的提示是炮击,因此 Wergan 的建议是正确的。如 :help :silent 中所述,“当将它用于外部命令时,这可能会导致屏幕混乱。使用 |CTRL-L| 来清理它”。您可以在命令中添加 :redraw 或 Ctrl-L 来解决此问题。或者只做你已经在做的两个回报。
  • 对我来说,它是关于set hl (:highlight) 我错误地用作hlsearch 的快捷方式,而真正的快捷方式是hls。一个s 很重要:)
  • @JohanKotlinski set nomore
【解决方案4】:

在我的 vimrc (:e $MYVIMRC) 中将cmdheight 设置为 2:

:set cmdheight=2

更多信息here

【讨论】:

  • 这非常适合非常长的搜索查询
【解决方案5】:

这就是我处理在文本模式 vim 中通过静默运行外部程序会弄乱屏幕的问题的方法(根据我的经验,gvim 不会遇到这个问题):

command! -nargs=1 Silent
\ | execute ':silent !'.<q-args>
\ | execute ':redraw!'

使用它代替常规的静默命令:

:Silent top

【讨论】:

    【解决方案6】:

    可能是vimrc文件中的语法错误

    【讨论】:

    • 这个。我在我的 .vimrc 文件中使用了set number,然后使用了set syntax。一旦我删除了set syntax,Vim 就不再提示我了。
    • @piperchester 这个成功了!尝试了很多建议,只有这个有效。谢谢:)
    • 我更新了vim,问题解决了。但我认为人们可以输入:message 来找出问题所在。
    • 是的。我有线set syntax。将其替换为 set syntax=on 即可解决问题。
    【解决方案7】:

    这就是我在不使用“按 ENTER”的情况下在棘手的情况下运行外部命令的方式。与:silent不同,我仍然可以看到命令输出。

    命令行

    :exe ":!<command>" | redraw
    

    脚本/函数

    exe ':!<command>' 
    redraw
    

    &lt;expr&gt;的映射

    map <expr> <F5> ":exe ':!<command>'\n:redraw\<CR>"
    

    与调用函数的&lt;expr&gt; 进行映射

    map <expr> <F5> MyFoo()
    fu! MyFoo()
        return ":exe ':!<command>' | redraw\<CR>"
    endf
    

    【讨论】:

    • 这是否可以以任何方式重复使用?当我按 F5 时,它只会调用一个字符串 &lt;command&gt;
    • &lt;command&gt; 旨在替换为实际的外部命令,例如map &lt;expr&gt; &lt;F5&gt; ":exe ':!gdb'\n:redraw\&lt;CR&gt;"
    • 我一直在寻找这个。对我来说最好的解决方案!谢谢。
    【解决方案8】:

    anthony 的回答把我带到了正确的地方,我能够配置 gvim 不要停止在很多消息上。
    我将 set shortmess=aoOtI 添加到我的 gvimrc 文件中。
    :help shortmess为您带来的帮助页面中对此进行了说明。
    这些字母表示您不想看到的消息类别,或者希望 vim 截断以避免 按 enter 停止。
    我之前通过在 gvimrc 中使用columns=130 设置一个宽的初始窗口来管理它,所以很少有消息会溢出它并且需要烦人的、令人筋疲力尽的、需要按 Enter 键。

    【讨论】:

      【解决方案9】:

      你可以使用:

      call feedkeys(" ")
      

      例如:

      function! Interactive_Questions()
          echo "Question 1:"
          let response1 = getchar()
          echo "Question 2:"
          let response2 = getchar()
      
          " Do something
      
          " Without the next line, you would have to hit ENTER,
          " even if what is written (the questions) has no interest:
          call feedkeys(" ")
      endf
      

      【讨论】:

      • 感谢您的回答!与列出的许多其他答案不同,对我的个人案例来说快速、简单且实际有效。
      【解决方案10】:

      我的情况(自动命令)set shortmess+=F 成功了。

      :h 短消息
      F 编辑文件时不提供文件信息,如:silent

      【讨论】:

        【解决方案11】:

        在屏幕清除之前进行重绘也可以。 这是我所拥有的:

        exe 'ls'  
        exe 'b4'  "This redraws, so the Prompt is triggered
        

        但这不会触发提示:

        exe 'ls'  
        redraw  
        exe 'b4'
        

        【讨论】:

        • 这对我很有帮助,因为我只是以编程方式摆脱函数内某个位置的提示。只需发出redraw 即可解决。另一个解决方案不适合,因为我想在原始消息和提示消失之间接受用户输入。
        【解决方案12】:

        我有类似的问题,但是当我运行 argdo 来替换多个文件中的相同字符串时,例如,

         argdo %s/something/Something/eg|update
        

        我一直不得不向下按页面。

        您可以在运行脚本之前设置以下选项,以便只有最终提示而不是许多提示

        :set nomore
        

        【讨论】:

        • 这就是答案::set nomore,糟糕的舔它仍然在最后。它也在@anthony 的:h help hit-enter
        【解决方案13】:
        • 如果您使用的是键映射,那么您可以通过在命令末尾再添加几个来使您的生活更轻松——但通常 2 次就足够了。
        • 但是如果你从 vim 命令行执行命令。然后有点棘手。您可以在实际命令之前添加关键字silent。执行完命令后,它会自动带你回到 vim 窗口。但是你仍然需要手动执行redraw,因为像NERD_Tree这样的一些窗口需要重绘。

          • 对于这种情况,请尝试按照 vim 帮助文档中的说明进行操作:

            减少hit-enter提示的数量:

            • 将 'cmdheight' 设置为 2 或更高。
            • 为“shortmess”添加标志。
            • 重置“showcmd”和/或“标尺”。
          • This link 提供了另一种出路。把它放到你的 vimrc 文件中

            命令! -nargs=1 静音 \执行“静音!” . \ |执行“重绘!”

        然后你可以像普通命令一样使用:Silent command

        【讨论】:

          【解决方案14】:

          我这边的解决方案是to use silent more frequently in a command chain

          特别是之前,.vimrc 有:

          nnoremap M :silent make\|redraw!\|cc<CR>
          

          改为:

          nnoremap M :silent make\|silent redraw!\|silent cc<CR>
          

          以前,“Press ENTER”并不总是出现,但很烦人。额外的silents 解决了这个问题。 (看起来redraw! 上不需要silent,因为:cc 导致了“Press ENTER”消息。)

          此更改的缺点是不再显示:cc 的输出, 所以你必须猜测错误是什么。 little tweak 解决了这个问题:

          nnoremap M :silent make\|redraw!\|cw\|silent cc<CR>
          

          这会自动生成错误 QuickFix 列表(make 的输出) 出现(并且,通过 vim-magic,如果没有错误,则消失)。

          仅供参考:

          这个M-mapping的动机是在正常模式下按M

          • 保存编辑(使用make 时,一切都在git-control 之下)
          • 调用make
          • 并直接跳转到第一个错误或警告

          我的Makefiles 通常是这样构造的,只需要几分之一秒。

          稍作调整,这也可以应用于非C 类型的工作负载:

          .vimrc添加

          set efm+=#%t#%f#%l#%c#%m#
          

          这允许vim 解释:cc 的以下消息(显示错误):

          #E#file#line#column#message#
          #W#file#line#column#message#
          #I#file#line#column#message#
          

          Errors、Warnings、Info,基于vim魔法)

          Example how to use this for Python scripts。 (对不起,这里没有副本,这是一个不同的故事。)

          【讨论】:

            【解决方案15】:

            如果您的错误是由 E303 引起的,那么.vimrc 文件中创建一个临时目录可能会修复它。

            打开任意文件后,写回车:

            :messages
            

            如果有错误会提示。

            如果您看到 E303 (Error303)“无法打开“{filename}”的交换文件,无法恢复”,这可能表示有旧尝试恢复交换文件(很可能丢失或不存在)在系统中。

            要解决此问题,.vimrc 文件中分配一个临时目录。

            要查找.vimrc 文件的位置,请键入并输入:

            $ locate .vimrc
            /root/.vimrc
            

            打开文件$ vi .vimrc

            将此附加到文件末尾:

            set directory=.,$TEMP
            

            使用:wq保存并关闭

            最后,重新加载配置文件:

            $ . /etc/profile
            

            尝试使用 VI 打开任何文件。问题将得到解决。

            【讨论】:

              【解决方案16】:

              如果我将文件保存在我没有对该目录的写入权限的目录中,就会发生这种情况。我在目录上执行了 chmod 777(我已经对文件本身具有写权限)并且不再显示“按 ENTER”消息。

              【讨论】:

                【解决方案17】:

                gvim 上,如果你设置了guioptions+=!(在guioptions 中添加了!),就是因为这个。此选项 (!) 使gvim 在外部终端上执行一些命令(支持更多功能,如颜色等)。

                您可以使用:set guioptions-=i 尝试一下,看看这是否适合您。

                【讨论】:

                  【解决方案18】:

                  你可以在vimrc下面写两行来禁用来自vim的所有消息

                  set shortmess=
                  set cmdheight=2
                  

                  这对我有用,希望你能解决问题

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2014-03-17
                    • 1970-01-01
                    • 2012-11-15
                    • 2022-11-02
                    • 1970-01-01
                    • 2020-03-14
                    • 2012-06-26
                    相关资源
                    最近更新 更多