Vim:カーソル位置を移動せずにファイル全体を整形する
正確に言うと「ファイル全体を整形した後にもとの位置に戻る」、です。
Vimでファイル全体を整形する場合、例えば次のような操作をします。
gg=G
この場合の不満は最初のgg
によりカーソルがファイル先頭に移動してしまうことです。
これを解消するには次のような操作にします。
gg=G''
(シングルクオート二つ。ダブルクオート一つではない)
''
の意味をヘルプから引用します。
:help ''
*''* *``*
'' `` カーソルがジャンプする直前にいた、もしくは最後の "m'"
か "m`" コマンドが行われた位置に移動します。
|:keepjumps| コマンドモディファイヤが使われた場合には
セットされません。
|restore-position| も参照。
これでカーソル行は動かずに整形を行えます。
列はその行の先頭に移動します。
列も移動しない場合はC-o
を使うといいかもしれません。
gg=G<C-o>
(gg=G
してからCtrl + o
)
:help CTRL-O
*CTRL-O*
CTRL-O ジャンプリストの中の [count] だけ古いカーソル位置に移
動します(移動コマンドではありません)。
{Vi にはありません}
{|+jumplist| 機能なしのときは使用できない}
「ぼくはVim script」という人は数行で実現できます。
" vimrcに記述 function! s:format_file() let view = winsaveview() normal gg=G silent call winrestview(view) endfunction nnoremap <Space>f :call <SID>format_file()<CR>
(この例ではSpace + f
にマッピングしています)