ありますか .vimrc
ファイルを保存するときに末尾の空白を自動的に削除するように設定しますか?
理想的には(安全のために)特定のファイルに対してのみこの機能を使用したいと考えています。 *.rb
これはすべてのファイルに対して(.vimrcファイルで)機能します。
autocmd BufWritePre * :%s/\s\+$//e
これは、Ruby(.rb)ファイルだけで(.vimrcファイルで)機能します。
autocmd BufWritePre *.rb :%s/\s\+$//e
カーソル位置を維持するには、次のようなものを使用します。
function! <SID>StripTrailingWhitespaces()
let l = line(".")
let c = col(".")
%s/\s\+$//e
call cursor(l, c)
endfun
そうでない場合、カーソルは保存後の最後の置換の行の先頭で終了します。
例:行末にスペースがあります122
、 あなたはオンラインです 982
と入力して:w
。位置を復元しないと、カーソルは行の先頭で終了します122
したがって、ワークフローを強制終了します。
autocmd
を使用して関数の呼び出しを設定します。いくつか例を示します。
" Using file extension
autocmd BufWritePre *.h,*.c,*.Java :call <SID>StripTrailingWhitespaces()
" Often files are not necessarily identified by extension, if so use e.g.:
autocmd BufWritePre * if &ft =~ 'sh\|Perl\|python' | :call <SID>StripTrailingWhitespaces() | endif
" Or if you want it to be called when file-type i set
autocmd FileType sh,Perl,python :call <SID>StripTrailingWhitespaces()
" etc.
また、この場合は必要ありませんが、 getpos() を使用できます。
let save_cursor = getpos(".")
" Some replace command
call setpos('.', save_cursor)
" To list values to variables use:
let [bufnum, lnum, col, off] = getpos(".")
私の DeleteTrailingWhitespaceプラグイン はこれを行い、さまざまな単純な:autocmds
とは対照的に、特殊なケースも処理し、ユーザーにクエリを実行したり、末尾の空白で書き込みを中止したりできます。
プラグインのページには、代替へのリンクが含まれています。 Vim Tips Wiki についても大きな議論があります。