我尝试将此代码放在我的Emacs init文件中:
(setq eshell-prompt-function (lambda ()
(concat "["
(user-real-login-name)
"@"
(system-name)
" "
(car (last (split-string (eshell/pwd) "/")))
"]$ ")))
效果很好,但会出现一些错误:
Not found
Invalid variable reference
我不明白为什么会这样。有人能帮助我吗?谢谢!
更新
我进入了调试器模式。当我按下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会尝试使用其他'自动完成。例如,目前,我在包含编程目录的路径中。如果我输入cd Progr
并按TAB键,Emacs会尝试自动填充显示此消息:
单击完成以选择它。 在此缓冲区中,键入RET以选择近点完成。
可能的完成是:
。 2to3的
2to3-2.7 2to3-3.6
ControlPanel KateDJ
Magick ++ - 配置Magick-config
MagickCore-config MagickWand-config
NetworkManager Wand-config
WebKitWebDriver X
Xorg Xwayland
[a2ping
等等。为什么没有使用目录完成emacs?非常感谢所有评论和答案!
答案 0 :(得分:1)
C-h v eshell-prompt-function
州:
请务必更新
eshell-prompt-regexp
,以使其符合您的提示。
我认为正确设置正则表达式可以解决您的问题。
你无疑会想出一些比这更具体的东西,但是下面的正则表达式与你生成的提示相符:
"^\\[.*?@.*? [^/]*?\\]\\$ "
此正则表达式匹配(在行的开头)[x@y z]$
其中x
和y
是非换行符的序列(.
与换行符不匹配,这里不存在问题),z
是一系列非/
个字符(由于split-string
中的/
调用快速函数拆分*?
)。
*
是addDockWidget
的非贪婪版本,尽可能/必要匹配前一个模式的少数个实例;从而确保我们无法在提示结束之后无意中匹配文本。