mieki256's diary



2010/08/26(木) [n年前の日記]

#4 [xyzzy][emacs] xyzzyで文字列を置換する際にカーソル位置の単語を取得できるのだけど、それをemacsでやりたい

xyzzy も emacs も、replace-string や query-replace で文字列を置換できるわけだけど。その際、バッファ上のカーソル位置にある単語を置換元文字列としてミニバッファ上にコピーしたいと思うわけで。

単純な置換をする場合、置換前の文字列は、既にバッファ上に存在する。ていうか。バッファ上に存在してる文字列を置換したいと思ったからこそ、置換を呼び出すわけで、実に当たり前の話。

で。既にバッファ上に文字列が存在しているのに、それを手入力で打ち込み直すなんて、実に馬鹿げている。目的とする文字列は既にバッファ上にあるのだから、そのままコピーして利用すればよろしい。となると問題は、「その文字列のコピー・貼り付け作業をどれだけ簡単に行うか」「どれだけ少ない手順で行うか」になってくる。

xyzzy なら、置換前文字列を入力する際に ―― ミニバッファ上に何かを入力しようとした際に、Homeキーを押すことで、バッファ上のカーソル位置の単語が順次ミニバッファへコピーされる。実に快適。少し調べてみたが、lisp/minibuf.l で、minibuffer-copy-word という関数が定義されていて、それが Home に割り当てられている模様。

さて、これと似たようなことを emacs でやるにはどうしたらよいのか。検索してみたが、そういう機能があるという話は見かけなかった。

一応、手作業でやれなくはない。
  1. 文字列をリージョンで選択して、
  2. M-wを押してコピーして、
  3. C-x C-x でコピーした文字列の先頭までカーソルを移動して、
  4. 置換を呼んで、
  5. C-y で貼り付けして、
という手順でも一応は行える。が、xyzyy の「Homeキー一発、もしくは連打でコピー」に比べると、手順が多くて面倒。

もう少し減らすこともできる。
  1. 置換を呼んで、
  2. M-/ でdabbrev(単語補完)を使ってバッファ上に存在する文字列の一部を打ち込んで文字列を選択。
でも、一部とは言え単語の手入力が発生する。微妙に馬鹿馬鹿しい。いい手はないものか。

置換とは何ぞや。 :

このあたり、色々考えるべき点があるような気もする。

例えば。xyzzy と emacs は、「順番」が違う。
  • 置換を呼んで、置換前文字列をコピー・貼り付けする。(xyzzy)
  • 置換前文字列をコピーして、置換を呼んで、貼り付けする。(emacs)
xyzzyは「置換する。○○を」だけど、emacsは「○○を。置換する」になってる。どちらが分かりやすいだろうか…? 一見すると後者だが、しかし前者は、「置換呼び出し→置換前文字列を指定→置換後文字列を指定」という、emacs系エディタの置換処理の順番に合致しているので、実はこちらのほうが、その場では自然に思えてくる。ような気もする。

また、リージョン(選択範囲)を、何の指定として用いるかという問題も。
  • リージョン範囲に対して置換はできない。(xyzzy) ―― その場合はあらかじめ narrow-to-region を使って対象範囲を「事前に用意」しておく。
  • リージョン範囲だけを置換できる。(emacs)
前者なら、リージョンを置換前文字列の取得に利用することも可能なのだけど。後者は、リージョンを置換を行う範囲として使ってしまうので、置換前文字列の取得には使えない。その代わり前者よりも、特定の範囲だけ置換、がやりやすいというメリットがある。

置換処理は、要求される項目がある。
  • 処理を行う範囲
  • 置換前文字列
  • 置換後文字列
置換後文字列については、コンピュータがソレを知る術はない。置換後文字列がバッファ上に存在しない場合も多々あるので、人間が手入力で打ち込んでやらないと、コンピュータがソレを知ることはできない。だからコレは比較的どうでもいい。手入力は避けられない。だが、他の2つは、既にバッファ上に情報が存在する。どれだけ少ない手順で、この2つを伝えてやるか。そこが問題になるのだろう。

…てな感じでモヤモヤと考えていたのだけど。そもそも置換を行う場面ってのは、一体どれだけあるのだろう…。頻繁に行うなら、手順を少なくすることが作業効率の改善に繋がるが、置換ってのはそう頻繁に行うことでもないような…。とっぴんぱらりのぷぅ。

isearch利用時のソレをメモ。 :

なんだか忘れてしまっていたのでメモ。C-sを押すと、isearch が使えるけれど、その直後 C-w を押すとカーソル位置の単語を取得して検索ができる。xyzzy も emacs も同じ。たしかそのはず。

検索時には、バッファ上の文字列をコピーすることの便利さにちゃんと気付いていたのに。なぜ置換時も便利だと気付かなかったんだろう…。>emacs。

以上です。

過去ログ表示

Prev - 2010/08 - Next
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project