Emacsでカーソルを移動させるコマンドは沢山あれど、avyほど早いものは多分無いでしょう。
avyはバッファの目的の場所にカーソルを最速で移動させます。
avyが用意しているコマンドはざっくりいうと、目的の場所のキーワードをタイプしてマッチした場所にカーソルを移動するだけです。候補の絞り込み機能がスマートなので愛用されています。
(use-package avy
:ensure t
:bind (;;("C-;" . avy-goto-char-2)
("C-;" . avy-goto-char-timer))
:config
(setq avy-timeout-seconds 0.2))
設定で唯一指定したのは(setq avy-timeout-seconds 0.2)
で、検索文字を入力してから0.2秒何もしない場合、ジャンプするキーを表示します。デフォルトでは0.5秒で長く感じたので短くしています。
とりあえずpythonのサンプルコードを用意しました。
def get_integer(prompt):
while True:
try:
value = int(input(prompt))
break
except ValueError:
print("Please enter an integer.")
return value
def add_numbers():
num_values = get_integer("How many numbers do you want to add? ")
total = 0
for i in range(num_values):
num = get_integer("Enter a number: ")
total += num
print("The total is:", total)
if __name__ == '__main__':
add_numbers()
Emacsでファイルを開いて、int
の部分にカーソルを移動してみます。
("C-;" avy-goto-char-timer)
を実行して、int
と打ち込みます。
水色で表示されたキーがジャンプキーです。その文字をタイプするとカーソルが移動します。下の画像の場合、目的の場所はs
キーで表現されています。s
をタイプし移動します。
avy-goto-char-timerが遅く感じる人へ
上の完成済みコードでコメントアウトしているのは2文字打ったらジャンプキーを表示してくれるコマンド("C-;" . avy-goto-char-2)
です。
こちらは、必ず2文字タイプしたら候補が表示されるので、0.2秒の待ち時間がありません。
しかし、個人的に少しミス入力がが多くてやめています。
例えば、移動先のキーワードがdef
の場合、avy-goto-char-2
ならば2文字のde
だけ打ち込みあとはジャンプキーを打つ必要があります。しかし、こういう時って、勢いでdef
と打ってしまいますよね。そうすると、ジャンプキーのf
の場所に勝手に移動します。
個人的には0.2秒我慢して打ちたい文字数で候補を表示してくれる("C-;" . avy-goto-char-timer)
を使っています。
avyのカーソル移動は慣れないとやや難しく感じます。僕も利用頻度はそこまで高く無いです。htmlのように目的の場所がネストしてて右側にある場合とかに、avyでババっと移動することがあります。要所要所で使っていくと力を発揮するパッケージです。