vimで最終行が空行だったら保存時に最終行を削除する方法

More than 1 year has passed since last update.

コーディング規約とかで最終行を削除しないといけない場合があると思う。その場合に便利なcodeを書いてみた。
やってることとしては:wのcallbackを使って保存時に削除してる。
方法はvimrcへ以下を追記するだけ。

追記: @thincaさんにリファクタリングされたコード教えてもらいました。

autocmd BufWritePre * call s:remove_line_in_last_line()

function! s:remove_line_in_last_line()
  if getline('$') == ""
     $delete _
  endif
endfunction

使ってるメソッド

getlineとは

行を取得するメソッド

echo getline('.')   " カレントバッファのカレント行を取得
echo getline(4)     " カレントバッファの4行目を取得
echo getline(4,8)   " カレントバッファの4~8行目をリストで取得
echo getline(0,'$') " 先頭~行末まで取得

lineとは

script.viml
line('.') " 今いる行を取得
line("$") " 最終行を取得

executeとは

vimlでは:line('$')deleteというようなことが出来ないため、executeメソッドを使う。
execute line('$') . "delete"のように.で連結すれば最後の行の数字とdeleteメソッドを使える。

参考記事

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.