古いtrampの続き
最新版にアップデートしたら$TERMにdumbをセットしてくれるようになった.ということで$TERMで切り替えたらうまくいった
[追記] trampでsudoしたときはrootのログインシェルじゃなくて自分のログインシェルで,かつrootの.zshrcを読み込みます.sudoのオプションがsudo -u (user) -s -Hだから.
ってことはsudoしたいサーバー全部に~root/.zshrcを置かなあかんくて面倒なので,@satoru_hさんが解決策をしめしてくれました.
[追記終わり]
trampの更新
本家サイトより、tramp 2.1.9 をダウンロードする
Emacs から sudo 経由でファイルを編集する方法 | Carpe Diem
展開してから、./configure –with-contrib && make && make clean する
tram-2.19 ディレクトリ全体を、ロードパスの通った場所におく
Emacs を起動してから、M-x tramp-version をして tramp のバージョンを確認する
これを参考にtrampを最新版にしてみた.
現時点での最新版はtramp-2.1.17.tar.gzなのでお間違いなく.
こっちのリンクからどうぞ本家.
そんで上の通り,
tar xzvf tramp-2.1.17.tar.gz cd tramp-2.1.17/ ./configure --with-contrib make make clean cd ../../ mv tramp-2.1.17/ ~/.emacs.d/lisp/
てな感じにロードパスの通ったところに置いちゃいます
そんで.emacsにでも以下のように追記します
(add-to-list 'load-path "~/.emacs.d/lisp/tramp-2.1.17/lisp/") (require 'tramp) (setq tramp-shell-prompt-pattern "^.*[#$%>] *")
zsh側の設定
こんな感じに~/.zshrcに書いときます.(sshなどでログインしたとき用)
# set prompt case ${UID} in 0) PROMPT="%B%{^[[31m%}%/#%{^[[m%}%b " PROMPT2="%B%{^[[31m%}%_#%{^[[m%}%b " SPROMPT="%B%{^[[31m%}%r is correct? [n,y,a,e]:%{^[[m%}%b " [ -n "${REMOTEHOST}${SSH_CONNECTION}" ] && PROMPT="%{^[[37m%}${HOST%%.*} ${PROMPT}" ;; *) PROMPT="%{^[[31m%}%/%%%{^[[m%} " PROMPT2="%{^[[31m%}%_%%%{^[[m%} " SPROMPT="%{^[[31m%}%r is correct? [n,y,a,e]:%{^[[m%} " [ -n "${REMOTEHOST}${SSH_CONNECTION}" ] && PROMPT="%{^[[37m%}${HOST%%.*} ${PROMPT}" ;; esac # set terminal title including current directory case "${TERM}" in # for emacs tramp setting dumb | emacs) PROMPT="%n@%~%(!.#.$)" RPROMPT="" PS1='%(?..[%?])%!:%~%# ' # for tramp to not hang, need the following. cf: # http://www.emacswiki.org/emacs/TrampMode unsetopt zle unsetopt prompt_cr unsetopt prompt_subst unfunction precmd unfunction preexec ;; esac
あと,/sudo::/path/to/file したときにはどうも~root/.zshrcを読み込んでいる模様なのでそっちも設定します.
if [[ $TERM == "dumb" ]]; then PS1='%(?..[%?])%!:%~%# ' unsetopt zle unsetopt prompt_cr unsetopt prompt_subst unfunction precmd unfunction preexec fi
ちなみにMacでは/var/root/.zshrcになるみたいです.
うーん,こんなもん?