Emacsでカーソル移動、削除、マクロ実行などを繰り返したいときに手軽なのがC-uC-uの後に数字を入力すればその回数になるが、単にC-uだと4回、C-u C-uと2度押すと16回、3度押すと64回、という具合に、n度押すと4n回繰り返される。数字キーに手を伸ばさなくていいのですばやく操作できる。
しかし。4の次が16って飛びすぎじゃね?4回というのは「目の届く」「小さい範囲の」繰り返し回数として適度だが、16回となるといきなり「だいたいこのあたりぜんぶ」「もっとたくさん」といった鷹揚なニュアンスである。昔から「いち、にい、たくさん」と言うではないか。ナベアツもイチ、ニ、サン!で初めてアホになる。
というわけで、4, 8, 16, 64, 256, …のように8を挟むようにしてみた。

(defadvice universal-argument-more
  (before stop-by-eight-before-sixteen (arg) activate)
  "Stop by eight before sixteen."
  (and (consp arg)
       (let ((num (car arg)))
         (if (> 16 num) (ad-set-arg 0 `(,(/ num 2)))))))

使ってみると、これがけっこうしっくり来るんだな。C-u C-uだと多すぎだからC-u+コマンドを2回、というシーンはけっこうあるので、4から16と急加速する前に8を。スペースを8個削るとか、8行分コピーするとか、なかなか手頃なサイズです。
このなかなか表面化しないフラストレーションを言葉にしてくれた同僚のK君に感謝。
2013-12-04追記: (consp arg)条件を加えないとC-u 1 0 C-u 1で1を10個入力できなくなるので修正。

Tags :
Categories : Tech