いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

vimで論理行と表示行を区別して移動する (hjkl, gh/gj/gk/gl)

f:id:gsf_zero1:20211217140202g:plain

以前の記事

vimでカーソル位置の単語をコマンド行に挿入 - いろいろ備忘録日記

現場でvim慣れていない人が知っておくと便利なTips - いろいろ備忘録日記

vim の3種類のビジュアルモード (v, V, Ctrl-v) - いろいろ備忘録日記

vim のビジュアルモードで使える o コマンド(端点移動) - いろいろ備忘録日記

vimで関数の中身を全部削除するコマンド (Inner Block, di{, ci{, vi{ ) - いろいろ備忘録日記

プログラミング時に便利なvimの選択モーション (i{, i(, i[, i", it) - いろいろ備忘録日記

プログラミング時に便利なvimのビジュアルモードコマンド (I, A, X, c) - いろいろ備忘録日記

vimのコマンドラインモードで一気に編集する (vim, command line mode, range) - いろいろ備忘録日記

vimでファイルの最後から始める (option, +) - いろいろ備忘録日記

vimでアクティブファイルのディレクトリを使って別のファイルを開く (%:h) - いろいろ備忘録日記

vimで開きたいファイルをvimに探してもらうようにする (:set path, :find) - いろいろ備忘録日記

概要

よく忘れるのでここにメモメモ。。。知っているとちょっと楽できます。

vimでは、「表示行」と「論理行」という概念があります。通常、これらは同じ行を指しますが

以下のように一行の長さが多くて、折り返してしまった場合、「表示行」と「論理行」が異なる状態となります。

f:id:gsf_zero1:20220227201928p:plain

論理行は行番号が示す行です。表示行は見たまんまの行を示します。

vimのhjklなどのコマンドは論理行に対して操作が行われます。

なので、上記のように折り返しがかかっている状態の場合、j とかを押すと一気に次の行まで行ってしまうのですが

場合によっては、表示行の一行下に行ってほしいときもあります。

表示行で移動する場合は、前にgを付与します。つまり

  • h は gh
  • j は gj
  • k は gk
  • l は gl
  • $ は g$
  • ^ は g^

という感じです。

実際にやってみると以下のイメージではカーソルは論理行の1行目の先頭にあります。

f:id:gsf_zero1:20220227202354p:plain

この状態で普通に j を押すと

f:id:gsf_zero1:20220227202419p:plain

論理行の2行目まで行ってしまいます。ここで、gj とすると

f:id:gsf_zero1:20220227202518p:plain

と表示行で移動してくれます。

たまに横にとっても長いデータがあって、折り返して表示されてしまっていて

その折り返しの2行目とかに移動したいけど、うまくいかないので l を押し続けて移動するとかやっていたりした経験がある場合は結構便利に感じるかもしれません。

参考情報


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。