🎸

ごめん、カーソル移動を効率的にするヘルシェイク矢野.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 → (自動でヒント表示) → マーカー入力 → そのまま継続
                         ↑自然な拡張↑

デモ

カーソル移動

move-hint

Visual mode

visual-hint

設定例

基本設定

プラグインをインストールして、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