我如何使用Powershell作为我的tramp-encoding-shell?

首先我启动了eshell然后我input命令cd /plink:<user>@<host>:/home/

那么我得到这个错误消息

Microsoft Windows [版本6.1.7601]版权所有(c)2009 Microsoft Corporation。 版权所有。

命令提示符已被pipe理员禁用。

按任意键继续 。 。 。

我试图连接plink(这是我的path),也通过*消息*缓冲区后,我发现这一点。

找不到本地shell提示符(C:\ Windows \ system32 \ cmd.exe)

我90%确定这是因为cmd已经在我的机器上被禁用了,因为当我在另一台计算机上尝试相同的设置时,我知道cmd已经启用,一切正常。

我已经修改我的.emacs文件

 (require 'tramp) (set 'tramp-encoding-shell "C:/Windows/System32/WindowsPowershell/v1.0/powershell.exe") (set 'tramp-encoding-command-switch "-Command") 

我得到了不同的结果,但结果似乎是乱七八糟的废话(第三行看起来可能是一个提示, \>字符在正确的地方…)。

emacs错误

我设法findtramp-encoding-shell的相当好的描述 ,还有一个相关的SO问题 ,这里是github上的tramp-encoding-shell 源文件 。

更新

这里是我的屏幕看起来像试图不成功打开一个PowerShell设置为tramp-encoding-shell的plink连接。

全屏截图

Solutions Collecting From Web of "我如何使用Powershell作为我的tramp-encoding-shell?"

所以我不知道TRAMP,但是你得到的解释是Windows PowerShell发送回你的Unicode(UTF16),每个字符是16位,在这种情况下,字母是一个零,再加上行尾是回车/换行(0xa,Oxd)。

现在,根据TRAMP文档 , “emacs无法找到PowerShell的本地shell提示符”错误@Michael Albinus的建议似乎是有希望的。

6.4.2在远程主机上运行shell

在与远程主机相关的缓冲区中调用Mx shell将运行shell-file-name定义的本地shell。 这可能也是一个在远程主机上应用shell的有效文件名,但是至少当你的本地和远程主机属于不同的系统类型时,例如'windows-nt'和'gnu / linux',它将会失败。

您必须将变量explicit-shell-file-name设置为远程主机上的shell文件名,才能在远程主机上启动该shell。

6.4.6在Windows主机上运行远程进程借助winexe,可以在远程Windows主机上运行进程。 TRAMP已经实现了这个过程文件和开始文件处理。

变量tramp-smb-winexe-program必须包含本地winexe命令的文件名。 在远程主机上,必须安装Powershell V2.0; 它用于运行远程进程。

要通过Mx shell在Windows主机上打开远程shell,必须设置变量explicit-shell-file-name和explicit – * – args。 如果你想,例如,运行cmd,你必须设置:

 (setq explicit-shell-file-name "cmd" explicit-cmd-args '("/q")) 

在运行PowerShell作为远程shell的情况下,设置是

 (setq explicit-shell-file-name "powershell" explicit-powershell-args '("-file" "-"))