H/LとPageUp/PageDownを共存させる設定
s-show
20 days前に投稿
0
License: MIT
LUA
vim.keymap.set('n', 'H', function() if vim.fn.line('.') == vim.fn.line('w0') then return '<PageUp>H' else return 'H' end end, { expr = true, desc = 'H to H and PageUp' } ) -- Lのマッピング(条件分岐あり) vim.keymap.set('n', 'L', function() if vim.fn.line('.') == vim.fn.line('w$') then return '<PageDown>Lzb' else return 'L' end end, { expr = true, desc = 'L to L and PageDown' } )
H/LとPageUp/PageDownを共存させる設定 (submode編) | Atusy's blog を少し改造した設定です。
この設定で実現できる動作は次のとおりです。
- カーソルがバッファの最上部以外にあるときに
Hをタイプすると通常のHを発行し、カーソルがバッファの最上部にあるときにHをタイプするとPageUpを発行してからHを発行してカーソルを PageUp 後のバッファの最上部に移動します。 - カーソルがバッファの最下部以外にあるときに
Lをタイプすると通常のLを発行し、カーソルがバッファの最下部にあるときにLをタイプするとPageDownを発行してからLzbを発行してカーソルを PageDown 後のバッファの最下部に移動します。
コードの簡単な説明
expr = trueを指定した「式マッピング」を使用。関数が返す文字列を Vim コマンドとして実行します。vim.fn.line('.'):現在のカーソル行番号vim.fn.line('w0') / 'w$':画面(ウィンドウ)の最上部/最下部の表示行番号- 条件分岐で「既に端にいるか」を判定し、必要に応じて
<PageUp>や<PageDown>を先頭に追加して返します。 Lの場合のみzbを付与。スクロール後にカーソルが下端中央に固定され、視認性が向上します。
メリット・特徴
- プラグイン不要:純粋な Neovim Lua API と Vim 組み込みコマンドのみで動作。設定ファイルの依存関係を増やしません。
- 連打対応:
H/Lを素早く連打してもカーソルがはみ出さず、ページ送り+端ジャンプが自動で連鎖します。 - 視認性維持:
zbにより下端へのジャンプ後もカーソル位置が安定し、次の編集に迷いません。 - 標準
H/Lとの互換性:Vim の H/L は元々「ファイル先頭/末尾」ではなく「画面端」を指すため、直感的な挙動と完全に一致します。
コメントを投稿するにはログインが必要です