Emacsで改行を含む置換とxml-modeのindent-region

実際には6月30日のネタだけど長くなるのでずらして書くなり。

minibuffer では \n ではなく C-q C-j

Emacs で改行コードを含む置換をやったことがなかったか避けてきたらしく、今まで知らなかった。

調べると以下のように書かれている。

8.2 Editing in the Minibuffer

The minibuffer is an Emacs buffer, albeit a peculiar one, and ""the usual Emacs commands are available for editing the argument ""text. (The prompt, however, is read-only, and cannot be changed.)

Since <RET> in the minibuffer is defined to exit the minibuffer, ""you can't use it to insert a newline in the minibuffer. To do ""that, type C-o or C-q C-j. (The newline character is really the ""ASCII character control-J.)

Minibuffer Edit - GNU Emacs Manual

てっきり \n や \\n で改行を表現するのかと思っていたけど、ハードタブを入力するのと同じく C-q に続けてコードそのものを入力するらしい。

ちなみに普段編集している際には Enter も C-j も C-m も同じように改行してくれるけど、

C-mCR
C-jLF

は厳密に区別されるので注意。また自分の環境では C-q RET は CR が入力された。これはもしかしたら設定で変更できるかもしれないけど、C-q C-j で覚えてしまう方が楽な気がする。

ところで、上記以外のコントロールコードも何がどれに割り当てられてるか知らないな…。と思ったらここにあった。

Control character - Wikipedia, the free encyclopedia

これだけ分かればとりあえず足りる、のかな?

xml-mode の indent には改行が必要

なんで改行コードを含む置換をしたくなったかと言うと、OOo の template の XML ファイルを編集する際に indent がなくて見にくかったから。Emacs の xml-mode で indent できるよって教えてもらったけどできなかったので、改行コードが要るのかと思って試してみたらこれが bingo.

具体的には

replace-string で > を >C-qC-j に置換

した。

More