如何让 Windows 下的 emacs 24.* 使用“\”而不是“/”自动完成 shell 缓冲区中的路径?

如何让 Windows 下的 emacs 24.* 使用“\”而不是“/”自动完成 shell 缓冲区中的路径?

如何让 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 ("\\" . " ")))

相关内容