何ができるのか
emacs で普段通り C-x C-f で下記のように/ssh:[email protected]#22:~/.emacsとか
/plink:[email protected]#22:~/cap/dev/js/hello.jsというように入力すると、ssh で入って編集するようなサーバのファイルを手元の emacs からローカルファイルを扱うかのように編集できたりします。
- ファイルの編集
- ディレクトリを開く
- ローカルファイルをサーバへコピーする
など、たいていのことはできそうです。
めちゃくちゃ便利ですねコレ。。これまで TeraTerm を使っていましたが、今後出番が減りそうです。
インストール
現時点(2011/01/08)で最新の tramp-2.2.0.tar.gz を cygwin の bash で make するとコケるみたいです。複数のバージョンを試してみましたが、tramp-2.1.19.tar.gz(tramp-2.1.9.tar.gz ではない)でうまくいきました。
の download から落として展開したディレクトリで
$ LANG=C ./configure --prefix=/cygdrive/c/emacs/tramp --with-emacs=/cygdrive/c/emacs/bin/emacs --with-lispdir=/cygdrive/c/emacs/site-lisp/tramp $ LANG=C make $ make installで完了。
prefix とか lispdir はお好みで。
plink は putty から windows 用の最新のバイナリを落としてインストールすれば OK です。
Emacs
私の場合。(prefer-coding-system 'utf-8-unix) (modify-coding-system-alist 'process "plink" 'utf-8-unix) (setenv "PATH" (apply #'concat `(,@(intersperse ";" (expand-file-names "~/../Program Files/PuTTY" "~/../Program Files/PuTTY" "~/../Program Files/PuTTY" "~/../Program Files/PuTTY" "~/../cygwin/usr/local/bin" "~/../cygwin/usr/bin" "~/../cygwin/bin")) ,(getenv "PATH")))) (require 'tramp) (setq tramp-debug-buffer t) (setq tramp-completion-without-shell-p t) (setq tramp-shell-prompt-pattern "^[ $]+") (defvar tramp-ssh-ppk (expand-file-name "~/.ssh/private-key.ppk")) (defvar tramp-serversman `("serversman" (tramp-login-program "plink") (tramp-login-args (("%h") ("-l" "%u") ("-P" "%p") ("-ssh") ("-i" ,tramp-ssh-ppk))) (tramp-remote-sh "/bin/sh") (tramp-copy-program nil) (tramp-copy-args nil) (tramp-copy-keep-date nil) (tramp-password-end-of-line "xy") (tramp-default-port 22))) (add-to-list 'tramp-methods tramp-serversman)
家ではもっぱら serversman に接続するのですが、会社でも使いたいので tramp-methods にそれぞれの設定を追加しました。上記の設定は serversman のものだけです。
よって使い方もこのようになります。
C-x C-f
/serversman:[email protected]#22:~/cap/dev/js/hello.jsポートの指定の仕方がわからず四苦ハックしました。。
[email protected]#22 の「#」以降に指定すれば OK です。
デフォルトの設定で 22 にしてあるようなので、特に指定がなければ [email protected] だけでも可。
補足1
ppk ファイルは秘密鍵を plink と同じディレクトリにある puttygen に通せば生成できます。補足2
expand-file-names, intersperse は私的に定義しているものなので、上記の設定をそのままコピペしても動きません。一応貼っておきます。。
(defun expand-file-names (&rest rpaths) (mapcar #'(lambda (rpath) (expand-file-name rpath)) rpaths)) (defun pair-fold1 (proc seed ls) (loop for e on ls by #'cdr for acc = (funcall proc ls seed) then (funcall proc e acc) finally (return acc))) (defun single? (ls) (and (not (null ls)) (null (cdr ls)))) (defun intersperse (item ls) (pair-fold1 #'(lambda (pr acc) (if (single? pr) (cons (car pr) acc) (cons item (cons (car pr) acc)))) '() (reverse ls)))
蛇足
plink 自体はこんな感じで使えました。plink -ssh -P port -i private-key.ppk [email protected]
参考
- TRAMP (transparent remote file access) - Summary [Savannah]
- TRAMP User Manual
- TRAMP on Windows
- Copy/Cut/Paste:Emacs+TRAMP+sshでリモートサーバのファイルを編集する
0 件のコメント:
コメントを投稿