論理行ではなく表示行で移動する方法
Vimには論理行(real line)と表示行(display line)があります。
set wrap設定が有効な場合(デフォルトでは有効です)、テキストの各行でウィンドウ幅を超えた部分は折り返されて表示され、途中が表示が省略されないようになっています。この結果、ファイル中の1行が画面上では複数の行で表示されることがあります。
set number設定を有効にしたときに表示される数字で始まる行が論理行に対応します。
論理行ではなく表示行で移動するには以下のようにgキーに続けて移動するキーを入力すればよいです。
コマンド | カーソル移動 |
---|---|
j | 論理行で1行下に移動 |
gj | 表示行で1行下に移動 |
k | 論理行で1行上に移動 |
gk | 表示行で1行下に移動 |
0 | 論理行の先頭の文字に移動 |
g0 | 表示行の先頭の文字に移動 |
^ | 論理行の空白以外の先頭の文字に移動 |
g^ | 表示行の空白以外の先頭の文字に移動 |
$ | 論理行の末尾に移動 |
g$ | 表示行の末尾に移動 |
論理行、表示行移動の再マッピング
jキーとkキーで、論理行ではなく表示行を移動するようにしたいときは、以下の設定をvimrcに追加します。これらのマッピングにより、jとkで表示行を上下に移動し、gjとgkにより論理行を上下に移動するようになります。
nnoremap k gk nnoremap gk k nnoremap j gj nnoremap gj j