当我将此代码放入我的 init 文件时,emacs shell 的一些功能消失了

Some functions of emacs shell disappears when I put this code in my init file

我试图将此代码放入我的 Emacs 初始化文件中:

(setq eshell-prompt-function (lambda () 
    (concat "[" 
        (user-real-login-name) 
        "@" 
        (system-name) 
        " " 
        (car (last (split-string (eshell/pwd) "/"))) 
        "]$ ")))

运行良好,但出现一些错误:

我不明白为什么会这样。有人可以帮我吗?谢谢!


更新

我进入了调试器模式。当我按 UP 键(仅 UP 键,而不是 Tab)时,调试器抛出此错误:

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 会尝试自动完成其他 'thing'。例如,目前,我在一个包含 Programming 目录的路径中。如果我键入 cd Progr 并按 TAB 键,Emacs 会尝试自动完成并显示此消息:

Click on a completion to select it. In this buffer, type RET to select the completion near point.

Possible completions are:

. 2to3

2to3-2.7 2to3-3.6

ControlPanel KateDJ

Magick++-config Magick-config

MagickCore-config MagickWand-config

NetworkManager Wand-config

WebKitWebDriver X

Xorg Xwayland

[ a2ping

等等。为什么 emacs 没有完成使用目录?非常感谢所有评论和回答!

C-hv eshell-prompt-function 状态:

Make sure to update eshell-prompt-regexp so that it will match your prompt.

我相信正确设置该正则表达式将解决您的问题。

你无疑可以想出比这更具体的东西,但下面的正则表达式匹配你生成的提示:

"^\[.*?@.*? [^/]*?\]\$ "

此正则表达式匹配(在行首)[x@y z]$ 其中 xy 是非换行符序列(. 不匹配换行符,这在这里不是问题),并且 z 是一系列非 / 字符(由于提示函数中的 split-string 调用在 /).

*?* 的非贪婪版本,匹配前面模式的 few 个实例作为 possible/necessary;从而确保我们不会无意中匹配超出提示末尾的文本。