看如何让 Windows 下的 emacs 使用“\”而不是“/”自动完成 shell 缓冲区中的路径?
我在 Windows 7 上使用 emacs,当调用 Mx shell 时,emacs 打开一个 DOS-Shell。提示符使用反斜杠“\”显示当前目录。
当我输入路径,比如“C:\Te”并按 [TAB] 完成时,emacs 会将路径补全为“C:/Temp/”。这对于在 emacs 内部工作是可以的,但对于调用 DOS 命令或在 DOS 中执行二进制文件或批处理文件则不行。
示例:命令 C:/Temp/a.bat 失败。C:\Temp\a.bat 执行正常。
emacs 24.* 中的情况似乎更糟。我以为自己是一位经验丰富的 emacs 用户,但却找不到将上述补丁应用到 emacs 24.* 的方法。comint 模式似乎发生了很大变化。
答案1
尝试一下这个 hack。它似乎在 emacs 24.5 中有效:
(defun win-file-name-completion-advice (res)
(if (stringp res) (replace-regexp-in-string "/" "\\\\" res) res))
(advice-add 'comint-completion-file-name-table
:filter-return #'win-file-name-completion-advice)
(defun win-command-completion-advice ()
(let ((filename (comint-match-partial-filename)))
(and filename (not (string-match "\\\\" filename)))))
(advice-add 'shell-command-completion
:before-while #'win-command-completion-advice)
答案2
主题 258683描述了一个适当的解决方案:
- 在文件中
~\.emacs
- 添加行
(setq comint-completion-addsuffix (quote ("\\" . " ")))