簡體   English   中英

Emacs:流浪漢不起作用

[英]Emacs: Tramp doesn't work

我試圖通過 Emacs 通過 Tramp 打開一個遠程文件。

(require 'tramp)
(setq tramp-default-method "ssh")

我收到來自 Emacs 的消息

流浪漢:等待來自遠程 shell 的提示

Emacs 掛了,之后沒有響應任何操作

Emacs 安裝在 Windows 上; 遠程文件在 Linux 機器上。

如果您連接的帳戶使用了一些奇怪的花哨的 shell 提示,那么很有可能這就是造成流浪者旅行的原因。

以 root 身份登錄,然后輸入

PS1="> "

(這是一個正常的標准 shell(ZSH、BASH、younameit)提示,一個tramp會理解的)然后切換到用戶帳戶,並啟動emacs -q (以確保您的.emacs不會造成這種混亂)並嘗試到Cx Cf /sudo:root@localhost:/etc/hosts看看是什么。

您還可以(不推薦)自定義定義流浪者期望的正則表達式:

M-x customize-variable RET tramp-terminal-prompt-regexp

我的方法:

  1. 確保變量tramp-terminal-type設置為“dumb”

Mx customize-variable RET tramp-terminal-type

  1. 在您的 .*shrc 中測試並提供正確的提示:
 case "$TERM" in "dumb") PS1="> " ;; xterm*|rxvt*|eterm*|screen*) PS1="my fancy multi-line \\n prompt > " ;; *) PS1="> " ;; esac

您的 Windows ssh 客戶端是這里的關鍵,而“ssh” TRAMP 方法幾乎肯定是錯誤的。

如果您使用的是 Cygwin,那么您需要使用 'sshx' 方法,並且您可能需要使用 ssh-agent 來處理身份驗證。 詳細信息在這里: 使用帶有 EmacsW32 和 cygwin 的tramp,可能嗎?

我想象中的一樣適用於任何獨立的SSH客戶端不需要一個完整的Cygwin安裝,但使用Cygwin的DLL文件。 (我提到這一點,因為我很確定我記得看到過這樣的事情。)

如果您使用 PuTTY,那么您需要“plink”方法,正如 Alex Ott 指出的那樣。 如果 Wiki 不夠用,在這里搜索可能會找到配置該方法的解決方案。

我可以建議的其他替代方案是:

  1. 使用 Cygwin 原生 Emacs。 這將比 NTEmacs 慢,但 TRAMP 似乎與 'ssh' 方法配合得很好,而且密碼提示也有效。

  2. 在您的 Windows 機器上托管 Linux VM,並在其上運行 Emacs。 這是一個相當大的障礙,但這是在 Windows 中工作時使用 Tramp 的首選方式

嗯,這是流浪漢的缺陷。

真正的解決方案是在使用tramp時防止加載.bashrc (因為現在它是 PS1,但它可以是 PATH,或者你的.bashrc會做的任何其他會讓tramp不高興的事情......)。

這可以通過要求 ssh 設置環境變量並在.bashrc測試來完成:

將此添加到~/.emacs

(require 'tramp-sh nil t) (setf tramp-ssh-controlmaster-options (concat "-o SendEnv TRAMP=yes " tramp-ssh-controlmaster-options))

而在~/.bashrc的開頭:

if [ ! -z ${TRAMP-x} ] ; then return fi

tramp另一個默認設置是它沒有一個變量來將隨機參數傳遞給ssh命令,我們必須搭載tramp-ssh-controlmaster-options

您是否檢查過Emacs wiki以獲得解決方案? sshPATH 還建議在 MS Windows 上使用plink - 請參閱 Tramp 文檔中的“內聯方法”部分

如果問題是遠程 shell 中的自定義提示,一個簡單的解決方法是添加到您的.bashrc或等效文件中:

if [[ $TERM == "dumb" ]]; then
    export PS1="$ "
fi

在你定義你的PS1

注意:歸功於ChasingLogic,因為這是他們在此線程中的建議。

順便說一句——如果你需要trampsudo你實際上可以使用sudoedit 沒有tramp的情況下進行sudo

目前我正在使用這個 bash 函數:

erf () { SUDO_EDITOR="emacsclient -a emacs" sudoedit $@; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM