Emacs Shell 模式:如何使 TAB 字符通过?

3
有没有办法在Emacs“Shell-mode”中使TAB键传递到shell?我在Emacs中的Shell内启动交互式控制台,通常会响应TAB并打印候选列表。
我尝试了M-x local-set-key RET C-z self-insert-command,但那只是将TAB插入 Shell 缓冲区。
3个回答

3
一般而言,在 Emacs 中按下 C-q 键可以“引用”接下来的字符(不只是在 shell 模式下),跳过可能被绑定到该按键的任何函数。同时,保留 C-qTAB 的 HTML 标签。

1
这与“M-x local-set-key RET C-z self-insert-command”的效果相同--它将TAB插入到缓冲区中,而不是将其传递到shell。 - Yaroslav Bulatov
@Yuroslav:我实际上测试过了。M-x shell,cat RET,C-q TAB xxx RET。输出确实看起来像是“cat”命令读取了制表符... - Nemo
1
嗯...我正在尝试使用shell的TAB自动补全,但好像不起作用。M-x term可以实现,但它会将所有Emacs按键发送到shell,而我只想传递TAB。 - Yaroslav Bulatov

1

Shell模式可以帮助您在emacs中构建命令,并在按下Enter键时将它们发送到某个进程。在旧的shell(如Bourne shell)和其他不允许行编辑的交互式命令中非常有用。

另一方面,所有按键都由emacs处理,因此您运行的命令一次只能看到整行。如果您想立即发送制表符而不是在按下Enter键时发送,我认为shell-mode无法实现。

您尝试过M-xansi-term吗?


0

所以问题是你想要使用制表符自动完成,但是没有得到它?

当你处于shell模式时,C-hkTAB 告诉你什么?

默认情况下,它应该绑定到 comint-dynamic-complete,这应该提供制表符自动完成,但是可能有些东西正在破坏该绑定。

你也可以运行 emacs -Q,看看没有加载任何自定义或站点配置文件会发生什么。


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