memo471 : Emacs

Created Tue Apr 26 10:37:37 2011
Last Modified Mon May 2 16:06:55 2011

*#1 Tue Apr 26 10:37:37 2011 / Tue Apr 26 10:37:46 2011

*前に同じ趣旨で作ったような・・・

*#2 Tue Apr 26 10:46:24 2011 / Tue Apr 26 14:56:18 2011

[機能]
Emacsの用語って誰が考えたの?

[表記説明]
C ... たいていの場合コントロール(Ctrl)キー
M ... エスケープまたはAltキー
RET ... リターン
SPC ... スペース

[基本]-----------------------------------------------------
終了操作、ファイル操作、コピペ、アンドゥ

*Emacsの終了
C-x C-c

*中止
C-g … 何か変なことになっていると思ったらとりあえずC-g.3回ぐらい。

*ファイルを訪問(ファイルを開く)
C-x C-f [ファイルの場所]

*ファイルにセーブ(上書き保存)
C-x C-s

*ファイルにセーブ(名前を付けて保存)
C-x C-w [ファイルの場所]

*マークセット
C-SPC または C-@ … マーク地点からカーソルまでの範囲が「リージョン」となる

*コピー
リージョンの中身がリアルタイムで自動的にコピーされる。
ある瞬間のリージョンを明示的にコピーしたい場合は M-w.

*リージョンキル(カット)
リージョンがある状態でC-w

*行キル(行カット)
C-k … カーソル位置から行末までをカットする。ただし、通常は行末の改行文字は残る。他に何もせずC-kだけを連打すると、消えた分すべてがコピーされる。

カーソル位置が行末の場合のみ改行文字をキル。

*ヤンク(ペースト)
C-y … たいていの場合、他のプログラムでコピーしたものはEmacsにC-yでペーストできる。逆ができるのは半々ぐらい。

*マークを解除(リージョン消える)
C-g

*アンドゥ
C-/ or C-_ (アンダースコア) … 明示的なリドゥはない。アンドゥ後に他の操作を挟むと、次のアンドゥがリドゥ的な働きをする(なんだこの説明は・・・)。

(※気にしなくてもいい注…上記マーク・コピペ関連のコマンドは、マークが暫定マークモードになっていることを前提に記述)


[バッファ・フレーム・ウィンドウ関連]-----------------------
ウィンドウの分割と切り替え

*ウィンドウを縦に2分割
C-x 2

*ウィンドウを横に2分割
C-x 3

*カレントウィンドウ(現在編集しているウィンドウ)を消去
C-x 0

*カレントウィンドウ以外を消去
C-x 1

*表示するファイルの切り替え(バッファ切り替え)
C-x b バッファ名(Tabで補完)

*ウィンドウ切り替え
C-x o (順)

*全ウィンドウでスクロールを同期
M-x scroll-all-mode

 


[検索・置換]-----------------------------------------------
文章内の検索と置き換え

*ふつーの前方検索
C-s [検査文字列] … C-sを押すたびに次の一致部分へジャンプする。

*ふつーの後方検索
s->rと読み替える

*正規表現前方検索
C-M-s or 適当な前置引数 C-s … C-1とかが押しやすいかも(C-1 C-s とする)。

*正規表現後方検索
上記をs->rと読み替える

*全置換
M-x replace-string RET [検索文字列] RET [置換文字列]

*逐次置換
M-x query-replace RET [検索文字列] RET [置換文字列]

*正規表現全置換
M-x replace-regexp RET [検索パターン] RET [置換パターン]

*正規表現逐次置換
M-x query-regexp RET [検索パターン] RET [置換パターン]


[矩形選択]-------------------------------------------------
マーク位置とカーソル位置とが張る矩形(長方形)の領域を特殊なリージョンとして扱うコマンド類について。

*矩形リージョンの削除(空いたスペースを切り詰める)
(マークが有効な時) C-x r d

*矩形リージョンの削除(切り詰めない)
(マークが有効な時) C-x r c

*矩形リージョンのキル(カット)
(マークが有効な時) C-x r k

*矩形リージョンのヤンク(ペースト)
C-x r y … カーソル位置を左上隅として、矩形リージョンが張りこまれる。元々あったものは押し出されるので注意。

*矩形リージョンへの書き込み
(マークが有効な時) C-x r t [入力文字列] RET … 矩形リージョンの各行が入力文字列で置き換えられる。入力文字列の長さが矩形リージョンより大きい場合は、リージョンの左側のものは押し出される。

*矩形リージョンをスペースで満たす
(マークが有効な時) C-x r o










*#3 Tue Apr 26 15:19:13 2011 / Tue Apr 26 16:47:28 2011

[Emacs アンドゥについて]
Emacsのアンドゥはリドゥを兼ねる。
これについては以下のように考えるとわかりやすい気がする。

・3つのアクション 1,2,3をこの順番で行う。
このときのアクションの履歴を次のように書く:

123

左から順にアクション番号を積み重ねていくわけである。
さて、ここで1回アンドゥを行ったときの様子を次のように書く:

123U

大文字Uでアンドゥを表すことにする。
アンドゥは1つにつきその左にある文字1つを消す、と考えると、上記は次に等しい:

12

もう1度アンドゥをすると、

123UU

となる。UとUが打ち消しあうのはまずいので、「連続するUはお互いを打ち消さない」というルールを設けることで、めでたく123UU=1となる。
さて、この状況で、リドゥを1回行う:

123UUR

Rをリドゥとする。リドゥは左にあるUを1つ「打ち消」して、123U = 12 とする。
もう1つリドゥを加えると

123UURR

となるが、連続したRについてもUと同じようなルールを適用すると、=123となる。
さて、さらにもう1つリドゥを加えると

123UURRR = 123R

となってリドゥが1つ余る。
のだが、これは 123R = 12 となる。
つまりUとRはお互いに対する動作が異なるだけで、それ以外については同じ働きをする。

ちなみに

123URUU = 123U(RU)U = 123UUU ではなく
123URUU = 123
となる。

******
要は右から順番にひとかたまりずつ適用していけばよいのだ。

*#4 Mon May 2 16:05:35 2011 / Mon May 2 16:06:55 2011

[正規表現]

例) "10" の後に数字(0-9)または大文字(A-Z)がつくとき、"10"を"20"に置き換える

Emacsでのコマンド:
M-x replace-regexp
10\([0-9A-Z]\)
20\1

-----------------------------------------------------------------
"\("と"\)"で囲んだ部分はグループ化され、後で"\n"(nは整数)と書くことで使える。
nは、左から数えた開きカッコ\(の順番。
[]の中身では、多数の文字をひとくくりにする特殊な記法が使える。
[0-9] は 0|1|2|3|4|5|6|7|8|9 に等しい。
[A-Z] は、、、推測するべし。

*Linked from: