RSS

emacs

17 11月

<<< emacs >>>

1. 基本的なこと
emacs においてはすべてはコマンド操作で行われます。キーを押すと、そのキーに割り当てられている (これを、束縛あるいは バインドされているとも呼ぶ) コマンドが実行されます。この割り当てを変更することにより、自分の好みのキーで emacs を操作することができます。(あまり使われないため) どのキーにも割り当てられていないコマンドが沢山あって、これらは M-x に続いてコマンド名を入力することで実行させることができます (例えば C-n にはデフォルトで next-line というコマンドが割り当てられているため、 C-n を押すのと M-x next-line と入力するのでは同じ結果になる)。また、キー操作はコマンドの頭文字で覚えるようにすると楽です (以下に紹介するコマンドで下線が引いてあるところを参照)。なお emacs のキー操作では、大文字小文字は区別されます。

——————————————————————————–

2. ファイル操作
・ C-x C-f (find-file)             ファイル読み込み…
・ C-x C-s (save-buffer)           カレントバッファを保存
・ C-x C-w (write-file)            カレントバッファを別名で保存…
・ C-x i   (insert-file)           カーソル位置にファイルを挿入…

——————————————————————————–

3. カーソル移動
いっぱいあるようですが、たとえば C-f と M-f では動作が似てるので覚えるのはそんなに大変ではありません。
・ C-f     (forward-char)          1文字進む              (→)
・ C-b     (backward-char)         1文字戻る              (←)
・ C-n     (next-line)             次の (= next) 行へ     (↓)
・ C-p     (previous-line)         前の (= previous) 行へ (↑)
・ M-f     (forward-word)          1語進む
・ M-b     (backward-word)         1語戻る
・ C-e     (end-of-line)           行末へ
・ C-a     (beginning-of-line)     行頭へ
・ M-e     (forward-sentence)      文末へ
・ M-a     (backward-sentence)     文頭へ
・ M->     (end-of-buffer)         現在位置をマークしバッファ末尾へ
・ M-<     (beginning-of-buffer)   現在位置をマークしバッファ先頭へ
・ C-v     (scroll-up)             1画面分進む
・ M-v     (scroll-down)           1画面分戻る
・ C-x L   (goto-line)             指定した行へ移動…
・ C-l     (recenter)              カーソルが画面中央にくるようにする

——————————————————————————–

4. カット / コピー / 削除
Del と C-d をはやく使い分けられるようになりましょう。 C-Space でマークした位置と現在のカーソル位置の間を regionと呼びます。 Emacs ではいろいろな操作を region に対して行うことができます。
・ Del     (delete-backward-char)  カーソルの左の文字を削除
・ C-d     (delete-char)           カーソルの文字を削除
・ C-k     (kill-line)             行のカーソル以降を削除し kill-ring へ
・ C-w     (kill-region)           region の範囲を削除して kill-ring へ
・ M-w     (copy-region-as-kill)   region の範囲を削除せず kill-ring へ
・ C-y     (yank)                  kill-ring の内容をカーソル位置にはき出す
・ M-y     (yank-pop)              yank した内容を消去し、前の kill-ring を
はき出す (yank の直後しか実行できない)
・ C-Space (set-mark-command)      現在のカーソル位置をマーク
・ C-x h   (mark-whole-buffer)     現在のバッファ全体を region にする
・ C-x C-x (exchange-point-and-mark) カーソル位置 ←→ マーク位置を交換
・ C-o     (open-line)             カーソル位置から一行スペースを空ける
・  —    (kill-rectangle)        長方形に kill-region
・  —    (yank-rectangle)        長方形に yank
・  —    (open-rectangle)        長方形にスペースを空ける

——————————————————————————–

5. バッファ / ウインドウ操作
バッファとウインドウの概念を混同している人をよく見かけます。まずはこの考えをしっかり頭に入れてください。
・ C-x b   (switch-to-buffer)      ウインドウのバッファを切り換える…
・ C-x C-b (list-buffers)          存在しているバッファ一覧を表示…
・ C-x k   (kill-buffer)           バッファそのものを消去する…
・ C-x 0   (delete-window)         ウインドウを消去する
・ C-x 1   (delete-other-windows)  ウインドウを画面いっぱいに広げる
・ C-x 2   (split-window-vertically) 上下に 2分割 (C-x ^ で広げる)
・ C-x 3   (split-window-horizontally) 左右に 2分割 (C-x { , C-x } で広げる)
・ C-x o   (other-window)          カーソルを次のウインドウへ移動 (時計回り)

——————————————————————————–

6. 文字列検索 / 置換
正規表現による検索を覚えると、すごく便利です。なお、検索は、カーソルを移動させるとその位置で抜けられ、C-g を押すと最初の位置で抜けられます。
・ C-s     (isearch-forward)       順方向に検索…
・ C-r     (isearch-backward)      逆方向に検索…
・ M-%     (query-replace)         文字列置換… (「!」で一度に置換できる)
・  —    (isearch-forward-regexp) 順方向に正規表現で検索…
・  —    (isearch-backward-regexp) 逆方向に正規表現で検索…
・  —    (query-replace-regexp)  正規表現で置換…

——————————————————————————–

7. 日本語入力 (egg)
以下に挙げる操作は、あなたの操作している Emacs に egg が入っている場合にのみ使用できます。場合によっては、使用するのに何らかの設定をする必要があるかもしれませんが、そのやりかたはサイトによって異なります。
・ C-\     (toggle-egg-mode)       日本語入力モード on/off
・ M-h     (fence-hiragana)        ひらがなに変換
・ M-k     (fence-katakana)        カタカナに変換
・ C-p     (henkan-previous-kouho) 前 (= previous) 候補に戻る
・ C-i     (henkan-bunsetu-chijime) 文節を 1文字縮める
・ C-o     (henkan-bunsetu-nobasi) 文節を 1文字伸ばす
・ M-s     (henkan-select-kouho)   候補の一覧を表示…
・  —    (toroku-region)         region の文字を単語として登録…

——————————————————————————–

8. 日本語入力 (skk)
以下に挙げる操作は、あなたの操作している Emacs に skk が入っている場合にのみ使用できます。場合によっては、使用するのに何らかの設定をする必要があるかもしれませんが、そのやりかたはサイトによって異なります。
・ C-x C-j (skk-mode)                日本語入力モード on/off
・ x           前候補に戻る
・ q           カタカナに変換、あるいは、ひらがな / カタカナ入力の切り替え
・ C-j         全角かなモードにする、あるいは、現在の入力を確定する
・ l           半角モードにする
・ L           全角英字モードにする
・ \           記号入力モードにする…
・ @           現在の日付を挿入する

——————————————————————————–

9. ヘルプの使いかた
C-h を押すことによってヘルプモードに入ります。そのあとどんなキーを押すかによって、ヘルプの機能が決定されます (? を押すと機能の一覧が表示される)。ヘルプの出力は、たいてい *Help* という名前のバッファが作られそこに表示されます。 apropos は与えられた正規表現について Emacs が知っているすべてのことを出力するため、非常に長大な出力が得られることがあるので注意しましょう。
・ C-h f   (describe-function)     このコマンドは何をする ?
・ C-h k   (describe-key)          このキー操作は何をする ?
・ C-h w   (where-is)              このコマンドはどこのキーにある ?
・ C-h v   (describe-variable)     この変数は何を設定するもの ?
・ C-h b   (describe-bindings)     現在のキー割り当ての一覧は ?
・ C-h a   (command-apropos)       正規表現でコマンド名を検索
・  —    (apropos)               正規表現で関連するすべての名前を検索

——————————————————————————–

10. その他覚えておくと便利なコマンド
・ C-g     (keyboard-quit)         現在実行中の操作を中止
・ C-z     (suspend-emacs)         Emacs を一時停止する (アイコン化)
・ C-u     (universal-argument)    次に入力するコマンドを 4回実行する
(2回押せば 16回)
・ ESC 数字                        次に入力するコマンドを数字の回数だけ実行
(ESC 1 0 0 a なら 100個の a を入力)
・ C-x u   (advertised-undo)       ひとつ前の操作を取り消し、元に戻す(undo)
・ C-x C-c (save-buffers-kill-emacs) すべてのファイルを保存し emacs を終了
・ C-x C-q (vc-toggle-read-only)   バッファの変更禁止を on/off 切り替え
・ C-x (   (start-kbd-macro)       マクロの記録を開始
・ C-x )   (end-kbd-macro)         マクロの記録を終了
・ C-x e   (call-last-kbd-macro)   記録したマクロを実行
・ M-q     (fill-paragraph)        今いる段落を強制的に桁揃え (= fill)
・ C-x f   (set-fill-column)       M-q の桁揃え位置を現カーソル位置に設定
・  —    (auto-fill-mode)        自動的に桁揃えするモードに
・  —    (untabify)              region 内のタブ文字をスペースに変換

——————————————————————————–

11. 正規表現とは
正規表現とは文字列を検索するためのパターンのことですが、ただ単に「これと一致しているか」だけではなく、非常に複雑なパターンを検索することができます。正規表現によって実際に文字列を検索したり置換したりする方法は、 文字列検索 / 置換のほうを見てください。
.   任意の 1文字に一致
x*   x の 0回以上のくり返しに一致 (つまり、空列にも一致)
x+   x の 1回以上のくり返しに一致 (空列には一致しない)
x?   x の 0回または 1回の出現に一致
x\|y   x または y に一致
[…]   [ ] 内の文字にどれでも一致
[^…]   [ ] 内の文字以外ならどれでも一致
^   行頭に一致
$   行末に一致
\<   単語の始まりに一致 (すぐ前が空白や改行で、直後が英字など)
\>   単語の終わりに一致 (すぐ前が英字で、直後が空白など)
\( … \)   グループ化。これで囲んだ文字列は 1つの文字のように扱われる
(またこれで囲まれた文字列は置換の際に \1, \2 … 等で利用可)
\\   「\」に一致
正規表現の例 :
\<[1-9][0-9]*\>
1~9 の文字で始まり、あとに 0~9 の文字が 0個以上つづく。 0個以上だから、ひとつもなくてもかまわない。ここで注意すべきなのは *という正規表現は「この直前のパターン」だけに かかります。したがってここでは [1-9][0-9] というくり返しが 0個以上続くのではなくて [0-9] というパターンだけが 0個以上 つづくという意味です。よってこのパターンに一致するのは数字ですが、 さらにこのパターンは\<および\>で 囲まれているため、たとえば「a=123455;」の「234」だけに一致してしまう、 というようなことはありません。数字の前後は必ず単語の境界でなければいけない のです。よってこのパターンは上の例では必ず「123455」に一致します。
\<0x[0-9A-Fa-f]+\>
前のパターンと似ていますが、これは C で使われている 16進表現 (0x7e など) に一致します。[0-9A-Fa-f]のようにいくつもの文字を指定できる ことを覚えてください。A-F と a-f をわざわざ書くのは、 大文字でも小文字でも受けつけるようにするためですね。また、+ を使ったのは、 前のパターンと違って、* を使うとまったくの空列にも一致してしまうからです。
^[ ^I]*$ (^I を入力するにはタブキーを押す)
最初に ^ があり、最後に $ があるパターンだったら、 そのパターンが一行にまるまる一致しなければ一致とみなされません。 ここではそれを利用しています。正規表現の意味は「行頭があって、 空白またはタブだけが 0個以上続いて、行末になる」、つまり 一行がスペースまたはタブだけからなる、いわゆる「空白行」に 一致します。
<[^<>]+>
これは HTML のタグを捜すものです。最初に < ではじまり、 次に「< でも > でないもの」が 1個以上続きます。最後は > で終わる、 このようなパターンが含まれている行を捜します。[^>] の代わりに . を使ったらと思うかもしれませんが、これではだめです。 正規表現はなるべく広い範囲に一致するように検索されるので、 <.+>というパターンでは 「<title>hoge</title>」 などという文字列にもまるまる一致してしまうのです (先頭の < と、 最後の > に囲まれている)。それから + ではなくて * ではどうか。 これでもいいのですが、これだと <> なんかにも 一致してしまうのです。<[a-zA-Z]+>にすると、今度は </h1>などに一致できませんね。
\(おい\)+
上の例までは * や + は一文字に対してだけでしたが、 \( と \) を使ってパターンをグループ化 することにより、文字列のくり返しに一致することができます。 この例はいささかバカっぽいですが「おいおいおいおい…」という 「おい」の一回以上のくり返しに一致します。
「\([^」]+\)\1」
ちょっと複雑になります。まず“「”と“」”で囲まれているものを 捜すのは先の HTML タグの例と同じですね。ところがこの“「”“」”の間の パターンは \( と \)で囲まれています。 こうすることにより、ここで一致した文字列が\1という 変数に入ると考えてください。よって、ここでは\(…\)で 囲まれたパターンのすぐあとに \1 がくることにより「同じ文字列が 2度くり返す」ような文字列 (例えば「はおはお」など) を 見つけることができるのです。なお、パターンの中に 2度 \(…\) が出てくると、2度目の文字列は \2 という変数に入るように なっています。\3、\4 …など以下同様です。
「\([^」]+\)」 → (置換) → <h1>\1</h1>
\1 は置換においても使えます。これは正規表現を使った置換 (query-replace-regexp) で使うもので“「”“」”により 囲まれている文字列を“<h1>”“</h1>”で囲むようにします。 このように正規表現を使った置換を覚えると、今まで手作業で やっていたことがウソのように楽になります。

——————————————————————————–

12. mh-e の使いかた
mh (mail handler) というメールを書いたり読んだり整理するための一群のプログラムを、emacs 上から簡単に使えるようにしたのが mh-e です。これが使えるかどうかはサイトによって違います。以下は mh に入ったとき来たメールの一覧が見えている「mh フォルダモード」でのコマンドです。
・ C-x RET (mh-rmail)              mh フォルダモードに入る
・ C-x m   (mh-smail)              メールを送る…
・ .       (mh-show)               メッセージを見る
・ n       (mh-next-undeleted-msg) 次のメッセージへ行く
・ p       (mh-previous-undeleted-msg) 前のメッセージへ戻る
・ a       (mh-reply)              そのメッセージの返事を書く…
・ C-c C-y (mh-yank-cur-msg)       (返事を書いているとき) 相手のメールを引用
・ o       (mh-refile-msg)         メッセージに転送マークをつける (u で取消)
・ d       (mh-delete-msg)         メッセージに削除マークをつける (u で取消)
・ u       (mh-undo)               つけたマークを取り消す
・ M-f     (mh-visit-folder)       過去のメールを見る…
・ x       (mh-execute-commands)   マークをつけたメッセージを処理する
・ q       (mh-quit)               mh フォルダモードを抜ける

——————————————————————————–

13. dired の使いかた
dired (ディレクトリエディット) はファイルやディレクトリをいろいろ見てまわるのに便利なモードです。でも、これを使っているとバッファがすごくたくさんできてしまうので、注意してください。
・ C-x d   (dired)                 dired モードに入る
・ R       (dired-do-rename)       ファイル名変更あるいはファイルの移動(mv)…
(マークしたファイルがあれば全てを移動)
・ f       (dired-advertised-find-file) そのウインドウにファイルを表示
・ v       (dired-view-file)       ファイルの中身を見るだけ (編集はしない)
・ u       (dired-unmark)          つけたマークをとり消す
・ o       (dired-find-file-other-window) 別のウインドウにファイルを表示
・ d       (dired-flag-file-deletion) ファイルに削除マークをつける (u で取消)
・ x       (dired-do-flagged-delete) 削除マークをつけたファイルを本当に削除…
・ C       (dired-do-copy)         ファイルをコピー (cp)…
(マークしたファイルがあれば全てをコピー)
・ M       (dired-do-chmod)        ファイルのパーミッションを変更(chmod)…
・ g       (revert-buffer)         現在の表示を更新
・ m       (dired-mark)            ファイルをマークする
(これで移動やコピーがいっぺんにできる)
・ q       (dired-quit)            dired モードを抜ける

——————————————————————————–

14. バッファメニューの使いかた
Emacs ではいくつものバッファが開けます。また、ヘルプや mh-e や dired などもそれを使うと勝手にバッファを生成します。こうしているうちに、いまどのバッファが存在していて、自分が編集しているのはどれなのか、わからなくなってしまいます。このようなときはバッファメニューモードに入っていらないバッファを削除しましょう (でも、バッファメニューモードもやはり、自分のバッファを生成しますけど)。
・ C-x C-b (list-buffers)          バッファメニュー モードに入る
・ d       (Buffer-menu-delete)    バッファに削除マークをつける
・ C-k     (Buffer-menu-delete)    バッファに削除マークをつける
・ x       (Buffer-menu-execute)   削除マークをつけたバッファを本当に削除
・ o       (Buffer-menu-other-window) バッファを別ウインドウで開く
・ f       (Buffer-menu-this-window) バッファをこのウインドウで開く
・ s       (Buffer-menu-save)      バッファを保存
・ %       (Buffer-menu-toggle-read-only) バッファの変更禁止を切り替え
・ m       (Buffer-menu-mark)      バッファをマーク
・ 1       (Buffer-menu-1-window)  ウインドウを全開にしてバッファを開く
・ 2       (Buffer-menu-2-window)  マークしたバッファを 2つのウインドウに開く
・ q       (Buffer-menu-quit)      バッファメニュー モードを抜ける
mh、dired、バッファメニューを使ってみると、たいていの操作は似ていることに気づくでしょう。どのモードでもマークして実行するという点では同じです。このように、コマンド体系の「くせ」を早くつかむことが、 emacs を早く体得するうえでのポイントです。

 
emacs はコメントを受け付けていません。

投稿者: : 2010/11/17 投稿先 Linux

 

コメントは受け付けていません。