我对我的Emacs shell使用以下提示:
PS1='\n\[\e[33m\]\w\033[36m\]$(parse_git_branch)\[\033[00m\]\n$ '
输出如下:
我尝试使用regexp "(^[^\\(]*)"
来匹配路径并将其设置在dirtrack-list中:
(setq-default dirtrack-list '("(^[^\\(]*)" 1 1))
但是由于颜色的原因,shell永远不会匹配(所以它无法跟踪我的cwd)。是否可以扩展我的正则表达式以包含颜色?
包括@ tripleee的正则表达式:
(setq-default dirtrack-list '("\\s-\\(\033\\[[0-9]+m\\)*\\([^\033\\(]+\\)" 2 1))
但现在当我cd
我在*Warnings*
缓冲区中随机出现以下错误时:
Warning (emacs):
/ does not exist
答案 0 :(得分:1)
尝试类似"^\\(\033\\[[0-9]+m\\)*\\([^\033\\(]+\\)"
的内容并抓住第二个捕获组而不是第一个捕获组。
答案 1 :(得分:1)
tracking.el
中没有任何内容可以发出警告。我使用以下.emacs
来尝试重现问题并且没有错:
(add-hook 'shell-mode-hook
(lambda ()
(shell-dirtrack-mode -1)
(dirtrack-mode 1)))
(add-hook 'dirtrack-directory-change-hook
(lambda ()
(message default-directory)))
(setq-default dirtrack-list '("\\s-\\(\033\\[[0-9]+m\\)*\\([^\033\\(]+\\)" 2 1))
您使用的是什么操作系统和哪些版本的emacs?
答案 2 :(得分:1)
问题来自rvm
部分。当您在该特定存储库中cd
时,它会自动吐出一行,告诉您它正在使用gemset。正则表达式不够窄,无法消除这种误报。我相信以下正则表达式应该有效:"\\s-\\(\033\\[[0-9]+m\\)\\([^\033\\(]+\\)"
。