我正在使用Emacs和plink连接到Linux开发服务器的Windows 10机器上工作。
我可以使用aws configure
在Emacs中启动shell
并使用M-x shell
当我在键盘上按Enter键时,就像我按了两次而不是一次
plink server
我最初认为这与终端的无关转义字符有关,正如其他问题所表明的那样。打开一个Windows命令提示符并使用plink ssh到服务器输出这些无关的字符,我可以在我的bashrc中使用以下变量删除它们:
username@server>ls<enter>
file1 file2 file3
username@server>
username@server>
Windows命令提示符现在正确显示了plink会话,没有多余的转义字符。尽管如此,Emacs shell似乎仍然按下两次输入一次。
接下来,我假设输入密钥发送的字符有问题。
正在运行export PROMPT_COMMAND=""
export PS1="\u@\H:\W>
export TERM=""
似乎解释了这个问题:
在真实的putty窗口和Windows命令提示符下,我在与服务器的ssh连接中获得了以下showkey输出:
showkey -a
showkey -a
Press any keys - Ctrl-D will terminate this program
^M 13 0015 0x0d
当我按下Enter键(DOS行结束格式)时,似乎Emacs shell正在发送回车符和换行符。然后输入被按下两次是有道理的。&#34;有没有办法在shell中改变这种行为?我已经看到使用showkey -a
Press any keys - Ctrl-D will terminate this program
^M^J 13 0015 0x0d
10 0012 0x0a
告诉Emacs使用Unix,Windows或Mac行结尾。但是这对我来说似乎并不适用,因为我在一个shell中。
答案 0 :(得分:1)
对于每个劣等流程,Emacs为流程输入和流程输出应用独立的编码系统。
在您的情况下,用于输入过程的编码系统将是“ dos”系统,导致CRLF对被发送到EOL的过程。
您可以使用 M-x set-buffer-process-coding-system
交互地更改当前缓冲区的这些输入/输出编码系统。默认绑定到 C-x RET p
对于某些模式,您还可以使用挂钩自动执行此操作。例如:
(add-hook 'shell-mode-hook 'my-shell-mode-hook)
(defun my-shell-mode-hook ()
"Custom `shell-mode' behaviours."
(set-buffer-process-coding-system 'utf-8-unix 'iso-latin-1-unix))
根据交互式提示,第一个参数是“用于从流程输出的编码系统”,第二个参数是“用于向流程输入的编码系统”。
有关更多信息,请参见 C-h i g (emacs)Communication Coding
。