ごめん、カーソル移動を効率的にするヘルシェイク矢野.vimのこと考えてた
この記事は、Vim駅伝2025年10月15日の記事です。
前回の記事は、482FさんのLua Neovim で斜体を無効化する です。
Vimでのカーソル移動は、hjklやw/b/eといったモーションキーを使うのが基本です。
が。画面に表示されているN行目のM文字目
に移動したいとき、何度もキーを繰り返し押す必要があります。当たり前の話です。しかし面倒であることには違いありません。
本来、位置Aに移動したいだけであって、キー入力は仕方なく行う行為です。なので対策したかったので対策しました。
対策:hit-a-hint系プラグイン
移動にキーをたくさん入力せねばならない
問題に対して、いくつかの解決案が存在します。
これらのプラグインは、画面上の単語にマーカーを表示し、そのマーカーをタイプすることで一気に移動できるhit-a-hint
機能を提供します。
タイプ数が大きく削減され、効率的な移動が可能になります。
既存プラグインの気になったところ
が。これらのプラグインには共通の課題があります。筆者にはありました。
hit-a-hintモードへの移行するコンテキストスイッチングが発生し、意識が分断されることです。
既存のhit-a-hintによる移動フロー
1. 特定のキー(例:`<Leader><Leader>w`)を押す
2. `移動モードに切り替わる`(コンテキストスイッチング)
3. マーカーが表示される
4. マーカーをタイプして移動
5. 通常モードに戻る
特に2のステップを課題と感じていました。これらは思考の流れを中断し、集中力を削ぎます。削がれました。
そこでhellshake-yano.vim
hellshake-yano.vimは、この課題を解決する別のアプローチを実装しました。
コンセプト:「だいたいこのあたり」へ雑に楽に移動できるようにする
hellshake-yano.vimの特徴は、通常のhjklやw/b/eの移動を自然に拡張する
点にあります:
何度かhjklなどのモーションキーを押す → 自動的にヒントが表示される → マーカーで一気に移動
特に、自動的にヒントが表示される点が重要です。これにより、モード切り替えが不要になり、思考の流れを中断しません。
主な特徴
1. コンテキストスイッチングが不要
最大の特徴
は、モード切り替えが不要な点です:
- hjklやw/b/eを普通に使う
- 一定回数(デフォルト3回)押すと、自動的にヒントが表示される
- 特別なキーを覚える必要がない
- 思考の流れを中断しない
2. ビジュアルモードでも動作
ビジュアルモードでの選択も同様にサポート:
" ビジュアルモードで選択中に、wを数回押すとヒントが表示される
v www → ヒント表示 → マーカーで一気に選択範囲を拡大
3. 日本語対応(分かち書き)
日本語テキストにも対応:
-
TinySegmenter
による形態素解析 -
助詞結合ルール
で自然な単語境界を認識 -
カスタム辞書
でプログラミング用語にも対応
例:「データベース接続処理」→「データベース」「接続」「処理」と適切に分割
なぜシームレスなのか?
従来のプラグインとの違いを図示すると:
従来のhit-a-hintプラグイン:
通常モード → [特別キー] → 移動モード → マーカー入力 → 通常モードに戻る
↑コンテキストスイッチング↑ ↑コンテキストスイッチング↑
hellshake-yano.vim:
通常モード → hjkl/wbe → (自動でヒント表示) → マーカー入力 → そのまま継続
↑自然な拡張↑
デモ
カーソル移動
Visual mode
設定例
基本設定
プラグインをインストールして、init.vimや.vimrcに以下を追加してから、hjkl/wbeを数回押してみてください。
let g:hellshake_yano = {
\ 'useJapanese': v:false,
\ 'useHintGroups': v:true,
\ 'perKeyMotionCount': {
\ 'w': 1, " wを1回押すだけでヒント表示
\ 'b': 1,
\ 'e': 1,
\ 'h': 2, " hjklは2回押すとヒント表示
\ 'j': 2,
\ 'k': 2,
\ 'l': 2,
\ },
\ 'perKeyMinLength': {
\ 'w': 3, " 3文字以上の単語にヒントを表示
\ 'b': 3,
\ 'e': 3,
\ },
\ }
日本語開発向け設定
let g:hellshake_yano = #{
\ useJapanese: v:true,
\ useTinySegmenter: v:true,
\ perKeyMinLength: #{
\ 'v': 1, " ビジュアル選択 - すべての文字
\ 'w': 3, " 単語移動 - 意味のある単語のみ
\ 'e': 2
\ },
\ enableHighlight: v:true
\ }
まとめ
hellshake-yano.vimは、少ないコンテキストスイッチングで画面内移動を効率化する
という、既存のhit-a-hint系プラグインを発展させたシームレスな使い心地を提供します。
メリット
- ✅
学習コストが低い
:通常のhjkl/wbeを使うだけ - ✅
思考を中断しない
:モード切り替えが不要 - ✅
日本語にも対応
:分かち書きで自然な移動 - ✅
ビジュアルモードでも使える
:選択操作も効率化
こんな人におすすめ
- Vimの基本操作には慣れているが、画面内移動をもっと効率化したい
- easymotion等を使っているが、モード切り替えに違和感がある
- キーバインドの割り当てを増やしたくない
- 日本語テキストでの編集が多い
- シームレスな編集体験を重視する
hjklで移動しているあいだに大切な時間がなくなっていると感じたら、ぜひhellshake-yano.vimを試してみてください。
Discussion