我试图把这段代码放在我的 Emacs 初始化文件中:
(setq eshell-prompt-function (lambda ()
(concat "["
(user-real-login-name)
"@"
(system-name)
" "
(car (last (split-string (eshell/pwd) "/")))
"]$ ")))
它工作得很好,但出现了一些错误:
- 当我按下 UP 键(以执行最后一个命令)时,我在 minibuffer 中收到此消息:
Not found
- 当我按下 TAB 键(自动完成路径)时,我在 minibuffer 中收到此消息:
Invalid variable reference
我不明白为什么会这样。有人可以帮助我吗?谢谢!
更新
我进入了调试器模式。当我按 UP 键(只有 UP 键,而不是选项卡)时,调试器会抛出此错误:
Debugger entered--Lisp error: (error "Not found")
signal(error ("Not found"))
error("Not found")
eshell-previous-matching-input("^\\[carlos@archlinux ~]\\$ " 1)
eshell-previous-matching-input-from-input(1)
funcall-interactively(eshell-previous-matching-input-from-input 1)
call-interactively(eshell-previous-matching-input-from-input nil nil)
command-execute(eshell-previous-matching-input-from-input)
更新 2
我将 eshell-prompt-regexp 设置为与我的设置匹配的正则表达式:
(setq eshell-prompt-regexp "\\[[[:alnum:]]+@[[:alnum:]]+[[:blank:]][[:print:]]+\\]\\$[[:blank:]].*")
现在,我可以按 UP 并且它工作正常,但是当我按 TAB 键自动完成 PATH 时,Emacs 会尝试使用其他“事物”自动完成。例如,目前,我在包含 Programming 目录的路径中。如果我键入cd Progr
并按 TAB 键,Emacs 会尝试自动完成显示此消息:
单击完成以将其选中。在此缓冲区中,键入 RET 以选择完成近点。
可能的完成是:
. 2到3
2to3-2.7 2to3-3.6
控制面板凯特DJ
Magick++-config Magick-config
MagickCore-config MagickWand-config
NetworkManager Wand-config
WebKitWebDriver X
Xorg Xwayland
[ a2ping
和更多。为什么 emacs 不使用目录完成?非常感谢所有的评论和回答!