Windows 如何更改emacs shell中使用的行尾样式(回车/换行)?

Windows 如何更改emacs shell中使用的行尾样式(回车/换行)?,windows,shell,emacs,carriage-return,linefeed,Windows,Shell,Emacs,Carriage Return,Linefeed,我正在使用Emacs和plink连接到Linux开发服务器的Windows10机器上工作。 我可以使用M-xshell 并使用plink服务器将ssh连接到服务器 当我在键盘上按enter键时,就像我按了两次而不是一次enter键一样 username@server>ls 文件1文件2文件3 username@server> username@server> 我最初认为这与终端的无关转义字符有关,正如其他问题所表明的那样。打开windows命令提示符并使用plink对服务器进行ssh’ing输出

我正在使用Emacs和plink连接到Linux开发服务器的Windows10机器上工作。 我可以使用
M-xshell
并使用
plink服务器将ssh连接到服务器

当我在键盘上按enter键时,就像我按了两次而不是一次enter键一样
username@server>ls
文件1文件2文件3
username@server>
username@server>

我最初认为这与终端的无关转义字符有关,正如其他问题所表明的那样。打开windows命令提示符并使用plink对服务器进行ssh’ing输出这些无关字符,我可以使用bashrc中的以下变量删除它们:

export PROMPT_COMMAND=“”
export PS1=“\u@\H:\W>
导出术语=”

windows命令提示符现在正确地显示了plink会话,没有多余的转义字符。尽管如此,Emacs shell似乎仍然在按两次enter键

接下来,我假设enter键发送的字符有问题

运行
showkey-a
似乎可以解释问题:

在一个真正的putty窗口和Windows命令提示符中,我在与服务器的ssh连接中获得了以下showkey输出:

showkey-a
按任意键-Ctrl-D将终止此程序
^M 13 0015 0x0d

在Emacs shell中,我得到了这个输出

showkey-a
按任意键-Ctrl-D将终止此程序
^M^J 13 0015 0x0d
10 0012 0x0a


当我按enter键(DOS行尾格式)时,Emacs shell似乎正在发送回车和换行符。然后enter键“按两次”是有道理的。“有没有办法改变shell中的这种行为?我见过使用
set buffer file coding system
告诉Emacs使用Unix、Windows或Mac行结尾。但这似乎对我不起作用,因为我身陷囹圄

对于每个劣质流程,Emacs为流程输入和流程输出应用独立的编码系统

在您的情况下,流程输入的编码系统将是“dos”系统,导致CRLF对被发送到流程进行EOL

您可以使用M-x
set buffer process coding system
以交互方式更改当前缓冲区的这些输入/输出编码系统。默认情况下绑定到C-xRETp

对于某些模式,您还可以使用钩子自动执行此操作。e、 g:

(添加钩子“shell模式钩子”我的shell模式钩子)
(取消我的shell模式挂钩()
“自定义“外壳模式”行为。”
(设置缓冲区进程编码系统“utf-8-unix”iso-latin-1-unix))
根据交互提示,第一个参数是“流程输出的编码系统”,第二个参数是“流程输入的编码系统”


有关更多信息,请参见C-hig
(emacs)通信编码。

关于该缓冲区中使用的编码系统,
C-h C
告诉了您什么?检查外壳的编码系统表明其输入是dos格式。我确实把系统改成了unix,但没有用。你改的是哪种编码系统?有许多不同用途的选择。如果使用
M-x set buffer process coding system
将进程输入设置为unix编码系统,这是否解决了问题?这很有效!我使用M-x设置缓冲区进程编码系统,并将shell的输入/输出设置为iso-latin-1-unix。当我按enter键时,运行showkey-a现在会导致换行,而不是换行/回车。多谢各位