Answers:
我发现在最初的测试中似乎可以正常工作:本质上是重新绑定<tab>
到pcomplete-std-complete
,但是由于某些原因该功能不是交互式的,因此需要包装它:
(define-key eshell-mode-map (kbd "<tab>")
(lambda () (interactive) (pcomplete-std-complete)))
在pcompete-std-complete
尝试使用书面完井pcomplete
与标准完成UI,它ivy
在默认情况下将覆盖(与非常最近更新,他们出现在ESHELL缓冲点附近的一个很好的覆盖吧!)。
pcomplete-completions-at-point
(pcomplete-std-complete
取决于)源代码中的注释提到了一些潜在的问题:
;; FIXME: it only completes the text before point, whereas the
;; standard UI may also consider text after point.
;; FIXME: the `pcomplete' UI may be used internally during
;; pcomplete-completions and then throw to `pcompleted', thus
;; imposing the pcomplete UI over the standard UI.
我认为第一个不会影响我,因为我认为<tab>
除了输入行的末尾,我什么都不会按。到目前为止,我也没有看到第二个问题。
编辑:对于那些不熟悉eshell的怪癖(这是委婉的说法)的人,也许我应该添加它来重新绑定eshell的密钥,如上面所建议的,您应该将其放在您的init文件中:
(add-hook 'eshell-mode-hook
(lambda ()
(define-key eshell-mode-map (kbd "<tab>")
(lambda () (interactive) (pcomplete-std-complete)))))
在您对我的钩子反模式浪费键大吼大叫之前,让我解释一下eshell声明其keymap,(defvar eshell-mode-map nil)
然后在(setq-local eshell-mode-map (sparse-keymap))
内部进行eshell-mode
!(该代码有帮助;; FIXME: What the hell!?
。)这意味着您必须在eshell-mode
运行后才能重新绑定键!因此,钩。
helm
尚未暗示其进入eshell
制表符完成的功能,则此修复程序也适用于helm
。
(add-hook 'eshell-mode-hook '(lambda ()
需要包装的内容。