Vim:論理行ではなく表示行で移動する方法

スポンサーリンク

論理行ではなく表示行で移動する方法

Vimには論理行(real line)と表示行(display line)があります。

set wrap設定が有効な場合(デフォルトでは有効です)、テキストの各行でウィンドウ幅を超えた部分は折り返されて表示され、途中が表示が省略されないようになっています。この結果、ファイル中の1行が画面上では複数の行で表示されることがあります。

set number設定を有効にしたときに表示される数字で始まる行が論理行に対応します。

vim-real-display-line

論理行ではなく表示行で移動するには以下のようにgキーに続けて移動するキーを入力すればよいです。

コマンドカーソル移動
j論理行で1行下に移動
gj表示行で1行下に移動
k論理行で1行上に移動
gk表示行で1行下に移動
0論理行の先頭の文字に移動
g0表示行の先頭の文字に移動
^論理行の空白以外の先頭の文字に移動
g^表示行の空白以外の先頭の文字に移動
$論理行の末尾に移動
g$表示行の末尾に移動

論理行、表示行移動の再マッピング

jキーとkキーで、論理行ではなく表示行を移動するようにしたいときは、以下の設定をvimrcに追加します。これらのマッピングにより、jkで表示行を上下に移動し、gjgkにより論理行を上下に移動するようになります。

nnoremap k gk
nnoremap gk k
nnoremap j gj
nnoremap gj j