Emacs Tramp でリモート上のファイルを直接編集する方法|Windowsにも対応

シェアする

どうも、ながやすです。今回は Emacs の Tramp という機能についてです。これを使えば使いなれたローカルの Emacs 環境からリモートのファイルを直接編集できます!

スポンサーリンク

リモート上のファイルをローカルの Emacs で編集したい!

リモートで他のマシン上のファイルを編集をするとき、どのようにしていますでしょうか?例えば下記の2つの方法が考えられますね。

  • sshでリモートにログインして、そのマシン上で編集する
  • ftp や scp で編集したいファイルをローカルへ落としてきて編集した後、ftp, scp などでリモートマシンへ転送
  • 前者は直接的な方法ですが、例えば 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 を使って、ローカルから直接リモート上のファイルを編集する方法をご紹介しました。ザクッとポイントをまとめると下記の通りです。簡単。

  • C-x C-f の時にちょっとだけファイルの指定方法を変えるだけ
  • Windows の場合は ssh でなく plink が必要
  • sshポート番号がデフォルト22でない場合は「#」でポート番号を指定
  • root でファイルを開くときはパイプでsudoする
  • 以上、Emacs Tramp についでした。

    オートセーブの設定によっては動作が重い場合があるので、その解決法を下記に投稿しました!

    Windows & Emacs Tramp でオートセーブに失敗する時の対処法
    Windows環境でEmacs Trampでリモートのファイル編集中にやたらに重くなる時の解決法です。参考情報としてオートセーブの簡単な説明とTramp の lisp コードの抜粋を載せています