ViとVimに保存するときに末尾のスペースを自動的に削除する方法は?

ViとVimに保存するときに末尾のスペースを自動的に削除する方法は?

.vimrcファイルを保存するときに続くスペースを自動的に削除する設定はありますか?

理想的には、(安全のために)特定のファイルに対してのみこの機能を持ちたいと思います。*.rb

答え1

これはすべてのファイル(.vimrcファイル)に適用されます。

autocmd BufWritePre * :%s/\s\+$//e

これはRuby(.rb)ファイル(.vimrcファイル)でのみ機能します。

autocmd BufWritePre *.rb :%s/\s\+$//e

答え2

カーソル位置を維持するには、次のコマンドを使用します。

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.

使用も可能ですが、この場合は必要ありません。場所を取得()通過:

let save_cursor = getpos(".")
" Some replace command
call setpos('.', save_cursor)

" To list values to variables use:
let [bufnum, lnum, col, off] = getpos(".")

答え3

私のもの末尾のスペースプラグインの削除これにより、さまざまな単純な浮動小数点とは異なり、特殊な:autocmds場合も処理し、ユーザーに照会したり、末尾のスペースを含む書き込みを中断したりできます。

プラグインページには、代替へのリンクも含まれています。ビームチップウィキ

関連情報