当我将此代码放入我的 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) "/")))
"]$ ")))
运行良好,但出现一些错误:
- 当我按下向上键(以执行最后一个命令)时,我在迷你缓冲区中收到此消息:
Not found
- 当我按下 TAB 键(自动完成路径)时,我在迷你缓冲区中收到此消息:
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 会尝试自动完成其他 '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]$
其中 x
和 y
是非换行符序列(.
不匹配换行符,这在这里不是问题),并且 z
是一系列非 /
字符(由于提示函数中的 split-string
调用在 /
).
*?
是 *
的非贪婪版本,匹配前面模式的 few 个实例作为 possible/necessary;从而确保我们不会无意中匹配超出提示末尾的文本。
我试图将此代码放入我的 Emacs 初始化文件中:
(setq eshell-prompt-function (lambda ()
(concat "["
(user-real-login-name)
"@"
(system-name)
" "
(car (last (split-string (eshell/pwd) "/")))
"]$ ")))
运行良好,但出现一些错误:
- 当我按下向上键(以执行最后一个命令)时,我在迷你缓冲区中收到此消息:
Not found
- 当我按下 TAB 键(自动完成路径)时,我在迷你缓冲区中收到此消息:
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 会尝试自动完成其他 '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]$
其中 x
和 y
是非换行符序列(.
不匹配换行符,这在这里不是问题),并且 z
是一系列非 /
字符(由于提示函数中的 split-string
调用在 /
).
*?
是 *
的非贪婪版本,匹配前面模式的 few 个实例作为 possible/necessary;从而确保我们不会无意中匹配超出提示末尾的文本。