【问题标题】:In Emacs, how do I select the completion list with the keyboard?在 Emacs 中,如何使用键盘选择完成列表?
【发布时间】:2013-08-07 16:30:07
【问题描述】:

当我在 minibuffer 中 tab-complete 并且 Emacs 在新缓冲区中显示完成列表时,如何在不使用鼠标的情况下切换到该缓冲区?

我尝试了C-x o,但只是切换到第一个缓冲区,然后我进入了迷你缓冲区。

我也尝试了C-x b,但这给了我command attempted to use minibuffer while in minibuffer

最后我尝试了C-x <C-right>,它给了我cannot switch buffers in minibuffer window

编辑:我在示例中谈到了 minibuffer 完成,但是能够从常规缓冲区中访问完成列表(使用键盘)对我来说也很重要,而且不起作用。建议使用M-v 快捷方式,但它似乎只在M-x 访问的迷你缓冲区内工作,在我尝试过的所有其他缓冲区中,M-v 绑定到scroll down command 并且不会切换到完成列表。我什至似乎不在其他 minibuffers 中工作。例如,它在 M-! 调用的 shell 命令 minibuffer 中也不起作用。

【问题讨论】:

  • 在下面对我的答案的编辑中查看我的建议。

标签: emacs autocomplete minibuffer


【解决方案1】:

您可以使用 M-v(记录在 here)切换到完成缓冲区并将光标放在第一个完成上:

在 minibuffer 中键入 M-v,选择显示 完成列表(切换到完成)。这为使用铺平了道路 下面的命令。 <PageUp><prior> 也是如此。你也可以 以其他方式选择窗口...

编辑:根据您对原始问题的编辑,您要求的是一种更全局地切换到完成缓冲区的方法。有一个函数 switch-to-completions 可以选择完成列表 - 您可以考虑将该函数绑定到您选择的键,例如:

(define-key global-map (kbd "C-x t") 'switch-to-completions)

例如,这样的绑定允许我从 M-! 调用的“Shell 命令:”切换到完成,并将光标放在第一个可能的完成上。

【讨论】:

  • 奇怪的是,这似乎对我不起作用。 (顺便说一句,我使用的是 Emacs v24.2.1。)当我在 minibuffer 中按 M-v 时,它只会显示 Beginning of buffer 并且没有选择完成列表。
  • 奇数。按下PageUp 怎么样?应该也可以(在我的Mac 上是fn-Up)。您可以尝试在不读取初始化文件的情况下重新启动 Emacs,即 emacs -q
  • 您可能将M-v 绑定到其他函数。
  • 当我使用 M-x 进入 minibuffer 时它可以工作,但是当我尝试从 M-! 等其他 minibuffer 或任何“正常”缓冲区访问完成列表时它不起作用。跨度>
【解决方案2】:

你可以使用两次Cxo,或者使用M--Cxo kbd>,它切换到上一个缓冲区而不是下一个缓冲区。

【讨论】:

  • C-x o 两次不起作用,因为第一个命令关闭了完成列表。但是,对缓冲区切换命令应用否定参数确实效果很好。不过我会使用C-- C-x o。此外,它不会在第一次完成时插入光标,而是在缓冲区的开头插入,这很糟糕,因为我必须一直向下移动。这真的是人们使用补全的方式吗?
  • 错误:不,我怀疑很少有人真正直接与完成缓冲区交互。通常的方法是通过在 minibuffer 中键入和TABing 来继续过滤选项,直到获得唯一的结果,完成缓冲区仅用作视觉参考。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 2021-02-06
  • 2012-10-09
  • 1970-01-01
相关资源
最近更新 更多