emacsclientをEDITORまたはVISUALとして使用するにはどうすればよいですか?


10

シナリオ:私はzshで、すでに開いているEmacsのインスタンスで長いシェルコマンドを編集したいと思います。に設定$VISUALしましたemacsclient -n -cC-x C-ezshから実行すると、新しいEmacsフレームが開き、zsh行の内容が表示されます。バッファを編集して保存した後、を押すC-x kとバッファが閉じます。zsh行は変更されません。Emacsで行われた変更をzshが認識しないのはなぜですか?

Emacs 24.5.1、zsh 5.0.8、Mac OS X 10.10.4

回答:


11

に設定VISUALしますemacsclient -c(またはなしの他のバリエーション-n)。

このオプション-nemacsclient、実行中のEmacsインスタンスに連絡してファイルを編集するように指示するとすぐに戻ります。エディターを呼び出すプログラム(ここではzshですが、これはを呼び出す他のプログラムにも同様に当てはまります$VISUAL)は、呼び出したプログラムが終了したため、編集が終了したことを認識しています-n

VISUALEmacsでバッファを閉じたときなど、編集が終了したときに終了するように呼び出されるプログラムを調整する必要があります。それはまさにそれが何emacsclient-nないことです。それは実行中のEmacsインスタンスに連絡してファイルを開くように指示し、次にEmacsが返信して編集セッションが終了したことをemacsclientに伝えるまで待機します。編集セッションを終了する通常の方法は、C-x #server-edit)を押すことです。これはemacsclientに通知し、バッファと、それがによって開かれたときのフレームを閉じますemacsclient -c。バッファーを閉じると、セッションが終了したことがemacsclientプロセスに通知されますが、警告プロンプトが表示されます(「バッファー…まだクライアントがあります、それを強制終了しますか?」server-kill-buffer-query-function)。によって開かれたフレームでemacsclient -cC-x C-csave-buffers-kill-terminal)を押すとファイルが保存され、ファイルが閉じてフレームが閉じます。


-nまた、emacsclientがgitのエディターとして機能するのを防ぎます。
cg433n

接線(必要に応じて別の質問に入れます)-nですが、フラグの用途は何ですか?
2015

3
@MrBonesファイルマネージャーまたはコマンドラインにいて、ファイルを編集したいとします。「ファイルを編集してから何かを行う」のではなく、編集を開始するだけです。ファイルごとにEmacsの個別のインスタンスを実行したemacs myfile &場合、実行(または同等のWindows)して、Emacsプロセスを真っ暗に置きます。emacsclientを使用すると、を実行できますがemacsclient myfile &、それだけでemacsclient待機し、終了するだけのプロセスを持つプロセスが残ります。代わりに私はを実行するemacsclient -n myfileので、emacsclientプロセスはそれ自体で消えます。私はそれのためにシェル別名を持っている一般的なので、これがある:alias e='emacsclient -n'
ジル「SO-停止されて悪」

@ギレス私は今までemacsclientターミナルでしか実行していないことに気づきました。そのため、のポイントがわかりませんでした-n。ありがとう
Squidly 2015

2
@MrBones、ターミナルでemacsclientを実行していることが、-nを使用する正確な理由だと思います。開いているEmacsフレームにファイルを開いて開くと、emacsclientが終了し、ターミナルで作業を続けることができます。これは非常に便利です。
ダニエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.