2023年4月15日
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
と打ち込みます。intで引っかかる場所は全部で7箇所あります。
水色で表示されたキーがジャンプキーです。その文字をタイプするとカーソルが移動します。下の画像の場合、目的の場所は
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でババっと移動することがあります。要所要所で使っていくと力を発揮するパッケージです。
Ted
大学でコンセンサスアルゴリズムを研究。卒業後ベンチャー企業に入社してフルスタックでWebサービスを開発。現在は大手IT企業に転職し、プログラミングを行っている。AIにプログラマーの仕事を奪って欲しいと願っている。