gpt4 book ai didi

emacs - 在自定义 comint 模式下获取制表符补全

转载 作者:行者123 更新时间:2023-12-05 01:25:24 25 4
gpt4 key购买 nike

我通常尝试使用如下命令启动 CLI(可能未正确定义它):

(make-comint-in-buffer "PUTTY" nil "./plink.exe" nil "dbserver")
(make-comint-in-buffer "Python" nil "c:/Python26/python.exe" nil "-i")
(make-comint-in-buffer "Python" nil "c:/Python27/python.exe" nil "-i")
(make-comint-in-buffer "git" nil "C:/Program Files (x86)/Git/bin/sh.exe" nil "--login" "-i")

特别是在命令提示符中的第一个和最后一个启动上面提供了 tab 完成的便利。但是在 comint-mode 我似乎没有得到这个特性。

输入 tab 会在点下方添加一个简单的制表符,而不是将其传递给流程并取回完成候选项。 comint-dynamic-completeC-qtab 没有产生预期的结果。

如何在运行不同进程的 comint-mode 中利用上述功能?

最佳答案

简答

您需要在 Emacs 中编写自己的完成函数。这些可能会从外部程序中提取信息,但您无法直接访问 python 或 git 等提供的制表符补全。

长答案:

当您运行 make-comint-in-buffer 时,您正在设置最基本的设置,以交互方式从外部进程发送和接收数据。每当您按下 enter 时,Emacs 都会将当前行发送到底层进程,然后打印回进程的输出。在 Emacs 向它发送整行之前,外部进程不知道您在做什么 - 没有直接传递单个字符。

这不同于直接在终端中运行外部程序。当您在终端中运行 python 时,它会在您键入时解释每个字符(或至少它可以)。因此,当您点击 Tab 键时,它知道要尝试完成某事。当您在 Emacs 中运行 python 时,Emacs 会处理您的所有输入,直到您按下回车键。这意味着当您按下 tab 键时,Emacs 只会插入一个制表符,而 python 并不知道要尝试完成某些事情。

Emacs 可以为 comint 模式提供 tab 完成,但是您需要在 Emacs 端构建完成目标,不能依赖外部程序的 native 完成。要了解其工作原理,请查看 shell.el 中的完成函数,您可以使用 M-x find-library shell 打开它。

这不是用一两行 elisp 就能完成的事情。它是为与外部进程交互而编写的主要模式的重要组成部分——比如 R 的 ESS http://ess.r-project.org/

也就是说,如果您深入研究 shell.el 的内部结构,您可能会找到足够的代码来修改以帮助您入门。

关于emacs - 在自定义 comint 模式下获取制表符补全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20396698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com