如何在 Vim 中禁用“按 ENTER 或键入命令继续”提示符?

有没有办法禁用执行外部命令后出现的“按 ENTER 或键入命令继续”提示符?

编辑: 找到一个变通方法: 在 my.lvimrc 中向快捷方式添加额外的 <CR>

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

有更好的主意吗?

78817 次浏览

我不知道如何在全球范围内实现这一点,尽管只有一个命令:

:silent !<command>

确保在 silent之后包含一个空格

:help hit-enter

发现了一个变通方法: 添加额外的 <CR> 到地图指令。

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

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

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

使用它而不是常规的无声命令:

:Silent top

在屏幕清除之前重新绘制也可以工作。 以下是我所拥有的:

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

但这不会触发提示:

exe 'ls'
redraw
exe 'b4'

这可能是 Vimrc文件中的语法错误

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

:set cmdheight=2

更多信息 给你

Anthony 给出的答案把我带到了正确的位置,我能够配置 gvim,使它不会在许多消息上停止。
我将 set shortmess=aoOtI添加到 gvimrc 文件中。
:help shortmess提供的帮助页面中对此进行了解释。
字母表示您不希望看到的消息类,或者希望 vim 截断以避免 按回车键停止。
之前我在 gvimrc 中用 columns=130设置了一个宽的初始窗口,所以很少有消息会溢出它,并且需要烦人的、令人疲惫的、需要按回车键的操作。

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

命令行

:exe ":!<command>" | redraw

脚本/函数

exe ':!<command>'
redraw

使用 <expr>进行映射

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

使用调用函数的 <expr>进行映射

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

你可使用:

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

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

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

 argdo %s/something/Something/eg|update

我不得不一直按下页面。

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

:set nomore
  • 如果您正在使用键映射,那么在命令的末尾添加几个键映射可以使您的生活变得更加轻松——但通常2次就足够了。
  • 但是如果从 vim 命令行执行命令。那就有点棘手了。您可以在实际命令之前添加关键字 silent。它会在命令执行后自动将您带回到 vim 窗口。但是您仍然需要手动执行 redraw,因为有些窗口(如 NERD _ Tree)需要重新绘制。

    • 对于这种情况,请遵循 vim 帮助文档中的说明:

      要减少输入命中提示的次数:

      • 将“ cmdheight”设置为2或更高。
      • 给“短小”添加标志。
      • 重置“ showcmd”和/或“标尺”。
    • 这个链接 提供了另一种解决方法

      command! -nargs=1 Silent
      \   execute 'silent !' .
      \ | execute 'redraw!'
      

And then you may use :Silent command like a regular command.

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

打开任何文件后,写入并输入:

:messages

如果有错误,它将提示。

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

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

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

$ locate .vimrc
/root/.vimrc

打开文件 $ vi .vimrc

将此附加到文件末尾:

set directory=.,$TEMP

:wq保存并关闭

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

$ . /etc/profile

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

在我这边的解决方案是 在命令链中更频繁地使用 silent

特别是在此之前,.vimrc有:

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

改为:

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

以前,“按回车”并不总是出现,但经常令人恼火。额外的 silent修复了这个问题。(看起来 redraw!上不需要 silent,因为 :cc导致了“按 ENTER”消息。)

这种改变的缺点是不再显示 :cc的输出, 所以你必须猜出错误所在。 稍微调整一下修正了这个问题:

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

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

仅供参考:

这种 M映射的动机是按下 Normal-Mode 的 M键:

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

我的 Makefile通常是这样构造的,这只需要一秒钟的一小部分。

稍作调整,这也可以应用于非 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#

(E错误,Warnings,Info,基于 vim魔术)

示例如何将其用于 Python 脚本 。 (对不起,这里没有副本,这是另一个故事。)

gvim上,如果你已经设置了 guioptions+=!(在 guioptions中增加了 !) ,这是因为。这个选项(!)使 gvim在外部终端上执行一些命令(这些终端支持更多的特性,比如颜色等等)。

您可以尝试使用 :set guioptions-=i,看看这是否为您工作。

我的案件(一个自动命令) set shortmess+=F做了技巧。

校对: h Shormisse
在编辑文件时,如 :silent,不要给出文件信息

您可以写2行以下到您的 vimrc禁用来自 vim 的所有消息

set shortmess=
set cmdheight=2

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