更新:

更新:

我使用 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执行您想要的操作。您可以使用

  1. Mx 自定义变量 RET comint-completion-addsuffix RET
  2. 选择价值菜单
  3. 选择后缀对
  4. \在目录后缀后输入:
  5. 在文件后缀后输入一个空格:
  6. 选择保存以供将来的会话(或保存以供当前会话)

这样做会添加以下行

'(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,这个办法很管用。

相关内容