[英]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
我的方法:
tramp-terminal-type
設置為“dumb” Mx customize-variable RET tramp-terminal-type
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 不夠用,在這里搜索可能會找到配置該方法的解決方案。
我可以建議的其他替代方案是:
嗯,這是流浪漢的缺陷。
真正的解決方案是在使用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以獲得解決方案? ssh
在PATH
? 還建議在 MS Windows 上使用plink
- 請參閱 Tramp 文檔中的“內聯方法”部分
如果問題是遠程 shell 中的自定義提示,一個簡單的解決方法是添加到您的.bashrc
或等效文件中:
if [[ $TERM == "dumb" ]]; then
export PS1="$ "
fi
在你定義你的PS1
。
注意:歸功於ChasingLogic,因為這是他們在此線程中的建議。
順便說一句——如果你需要tramp
到sudo
你實際上可以使用sudoedit
沒有tramp的情況下進行sudo 。
目前我正在使用這個 bash 函數:
erf () { SUDO_EDITOR="emacsclient -a emacs" sudoedit $@; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.