如何在minibuffer中输入空格而不是完成单词?

8
我想通过使用Pdired-mode打印。 这适用于我通过lpr-switches设置的默认打印命令,但我经常想编辑命令。 例如,如果P建议lpr,我想添加-o number-up=2。问题在于这个命令在-o后包含一个空格,按空格键会显示No match。如何调整lpr(或其他遇到同样问题的命令)?

更改您的问题标题可能会有所帮助,使具有类似问题的人更容易找到。也许可以使用类似以下的标题:“在迷你缓冲区中输入空格而不是完成单词”。 - Tyler
2个回答

11
在 mini-buffer 中,space 绑定了一个补全命令。如果您想输入实际的空格,您需要用引号括起来:C-q <space>。这对我来说经常发生,所以我将 M-<space> 绑定为在 mini-buffer 中输入实际的空格:
编辑:根据 Phil 的评论,以下代码片段真的毫无意义。您可以使用 M-space 来获得所需的行为,而无需任何键绑定。
(define-key minibuffer-local-completion-map "\M- " 
    (lambda () (interactive) (insert " "))) 

1
现今(至少)M-SPC 被绑定到 just-one-space,这对于重新格式化文本非常有用,但这也意味着您可以在不需要代码的情况下使用这个答案。 - phils
@phils 我简直不敢相信我在编写代码时居然忽略了那个。在 bibtex-mode 中,自动完成曾经让我发疯,所以我认为使用 M-space 是非常聪明的,因为它在 minibuffer 中没有用处。但是事实证明它有用!唉。 - Tyler
我也尝试了M-space,但这在Ubuntu上触发了默认命令:当前窗口弹出了一些菜单,显示“最小化、最大化...”,但使用C-q对我来说很好。 - Marius Hofert

4
你也可以在每个迷你缓冲区键映射中将 SPC 绑定到 self-insert-command。然后你就不需要使用 C-q
(在21世纪,没有理由让SPC在迷你缓冲区中完成。Emacs最终摆脱了文件名完成的遗物,但是对于其他类型的完成仍没有智能化。不应该将任何可打印字符绑定到一个完成命令上,它们都应该自我插入。不能在不使用C-q的情况下插入?SPC已经过时了。)

嗨,Drew,你能更具体地解释一下“每个小缓冲区键位映射”是什么意思吗? - Marius Hofert
这些是迷你缓冲区完成键映射(我应该添加限定词“完成”,因为您只需要这些完成键映射):minibuffer-local-completion-mapminibuffer-local-must-match-mapminibuffer-local-filename-completion-mapminibuffer-local-filename-must-match-map。对于最近的Emacs版本,您可能可以忘记修改后两个。 - Drew
嗨,德鲁,根据你的描述,我能想到的最好的解决方案是(define-key minibuffer-local-completion-map (kbd " ") 'self-insert-command),对于其他功能也是这样。但是仍然会出现“无匹配项”的情况 :-( - Marius Hofert
1
空格字符的打印形式是 SPC,而不是 " "。请使用 (kbd "SPC") 代替 (kbd " ") - Drew
谢谢,Drew,那个有效 :-)。我会在不久的将来进行测试,看看是否有任何意外的副作用。 - Marius Hofert

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