^ M在文件名和&找到文件

时间:2010-01-13 11:46:26

标签: emacs

更新:仅当我从Windows计算机访问特定服务器时才会出现这种情况

使用emacs tramp(plink)我正在登录2台不同的服务器,其中一个服务器遇到find-file时出现问题。

如果我在目录中执行制表符完成,则所有文件名都附加了^ M,例如:

Click <mouse-2> on a completion to select it.
In this buffer, type RET to select the completion near point.

Possible completions are:
-name^M       ../^M
./^M         .bash_history^M
.git/^M       .gitconfig^M
.gitignore^M  .lesshst^M
.ssh/^M       .subversion/^M

当我选项卡完成文件名时,它以^ M后缀完成,后缀是不存在的文件的文件名:

/plink:user@myserver.com:/home/me/.gitignore^M

有人遇到过类似的问题吗? ^M不可访问!

4 个答案:

答案 0 :(得分:0)

^ M确实是回车/换行的回车部分(十六进制0x0d,oct 015)。您可能需要将服务器配置为使用换行符作为行结尾。可能有办法在emacs中解决这个问题,但我不知道。

在某种程度上,它是MS Windows(回车/换行)与Linux(换行)问题。然而,它并不是那么简单,两种类型的行结尾都是出于历史的好理由。

答案 1 :(得分:0)

如其他地方所述,^ M是CR字符,它构成了在DOS中用作行终止符的CR LF对的前半部分。 Unix / Linux只使用LF,因此^ M显示为一个额外的字符。

当我在vim中看到此消息时,我会通过搜索^ M并将其替换为 nothing 来删除它。要指定^ M,请按ctrl-V然后按M

我确信emacs有办法做同样的事情。

答案 2 :(得分:0)

尝试

    (add-hook 'comint-output-filter-functions
        'shell-strip-ctrl-m nil t)
    (add-hook 'comint-output-filter-functions
        'comint-watch-for-password-prompt nil t)

或者甚至

'(ansi-color-for-comint-mode-on)
'(ansi-color-for-comint-mode-filter)

答案 3 :(得分:-1)

^ M是回车。

这可能与DOS与Unix换行有关。

DOS: (13, 10)
Unix: (10)

因此,当您想使用DOS样式编写行时,Unix样式渲染器会说:

your like(char13)
another line

检查您的终端和类似的东西......

并且......如果你在DOS中为Unix编写批处理文件也是如此。您必须使用dos2unix filename转换它以删除文件中的额外13个。