emacs で単語削除と選択

http://www.amazon.co.jp/dp/4774155934/ref=as_li_qf_sp_asin_til?tag=miyaken-22&camp=243&creative=1615&linkCode=as1&creativeASIN=4774155934&adid=0NDST4E9AKNEN2085QW0

現在、Software Design の総集編 を購入して、「Emacsのトラノマキ」を読でいる。 時代を感じさせる記事もあるが、興味深いものもたくさんある。 特に2010年8月号が非常に面白かった。ちょこっと紹介する。

Emacs はマウスやカーソルを使わず、カーソル移動する際に単語をインクルメンタル検索する。 たとえば

This is a pen.

とあって、カーソルが「This」の上にあり、「pen」を「book」に変換したいとしよう。 「M-%」で置換を別にすると、次の手順を踏む

  1. C-s でインクリメンタルサーチを起動
  2. pと入力
  3. Return(カーソル上ではeの上)
  4. C-b で一文字戻る(2文字以上の時は M-b)
  5. M-d で単語削除

として、「book」入力する。 つまり、インクルメンタル検索で単語のはじめに持ってくることで単語を削除するまで5回キーを押すと言っている。

ただ、これは大げさで、実際は1つ減って4回である。 順検索では、「RET」でなく、「C-b」を直接押せば、検索が終わり、単語の最初に移動する。 また、「C-r」の逆検索だと、4は不要でRETで単語の最初に位置する。

まあ、ここはポイントでなく、「Emacsのトラノマキ」では、単語を削除する際に、単語の最初に移動して削除するのでなく、 途中でも単語として削除する方法を紹介していた。 通常の「kill-word (M-d)」はカーソルの位置から後ろの単語と認識されるところまでを削除する。 これを

この「kill-word-at-point」のelispコードをここで掲載するのは、もしかしたら営業妨害になるかもしれないので、載せません。 これにインスパイヤされて、「mark-word-at-point」というelispコードを作成した。

(defun mark-word-at-point ()
  (interactive)
  (let ((char (char-to-string (char-after (point)))))
    (cond
     ((string= " " char) (delete-horizontal-space))
     ((string-match "[\t\n -@\[-`{-~]" char) (mark-word ))
     (t (forward-char) (backward-word) (mark-word 1)))))
(global-set-key "\M-@" 'mark-word-at-point)

これで、単語の途中でも「M-@」で単語が選択できるようになった。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中