.vimrc
ファイルを保存するときに末尾の空白を自動的に削除する設定はありますか?
理想的には(安全のために)特定のファイルに対してのみこの機能を使用したい、例えば *.rb
.vimrc
ファイルを保存するときに末尾の空白を自動的に削除する設定はありますか?
理想的には(安全のために)特定のファイルに対してのみこの機能を使用したい、例えば *.rb
回答:
これはすべてのファイルに対して(.vimrcファイルで)動作します:
autocmd BufWritePre * :%s/\s\+$//e
これは(.vimrcファイルで)ruby(.rb)ファイルに対してのみ機能します:
autocmd BufWritePre *.rb :%s/\s\+$//e
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でも大きな議論があります。