Emacs文本在迷你缓冲区中卡住了。

5

我正在使用GNU Emacs 24.4.1版本(也可能是24.5.1),在minibuffer中出现了一些旧的vc-mode输出(我认为是这个原因):

Auto-merging foo/bar

目前我没有进行任何版本控制操作,但是这段文字被困在了迷你缓冲区中。按下C-g键会把它短暂替换为"Quit",但在下一次按键时它又会出现。

它不是递归编辑。C-]或abort-recursive-edit会显示错误信息No recursive edit is in progress,而且迷你缓冲区中尴尬的文本仍然存在。

它不是用鼠标选择的文本,因为我正在文本控制台中运行(通过ssh连接GNU screen),没有鼠标支持。

我尝试过从 http://www.emacswiki.org/emacs/MiniBuffer 使用switch-to-minibuffer命令,但会显示错误信息Minibuffer is not active。然而,这个尴尬的文本仍然会出现。

这不是屏幕尺寸的问题(由于Emacs不知道终端窗口的正确大小,导致文本过期),因为我可以调整终端窗口的大小,Emacs也会正确调整大小...但迷你缓冲区中的文本仍显示出来。

有时我会在迷你缓冲区中看到两行或更多的文本。实际上,我的当前Emacs会话在一个客户端(emacsclient -nw)和一个屏幕中显示了几行版本控制文本。

Auto-merging foo/bar
CONFLICT (content): Merge conflict in foo/bar

我该如何让它消失?

假设:即使您移动光标、输入文本等操作,文本似乎仍然存在。该文本是否显示在“Messages”缓冲区中?您是否尝试过“M-: (message nil)”?看看它是否可以清除它? - Trey Jackson
谢谢 - 下次出现这种情况我会尝试你建议的方法。奇怪的是自从升级到emacs 24.5.1以后就没有再发生过了... - Ed Avis
1
不,这段文本不会显示在“Messages”中。它是“Shell Command Output”的一个片段,卡在了迷你缓冲区中。执行“M-: (message nil)”会在迷你缓冲区中打印出“nil”,但然后它又回到了显示shell输出的片段。 - Ed Avis
2
我发现清除它的方法是 M-! echo - Ed Avis
谢谢!你的评论起作用了。这在过去让我疯狂了。 - kcraigie
1
实际上,在执行这个操作后,我的Shell命令输出窗口卡住了。这篇帖子提供了一个完整的解决方案,对我很有用:http://emacs.1067599.n8.nabble.com/bug-25209-25-1-can-t-delete-Shell-Command-Output-tp415873p416155.html - kcraigie
1个回答

3
如果您按下C-g以终止正在运行的shell命令,则可能会发生这种情况。这将使minibuffer窗口指向*Shell Command Output*缓冲区。
错误#25209所述,您可以在scratch缓冲区中调用(minibuffer-window)来检查是否发生了这种情况:
(minibuffer-window)
#<window 2 on *Shell Command Output*>

并使用以下方式进行修复:

(set-window-buffer (minibuffer-window) (get-buffer " *Minibuf-0*"))

这个问题已经在这次提交中得到了修复,并且修复已经作为Emacs 26.1的一部分发布了。

谢谢,那很可能就是它(或者一个相关的错误)。正如你所说,它在最近的Emacs版本中似乎已经修复了。 - Ed Avis
我在 Emacs 28.1 中遇到这个问题。你的解决方案确实修复了这个问题。 - mihai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接