Emacs 外部コマンド実行

Emacs再入門10日目。
Emacsが楽しくなってきたので、仕事でもなるべく使うようにしています。でもC-n p f bでのカーソル移動は、まったく訓練する気がないので、相変わらず矢印キーとマウスのみの操作ですが。

Vimしか使えない頃は、Emacsの連中はVimのことも知りもせずに、老害扱いしやがって、なんて心では思ってましたが、Emacsが好きになってくると、Emacsの良いところを探そう、なんて気持ちになってきます。
VimでもEmacsでも、カスタマイズすれば、使い勝手は良くなるに決まってますので、あくまでもデフォルトの状態で、良いところを探したいです。でも、Emacsを学ぶ大きな目的は、操作を覚えることではなく、パラダイムシフトを経験することなので、先は長いかもしれません。ちなみに、Vimではパラダイムシフトを経験したと思います。Vimの操作が上達するとhjklは使わないってことが分かった時に、これかっ! と思いました。言葉では説明できませんが。といいつつ、Vimの機能についてもソースを読んでいないし、ほとんど知らない状態なので、VimもEmacsも学習することがたくさんあって楽しい毎日です。

さて、今回は外部コマンドの実行です。
Vimでは、行選択して:!で、外部コマンドを実行すると、フィルタリングできますね。

例えば、このように4行選択して、外部のtacコマンドを実行すると、

上下反転されましたね。

では、Emacsでは、このようなことはできるのか。いや、できるのでしょうけど、一個一個覚えていきたいと思います。
まず、外部コマンドの実行は、メニューを見ればショートカットが書いてあります。M-!なので、Shift + Alt + 1キーです。

では、新規バッファに、外部コマンドseq 10の結果を表示したいと思います。Shift + Alt + 1、seq 10を入力して、M-! seq 10を実行。

実行すると、画面が上下に割れて、下の画面にコマンドの実行結果が表示されました。ん~、別のウィンドウに出力されるとは、想定外です

仕方ないので、C-x o(Ctrl + x、o)で、下のウィンドウにフォーカスを移し、C-x h(Ctrl + x h)で、全領域選択。

そしてM-w(Alt + w)でコピーします。
その後、C-x o(Ctrl + x、o)で、上のウィンドウにフォーカスを戻したら、C-y(Ctrl + y)で、ペーストします。

ちなみに、コピペ方法は、メニューを見れば、ショートカットキーが載っています。

では、フィルタリングといきましょう。4行選択したら、M-| (Shift + Alt + \)でtacを実行します。

おっと、またもや想定外。
行を選択した状態で、外部コマンドを実行したら、テキストの内容が置き換わるのかと思いきや、最初に外部コマンドを実行した時と同様に、結果が別ウィンドウに表示されました。

仕方なく、同じ要領で結果をコピーしてきて、元のテキストを置き換えしました。(うっかり間違えて、4が2回登場していますが)

まあ、カスタマイズすれば選択した箇所を外部コマンドの結果で置き換えすることなど造作もないことなのでしょうけど。
でも、このデフォルトでのふるまいを考えると、Emacsでは、破壊的置換を推奨しない設計思想なのではないでしょうか。確かに、Vimを使っていて、元の状態を保ったまま、外部コマンドのフィルタリング結果が欲しいときがあるので、どちらが良いとも言えないと思います。まあこういう細かい思想の違いがどちらが優れているという論争を生むんでしょうね。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA