Web関係の仕事をしていても、Emacs使いと出会う事はあまりない。少なくとも私は。
大体、
秀丸エディタとか、
サクラエディタとか、
TeraPadとか、エディタじゃないけど、Eclipseとかを使ってる人が多い。最近は
PHPエディタもたまに見る。私もサクラエディタは好きだし、Eclipseも使いたい。
実際、emacsを使うメリットというのは、そんなに無い。他のエディタより劣っているとは思わないけど、総合的に勝ってるという訳でもない。ただ、マウス使わなくていいのが気に入っている。
とはいっても、今時のまともなエディタなら、大抵マウスを使わなくても使えるし、なによりemacsのキーバインディングに対応している物も少なくない。じゃあemacs(またはemacsクローン)の何がいいのかと言えば、基本的にキーボードで操作するのが自然であるという事と、理由になって無いけど、きちっとemacsと同じ動きをしてくれるからだと思う<%= fn 'これはもはやemacsのキーバインディング互換モードのあるエディタの悪口ですね' %>。まぁ、こういうのってあまり考えてもしょうがない事なので、理由は何でもいいんだけど。
なんか、話がずれてきた。こんな事を書きたいのではなくて、emacsを使っている人にはそうそう出会わないけど、意外とemacsとかvimとかを使いたいと(覚えたいのほうが自然か?)漠然と思っている人が多いという事。やってみたいけど、習得に時間がかかるから、習得するまでの作業効率が落ちて支障をきたしそうで使わないといった感じ。
たしかに実際とっかかりは悪いのだけど、意外とキーバインディングは覚えやすい。それに、emacsを使っている人がすべてのコマンドを知ってる訳ではなくて、いくつかのコマンドを覚えるだけで使えるってこと。
とはいっても、私も大して使いこなせてないんだけどね。
[unix][emacs] emacsのコマンド
上のセクションでは、いくつかのコマンド覚えれば、emacs使えるし、主に自分が使っているコマンドはこれぐらいだよ〜って事を書きたかったんだけど、ぐだぐだになってしまいました。
で、私がemacsを使い始めた頃に、コマンドをメモしてたりしてて、それを載せようと思ってたんだけど、やっぱこういうのって一覧にしてるサイトが沢山ある。私はのメモは、自分が見るためのメモでかなりはしょってるし、慣れてくるとメモしなくなったので、網羅的ではないし、よく使うコマンドがメモってなかったりすると思う。いや、大体基本は押さえてるつもりなんだけど。
読み物としても、とてもオススメできる物ではないので、とりあえず、まとまってるサイトを紹介しておきます。
メモの内容はまた。
[unix][emacs] emacsのメモ(基本編)
コピペして終わりにしようと思ってたけど、なぜか、まじめに書く気になりました。<%= fn '予想以上にメモり方がひどかった。' %>
ファイルを読むC-x C-f filename
ファイルを開き直すC-x C-v filename
ファイルを保存するC-x C-s
いわゆる「名前を付けて保存」C-x C-w filename
emacs終了C-x C-c
他にも「カーソル位置に別ファイルの内容をインライン入力」というのがメモしてあったけど、使った試しが無い。興味ある方は以下のコマンドを実行してください。
C-x i file name
追記:文字コード関係
文字コードを変更するC-x <RET> f <RET> utf-8-unix
文字コードを変更して読み直しあまり無いけど、間違って文字コードを認識して、文字化けした時に、明示的に指定して読み直します。
C-x <RET> c <RET> utf-8-unix
文字コード指示子(utf-8-unixとか)はtabで補完しようとすれば、使える候補が出るので、それを見るといいと思います。
コード指定の指示子構成は、文字コード+改行コード(OS名)です。
追記2:コマンドのキャンセル
ミニバッファにコマンド入力していて、途中で辞めたくなった場合は、
C-gでキャンセルする事ができます。大事な事を書き忘れていた。
[unix][emacs] emacsのメモ(編集系)
行頭移動 / 行末 / Fileの先頭 / 末尾C-a / C-e / M-< / M->
字下げ行頭に移動M-m
カーソル以降の行末まで削除C-k
1画面前進 / 1画面後進C-v / M-v
単語の先頭に移動 / 単語の末尾に移動M-b / M-f
1文字削除 / 1単語削除C-d / M-d
これらは、よく使います。
一行削除する場合などは、C-aで行頭に移動して、C-kで削除などとしますし、プログラミングなどをしている時は、行頭ではなくて、タブストップまでもどりたい事が多いので、M-mを使います。M-< / M->もよく使います。
カーソルを移動するために、C-f,C-b,C-p,C-nなどがあり、使うかどうかと言われれば使うのですが、カーソルキーで代用可能なので、必須という事もないとおもいます。便利は便利ですが。
削除系はdeleteキーが使えるので、あまりつかいません。ただ、C-dはwindowsでのdeleteキーのようにカーソル後の文字を消してくれるので、たまに使います。単語単位での削除とかは私は使いません。M-b M-dとかに慣れると便利だろうとは思いますが、考えるより先にdeleteで消しちゃいます。
[unix][emacs] emacsコマンド(バッファ系)
バッファの概念は単純で、保存されずメモリの上にデータが乗っている時のメモリがバッファ。普通のエディタ(普通って何?)でいうと、保存せずに、画面上でだけ編集している場合の画面が、バッファにあたります。
emacsのバッファは、タブ対応のウェブブラウザのようなもので、タブを切り替えて複数のサイトを見るように、バッファを切り替えて複数のファイルを表示する仕組みになっています。emacsのマルチウィンドウシステムはバッファに支えられているのです。
バッファを閉じるC-x k buffer name
バッファの切り替えC-x b buffer name
バッファリストの表示C-x C-b
バッファを閉じたり、切り替えたりするのは、バッファリストからもできるので、私はもっぱらバッファリストを表示してから、選択して切り替えたり、バッファを閉じたり(削除)しています。
バッファリストからバッファを選ぶのは、直感どおり選択したいバッファにカーソルをあわせて、エンターキーを押します。削除は、削除したいバッファにカーソルをあわせて、dキーを押します。すると、バッファ名の行頭付近にDマークがつきます。このDマークは複数のバッファにつける事が可能で、実際に削除を実行するときはxキーを押します。同様にSマーク(ブッファにカーソルをあわせてsを押す)をつけてxを押すとそのバッファを保存してくれます。
また、間違ってマークをつけてしまったので、取り消したいという場合は、バッファ名にカーソルをあわせてuを押します。
新しいバッファを作りたい場合は、バッファを開く際<%= fn 'C-x C-f, C-x C-v, C-x b等' %>に、ファイルシステムに存在しない名前を指定すると、新しいバッファが作られます。新しいバッファ名を省略すると、newバッファや、*scratch*バッファが表示されるので、それを保存する時に名前を付ける事もできます。
[unix][emacs] emacsコマンド(検索系)
emacsの検索はかなり優れもので、インクリメンタル検索が使える上に、正規表現も使える。
ただ、マルチバイト文字である日本語をインクリメンタル検索する事はできないので、私はアスキー文字はインクリメンタル検索で、日本語は普通の検索(単純検索)で行うというように区別している。
ちなみに日本語をインクリメンタル検索する方法が無い訳ではなくて、migemoを使えば可能なようです。私は不便を感じていないので使った事ありませんが。
インクリメンタル検索 / 逆順C-s 検索文字列/ C-r 検索文字列
単純検索C-s <RET> 検索文字列 <RET>
複数の検索対象が見つかった場合は、C-sで次の検索対象発見位置、C-rで前の検索対象発見位置に移動します。
置換M-% 置換対象文字列 <RET> 置換後文字列 <RET>
これは、確認置換機能で、置換してよいかいちいち確認してくれる置換方法です。置換してよいかどうか聞いてくるので、yかnで答えてあげましょう。確認せずに全部置換してよい場合は!を押します。全部置換せず終了する場合はqかリターンキーを入力します。
はじめから確認しない置換機能もありますが、私はまず一度は確認して、あんまり沢山置換対象が見つかった場合は、!で全部置換するという方法を使っているので、確認しない置換機能は使った事がありません。それで困った事は一度も無いので、この3種類だけ覚えておけば十分だと思います。
ちなみに、確認しない置換機能は、
M-x replace-string 置換対象文字列 <RET> 置換後文字列 <RET>
となっており、キーバインドは設定されていません<%= fn '自分で設定する事ももちろんできます。' %>。この事からも、確認置換をする方が一般的だと思います。
[unix][emacs] emacsコマンド(キルリング系)
キルリングとは、クリップボードのような物だと考えてもらうと正解ではないかもしれないけど、間違いではないと思う。何が違うかと言えば、キルリングには削除した文字列等も保存される所。
これらの事は、知らなくても大して困らない気がするが、実際はその辺りを意識せず使用すると、ペースト(emacsではヤンクという)した時等に、思わぬ値が入ってびっくりする。
まぁ、難しく考えるほどの事ではないけど、そういうものがあるという事を知ってると、無駄に狼狽しなくてすむ。
カット / コピー / ペーストC-@ C-w / C-@ M-w / C-y / M-y
C-@の部分は、領域選択処理をするという事。emacsでは領域の事をリージョンという。英語で範囲とか地域とかいう意味だから、普通に訳されてないだけなんだけど。で、範囲選択なんだけど、普通にC-@を押した後、選択したい部分をカーソルキーやC-fbpnコマンドを使って選択すれば、C-wでカット、M-wでコピーできる。問題は、選択範囲が反転表示されない事だ。これは大した問題ではない様に感じるし、実際大した問題ではないけど、視覚でリージョンを確認できないのは、結構不便。リージョンが非常に大きい場合等、本当に選択できているか不安になる。とはいえ、リージョンを反転表示する方法はある。詳しくは
選択領域をハイライトという部分を読んでほしい。これでばっちり。
ちなみに、ハイライトをしていなくても、範囲を確認する方法がある。
領域確認C-x C-x
このコマンドを使えば、領域選択開始位置と終了位置に順繰りに移動できる。何回か使った事があるけど、特に覚えておく必要は無いと思う。
ヤンク(ペーストの事。C-y)は、一番最近キルリングに入った物を出してくれる。M-yは押せば押しただけ、古いヤンクを呼び出せる。M-yは正直使い心地が良くない。GUI環境なら、メニューのEdit → Select and pasteを使った方が良いし、そうでないなら、kill-summaryやそれ相当の物を導入した方が良い。
矩形カット ペーストC-x r k /C-x r y
選択範囲を矩形にして、カットとペーストができる。これは必須の機能なので、覚えた方がいい。ただ、これはリージョンを反転表示にしていても、矩形に反転してはくれない。なぜなら、コピーやカットをした時に初めて、矩形である事を指定するから。
矩形削除 / 矩形空白化C-x r d / C-x r c
矩形空白追加C-x r o
メモってたけど、使った事は無い(空白というのはスペースね)。でも、多分使う人は使う機能だと思う。C-x r kとC-x r dの違いは微妙だけど、C-x r dはキルリングにテキストが入らない。いろんな意味で微妙だ。
ページの選択 / バッファ全体の選択C-x C-p / C-x h
ページの選択は使った事無いし、完全に忘れてた。バッファ全体の選択は、頻繁に使う。
UndoC-x u / C-_ / C-/
アンドゥはいくつもコマンドがあるけど、動作は同じ。一番タイプ数の少ないC-/がオススメ。
リドゥコマンドは多分無い。UndoをUndoする事で、Redoできるから。Undoをやり直したいとき(Redoしたいとき)はC-gでUndoを切った後、再びUndoをする。C-gをしなくても、カーソルを動かしてUndoとかでもいける。結果をみれば、希望通り作用したか一目瞭然なんだけど、mini bufferにRedoとかUndoとか表示されるので、そこを見るとRedoなのか、Undoなのかわかる。わかってもしょうがないけど。