vimで現在のカーソル位置を取得する方法

vimで現在のカーソル位置の取得方法や、カーソルをvimスクリプトで移動させる方法について説明していきます。

webで検索してもなかなかvimのカーソル周りのvimスクリプト記事にたどり着けなかったので、ここに書き留めておきます。

カーソル位置・ファイル行数などの取得

カーソルの行、列を取得するためには、以下のline,col,getpos関数を使用します。

line()     -> returns line number
col()      -> returns column number
getpos()   -> returns list [ bufnum, lnum, col, off ]

getpos()関数は、値のリストを返します。[ バッファナンバー、行、列、off ]。
“off” の値は、’virtualedit’ がオフのときは常に0で、オンのときはその文字の始点からの画面上の桁のオフセットの値となります。詳しくは以下リンクで。
https://vim-jp.org/vimdoc-ja/eval.html#getpos()

現在位置の取得

:echo line(".")
:echo col(".")
:echo getpos(".")

行頭・列頭の位置を取得(当然両方とも0)

:echo line("0")
:echo col("0")
:echo getpos("0")

行末・列末の位置を取得
(つまり、開いているファイルの行数と、カーソル行の文字数が分かる)

:echo line("$")
:echo col("$")
:echo getpos("$")

ウィンドウの位置を取得
(現在表示されている行の先頭・末尾のindexを返す)

:echo line("w0")
:echo line("w$")
:echo getpos("w0")
:echo getpos("w$")

例えば、カーソルの位置が文書のどの位置にあるかを取得するには。。。
(パーセント表示)

	function! GetCursorPosPercent()
		return (100 * line('.') / line('$')) . '%'
	endfunction

このようになります。
このような情報をステータスラインに表示してみてはいかがでしょうか。

ステータスラインに表示されたカーソルの現在位置

カーソルを操作する

cursor(),setpos()関数で、カーソルの位置を移動できます。

:call setpos(40,5)

3行下、5列右に移動してみる。

:let pos = getpos(".")
:let pos[1] += 3
:let pos[2] += 5
:call setpos(".", pos)

こんな感じに色々カーソルポジジョンをいじることができます。

以上、vimで現在のカーソル位置を取得する方法についてでした。