我使用 emacs 在 linux、windows 和 osx 上工作,除了 windows 下的 shell 缓冲区有一个烦人的问题外,一切都很好。
自动完成文件名会很好用(比标准 Windows 更好),但完全没用,因为它会为目录生成带有正斜杠分隔符的路径。这在 Windows 上不起作用,所以我不得不强迫自己避免使用制表符,而是在命令提示符中输入所有内容,或者我不得不放弃 emacs,使用 Windows 的坏命令窗口(例如,由于分割线问题,甚至很难合理地复制粘贴)。
有没有办法告诉 emacs 在 Windows 路径名补全中使用“\”而不是“/”?
答案1
简短回答:使用变量comint-completion-addsuffix
。
更长的答案:谷歌搜索“emacs shell 完成窗口”让我找到了http://www.gnu.org/software/emacs/windows/Sub_002dprocesses.html,表示变量comint-completion-addsuffix
控制完成字符。将其设置为 cons of\
并SPACE
执行您想要的操作。您可以使用
- Mx 自定义变量 RET comint-completion-addsuffix RET
- 选择价值菜单
- 选择后缀对
\
在目录后缀后输入:- 在文件后缀后输入一个空格:
- 选择保存以供将来的会话(或保存以供当前会话)
这样做会添加以下行
'(comint-completion-addsuffix (quote ("\\" . " ")))
到你的 ~/.emacs 文件中的正确位置。
(使用 Emacs 22.3 测试。)
更新:
我明白您的评论的意思,即在 Emacs 23.3 中,前导反斜杠已更改为斜杠。 comint-dynamic-complete-filename
已被破坏,因此描述的部分except that it won't change parts of the filename already entered in the buffer
不再正确。
用 22.3 的 lisp/comint.el 替换 23.3 的 lisp/comint.el 似乎可行。替换该文件从第 3062 行开始的三行也同样可行:
(delete-region filename-beg filename-end)
(if filedir (insert (comint-quote-filename filedir)))
(insert (comint-quote-filename (directory-file-name completion)))
使用以下行(来自 22.3):
(insert (comint-quote-filename
(substring (directory-file-name completion)
(length filenondir))))
并且做M-x byte-recompile-directory
。
答案2
(setq comint-completion-addsuffix (quote ("\\" . " ")))
对我来说~\.emacs
,这个办法很管用。