今回は Emacs の Tramp という機能についてです。これを使えば使いなれたローカルの Emacs 環境からリモートのファイルを直接編集できます!
リモート上のファイルをローカルの Emacs で編集したい!
リモートで他のマシン上のファイルを編集をするとき、どのようにしていますでしょうか?例えば下記の2つの方法が考えられますね。
前者は直接的な方法ですが、例えば Emacs が普段使用してない設定だったりで何かと面倒です。数行変える程度なら我慢できますが、使い慣れていない設定の Emacs はストレスが溜まります。C-h でヘルプが出てきたりしたら殺意すらおぼえますね。vi?nano?起動したら最後、終了させることもママなりません。
後者は使いなれたローカルの環境で編集できるというメリットがありますが、いちいちリモートからファイルを落としてきたりアップしたりとするのが面倒です。うっかりするとそのうちローカルとリモートと、どちらが最新のファイルかわからなくなったりします。
Emacs Tramp を使おう!
そこで Emacs の Tramp 機能の出番です!使い方は至極簡単です。いつも通りC-x C-f でファイルを開くときに、
/ssh:username@hostname:/path/to/file
とするだけです。これでローカルの Emacs 上から直接リモートのファイルを編集できます!もちろんリモートマシンのホスト名のところは IPアドレスでも OK です。ファイル名のところは ~/hoge.c のようにホームディレクトリからの相対パスも使えます。また、リモート上のファイルの場所を覚えていない場合、ファイル名を指定せずにディレクトリ名だけ指定すれば dired が開きますので、そこからファイルを選択すれば OKです。
例えば ユーザ名が tarou、ホスト名が remotehost で、ホームディレクトリを dired で開く場合は下記のようにします。
/ssh:tarou@remotehost:~/
下記のようにすればホームディレクトリ直下のhoge.cが直接開きます。
/ssh:tarou@remotehost:~/hoge.c
Windows の場合の注意点
ただし Windows 環境の場合は注意が必要です。Windows の場合は ssh ではTramp が動作しません。代わりに plink を使用します。plink は putty をインストールすれば使えるようになります。PATH を通しておくのを忘れずに。もし msys2 を使っているなら pacman でインストール可能です。使い方はsshの時とほぼ同じです。
/plink:username@hostname:/path/to/file
最初が違うだけですね。あとは ssh の時と同様です。
ssh のポート番号がデフォルトの22でない場合
基本的にこれで事足りるかと思いますが、時々、ssh のポートがデフォルトの22でないマシンがあります。セキュリティ上、あえてデフォルトから変えているわけですね。例えば今現在わたしが使っているエックスサーバー(xserver)はssh ポート番号は22でなく10022です。こういう場合、ポート番号を明示的に指定してあげる必要があります。その方法は下記の通りです。
/ssh:username@hostname#port:/path/to/file
ホスト名の後にポート番号を書きます。例えばsshのポート番号が10022の場合は下記のようになります。
/ssh:tarou@remotehost#10022:~/
Windowsの場合は ssh でなく plink にするのを忘れずに。
/plink:tarou@remotehost#10022:~/
rootでファイルを開きたい場合
普通に一般ユーザでファイルを開く方法は上記に述べた通りです。root権限でファイルを開きたいときがありますよね?
その場合の方法を下記に書きます。やり方は簡単で、パイプでsudoに渡すだけです。
/ssh:username@hostname|sudo:hostname:/path/to/file
Windows の場合はこちら。plinkを使います。
/plink:username@hostname|sudo:hostname:/path/to/file
まとめ
Emacs Tramp を使って、ローカルから直接リモート上のファイルを編集する方法をご紹介しました。ザクッとポイントをまとめると下記の通りです。簡単。
以上、Emacs Tramp についでした。
オートセーブの設定によっては動作が重い場合があるので、その解決法を下記に投稿しました!
コメント