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


102

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

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

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

还有更好的主意吗?


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

Answers:


76

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

:silent !<command>

请务必在后面加上空格 silent


3
不幸的是,这对我不是很有帮助,它使屏幕混乱,我必须按Ctrl-L ...比按空格更令人讨厌。
2009年

1
虽然为我的grep脚本工作!
Mikko Rantanen

5
与下面的注释者(建议在命令末尾添加额外的<CR>)一致,使用无声时,您可以添加额外的<Cl>,因此您不必手动按下它。然后,可以很好地与屏幕配合使用。
Victor Farazdagi 2011年

4
只需使用:silent!command,然后:redraw!之后-我认为它不会自动执行此操作,因为脚本可能会对您想要停留的屏幕产生影响,例如时钟或其他一些状态监视对象……只是个猜测
osirisgothra 2014年

2
是的..它也为我弄乱了屏幕。该:redraw!选项解决了。双重<cr>可能是相似的。且不太复杂
alpha_989 '18


28
:help hit-enter

1
我很好奇为什么有人否决了这个答案,因为:help hit-enter在“ Press ENTER ...”提示下提供了一些相当有用的背景信息。介意解释吗?
cjs

38
':help hit-enter'的哪些信息回答了这个问题?我找不到
约翰·科特林斯基

1
在进行脱壳之前,可能会从write all命令中获得“ Press ENTER”提示。在这种情况下,<code>命中输入</ code>链接到的<code> shortmess </ code>下的信息有效。但是,您得到的提示是炮击,因此Wergan的建议是正确的。如<code>:help:silent </ code>中所述,“将其用于外部命令时,可能会导致屏幕混乱。请使用| CTRL-L |进行清理”。您可以在命令中添加:redraw或Ctrl-L来修复该问题。或者只是做您已经在做的两个退货。
出色的编译器,2009年

对我来说,这是关于set hl:highlight)我错误地用作hlsearch谁的真正捷径是的捷径hls。一s件事:)

1
@JohanKotlinskiset nomore
Tinmarino


18

这是我处理通过静默运行外部程序使文本模式vim的屏幕混乱的问题(以我的经验,gvim不会遇到此问题):

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

使用它代替常规的无声命令:

:Silent top

13

vimrc文件中可能是语法错误


5
这个。我使用过set number,然后set syntax在.vimrc文件中下面的位置。删除set syntaxVim后,它不再提示我。
piperchester

1
@piperchester 行得通!尝试了吨的建议,只有这个有效。谢谢:)
保罗·埃文斯

我更新了vim,问题解决了。但是我认为人们可以打字:message以找出问题所在。
NanoNova

是的 我已接听电话set syntax。替换为,即可set syntax=on解决问题。
McSuperbX1

7

安东尼的回答将我带到了正确的位置,我能够配置gvim使其不停止很多消息。
shortmess=aoOtI在我的gvimrc文件中添加了set 。
在带来的帮助页面中对此进行了说明:help shortmess
字母表示您不希望看到的消息类别,或者希望vim截断以避免点击回车停止。
之前,我通过columns=130在gvimrc中设置一个宽的初始窗口来进行管理,因此很少有消息会溢出它,并且需要烦人,疲惫和需要按Enter键。


6

这就是我在棘手的情况下无需单击“ 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

这可以以任何方式重用吗?当我按F5键时,它仅调用一个字符串<command>
ashrasmun

1
<command>被替换为实际的外部命令,例如map <expr> <F5> ":exe ':!gdb'\n:redraw\<CR>"
svlasov

4

您可以使用:

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

感谢您的回答!与我列出的许多其他答案不同,此方法对我的个人案例而言快速,简便且实际上有效。
6

3

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

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

但这不会触发提示:

exe 'ls'  
redraw  
exe 'b4'

这对我有所帮助,因为我只是以编程方式摆脱了函数内某个位置的提示。只是发出redraw解决它。另一个解决方案不合适,因为我想在原始消息和提示消失之间接受用户输入。
丹尼尔·安德森

1

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

 argdo %s/something/Something/eg|update

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

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

:set nomore

那就是答案::set nomore,舔得还没结束。它也位于:h help hit-enter@anthony
Tinmarino

1

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

:h shortmess
F在编辑文件时不提供文件信息,例如:silent


0

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


0
  • 如果您正在使用键映射,则可以通过在命令末尾添加多个键映射来简化工作-但通常2次就足够了。
  • 但是,如果要从vim命令行执行命令。然后有点棘手。您可以silent在实际命令之前添加关键字。执行命令后,它将自动带您回到vim窗口。但是您仍然需要手动执行,redraw因为某些窗口(如NERD_Tree)需要重绘。

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

      要减少点击提示的数量:

      • 将“ cmdheight”设置为2或更高。
      • 将标记添加到“ shortmess”。
      • 重置“ showcmd”和/或“统治者”。
    • 该链接提供了另一种出路。将此放入您的vimrc文件

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

然后,您可以:Silent command像常规命令一样使用。


0

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

具体来说之前.vimrc有:

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

更改为:

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

以前,“ Press ENTER”并不总是显示出来,但经常会令人讨厌。其他silents解决了此问题。(看起来好像silent不需要,redraw!因为出现:cc了“ Press ENTER”消息。)

此更改的缺点是不再显示的输出:cc,因此您必须猜测出什么错误。一个小调整修正了这个:

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

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

仅供参考:

进行此M映射的动机是只需M在正常模式下按以下操作:

  • 保存编辑(当使用make所有内容时,都处于git控制之下)
  • 调用 make
  • 并直接跳到第一个错误或警告

My 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#

(错误EW警告,Info,基于vim魔术)

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


0

如果您的错误是由E303引起的,则.vimrc文件中创建临时目录可能会解决该问题。

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

:messages

如果有错误,它将提示。

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

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

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

$ locate .vimrc
/root/.vimrc

开启档案 $ vi .vimrc

将此附加到文件末尾:

set directory=.,$TEMP

保存并关闭 :wq

最后,使用以下命令重新加载配置文件:

$ . /etc/profile

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


0

在上gvim,如果您已设置guioptions+=!!在中添加guioptions),则是因为这一点。此选项(!)使您可以gvim在外部终端上执行一些命令(这​​些命令支持更多功能,例如颜色和许多其他功能)。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.