2009-05-11 27 views
34

私は数日前に主編集者としてemacsを使い始めました。私は必要なすべてのカスタマイズを集めています。Emacsでリモート開発を行う方法は?

主な使い方は、リモートLinuxマシン(RHEL 5)上のCプロジェクトの開発です。これまでのところ、私は単純なvim(テキストエディタとしてのみ)とシェルスクリプトを使用していました。ある日、私はemacsを試してみることにしました。これまでのところ私はそれが好きです。

しかし、私は、emacsを実行する環境を設定することは長い道のりであり、開発マシンで直接使用するのではなく(私が使用するすべてのマシンで環境を設定する)私のラップトップからそれを使い、リモート開発をするだけです。

私はTRAMPについて知っていますが、私が知る限りリモートファイルを編集するだけです。大きな障害は、リモートマシンのシェルコマンドを1回のキーストロークで実行することです(リモートマシンのemacでカスタムコンパイルコマンドを実行するためにF5をバインドしました)。

1つのemacsキーストロークでリモートマシン上でシェルコマンドを実行するにはどうすればよいですか? 他のヒントを知っています&完全なリモート開発を行うための秘訣はありますか?

+0

xshowでsshを使用し、コンピュータに表示されているリモートマシン上でEmacsを実行することができます。 – Nifle

+4

Emacs 23.2では、 "compile"コマンドはTRAMPバッファから実行すると自動的にリモートになります。 – MarcH

答えて

10

リモート開発を行う場合、私はscreenを使用して、複数の仮想リモート端末を2つのキーを押すだけで利用できます。これは私のために不可欠です。仮想端末を提供するだけでなく、何らかの理由で接続が切断された場合、セッションはサーバー上に保持されます。

screenの詳細については、GNU Screen Survival Guideを参照してください。

私は通常ソース管理操作用に1つの端末を開いて編集用に、コンパイル用に(これを切り替えてUpArrow + Enterを押してください)、デバッグ用に1つの端末を開きます。私が取り組んでいる環境やアプリケーションによっては、これより多くても少なくても構いませんが、それは一般的なレイアウトです。

+4

'tmux'もまた、積極的に開発された' screen'のようなプログラムです。 –

23

TRAMPは、(ファイルが存在する)リモートマシン上でコンパイルとデバッグをサポートします。これは自動的かつ比較的シームレスでなければなりません。 remote processesのドキュメントをご覧ください。

18

心配はいりません。単一のキーストロークでをEmacsで実行できます。他の人はあなたがエレガントTRAMPでこれを行うことができる方法を指摘しているが、それが合わない場合には(何らかの理由で)あなたも、単に使用して独自の機能をでっち上げることができます:あなたが実行しないと仮定すると、

(defun arbitrary-remote-command() 
    (interactive) 
    (shell-command 
    "ssh [email protected] arbitrary-command")) 


(global-set-key (kbd "<f5>") 'arbitrary-remote-command) 
1

あなたのリモート マシンの端末モードでemacsを実行するとかなり簡単です。ご存知のように、TRAMPを使用して リモートファイルを編集することができます。私はちょうど 'ssh me @ remote "cd /path/to/root & &にコンパイルコマンドを設定し、それを実行します。

2

私はちょうどリモートマシンにsshし、TRAMPを使用する代わりに端末モードでemacsを実行します。少なくとも私の経験では、あなたが遅さを期待していないときは、TRAMPは本当に遅いです。私はそれが奇妙な方法で失敗するのも見てきました。そして、それを "修正"する方法は必ずしも明らかではありません。あなたがsshであれば、メニューなどのようにemacsのUIを使うことはできませんが、viには慣れているので、あなたには問題ではないはずです。実際には、ssh emacsのエクスペリエンスがあなたのローカルエクスペリエンス(local!=端末モードの場合)(1)と非常に似ているように、それらをオフにすることができます。

emacsバッファを持つ仮想端末と同様の機能を備えている点を除けば、セッションを維持することが気になる場合は、画面を使用すると便利です。たとえば、多くのシェルバッファを開いて、さまざまなシェルコマンドをemacsバッファで実行できます。私はsqlplusの多くのインスタンスを実行するためにこれを使用します(rename-bufferを使って素敵な名前を付ける)。

リモートマシンにssh接続されているので、「リモート」シェルコマンドの実行について心配する必要はありません。

一方、「emacsを実行する環境を設定することは長い道のりです」とは何を意味するのかよく分かりません。あなたがソースコントロールを持っているなら、これは些細なものでなければなりません...(私はあなたに正当な理由があると思います)。 (fboundp場合

((fboundp「メニュー・バー・モードの場合)(メニュー・バーモード-1))

(:

(1)は、メニュー、ツールバーやスクロールバーをオフにします「ツール・バーモード)(ツール・バーモード-1))

((fboundp場合は、」スクロールバーモード)(-1))

+0

私は現在この方法で開発を行っていますが、例えばオンラインマニュアルを見るためにw3mを設定するには、依存関係をインストールして解決するか、またはcedetをコンパイルする必要があります(yumはありません)。 開発の一部は、最近作成されたシステムでインストーラをテストしています。したがって、今度はサーバが整備され、emcasをもう一度インストールする必要があります。 また、別のサーバー上のコードを変更する必要があり、emacsもインストールする必要があります。 vimには(少なくともシンプルなテキストエディタとして)「すぐに使える」ため、問題はありません。 – German

-2

二セント・バー・モードをスクロールします。if帯域幅は大きな問題ではない、私はVNCで亀裂を与えるだろう。

5

Trey Jacksonからの素敵な答えですが、Matthew Flaschenの答えが実際に私をもっと助けました。

私はTRAMPをコンパイルする方法を見つけることができませんでしたが、偶然、コマンドremote-compileが見つかりました。

今、私はちょうど私の.emacsにこれらの行を追加します

(setq remote-compile-user "root") 
(setq remote-compile-host "localhost -p 3000") ;This is just when tunneling 
(setq compile-command " cd /usr/src/nexus/traffic && ./builder.sh compile ; cat builder.log") 
(global-set-key (kbd "<f5>") 'remote-compile) 

を、何を行う前に、ControlMasterを使用してSSH接続をセットアップし、私はパスワードを入力する必要はありません。

要約:

  • 編集リモートファイル:TRAMPの状態を保存
  • 複数の端末: SCREEN
  • が リモートコマンドを実行するためにEmacsのキーバインドを定義します。マシューFlaschen 応答
  • リモートコンパイルを参照してください。コマンド ControlMasterを使用してリモートコンパイル

私は、リモート開発を行うためのいくつかの重要な行動をカバーしていると思います。

+0

通常の "compile"コマンドを使うことができます:リモートバッファ(少なくともEmacs 23.2では)から実行するときに自動的にTRAMPを使います。私は「リモートコンパイル」を試みましたが、それは悲惨に失敗しました。おそらくリモートに2回試みたからです。 – MarcH

+0

'rcompile.el(リモートコンパイル)'はEmacs 24.4以降で廃止されました。 Ubuntuでは 'rcompile.el'は'/usr/share/emacs//lisp/obsolete/'ディレクトリにあります。 – Vivek

1

私はあなたのような状況の前にTRAMPを試しましたが、私もそれは奇妙な方法で失敗し、一般的に遅くなっています。

私は現在、Emacsを使ってsshfsマウントでマウントされたファイルを編集しています。これは私にとって非常にうまくいく。リモートファイルシステムをマウントする

(あなたはホストが.ssh/configで正しく設定して、パスワードなしで接続するための公開鍵を設定していると仮定した場合)

$ sshfs remote:dir localdir 

および編集、あなたはその後、上から好きなように!

コンパイルに関しては、他の回答を参照してください。

1

トランプについては、使用しているトランプのバージョンによって異なる場合があります。

個人的に私は、デフォルトのtrampパッケージとplinkをバックエンドとしてリモートホストに接続するために多くの問題を引き起こしていたので、私はtrampをより新しいバージョンにアップグレードし、多くの問題を解決しました。

実際には、リモートマシン上でコンパイルすると、リモートのコンパイルとディレクトリの閲覧、いくつかのファイルの書き込み/書き込み用にLinuxマシン(RH5)にアクセスしています。

0

あなたの現在のディスプレイに対応する有効な$ DISPLAY変数を使用して、リモートマシンからemacsを実行することは誰も言及していません。

明らかにローカルディスプレイ用にXサーバを稼働させる必要がありますが、これはWindows [Cygwinに組み込まれたXサーバを使用する]でも大したことではありません。

これは一般的に、ネットワーク待ち時間< 50msを必要とします。あなたがそのリモートボックスにpingして何か> 50msを得るなら、あなたはこのアプローチに不満を感じます。

以下は素晴らしいです。

SSHにXポートをマップさせる必要があります。そこにはたくさんのドキュメントがあります。

cat <<-EOF >> ~/.emacs 
(define-key global-map "\e`" 'compile) 
(define-key global-map "\e~" 'remote-compile) 
(require 'compile) 
(setq remote-shell-program "ssh") 
EOF 

は今ESC-`ランがコンパイルし、ESC-〜コンパイル/リモート/実行します:私は、およそ1994年から使用してきました何

0

。ホスト名を尋ねられ、コマンドをあらかじめ入力します。どちらのコンパイルも同じ履歴バッファを共有します。

これは簡単です。これは何十年も同じように機能していた機能を利用しています。これは他のリフティング機能を必要とせず、ssh上のテキストなので、長くても遅くても効率的です。私はこれがNetwork RageのFistsをもう少し防ぐことが分かった。

関連する問題