5

我正在尝试创建一个autocmd当我退出插入模式时将替换文件中所有空格的内容。但是,AFAIK 会让 Vim 记住该模式并删除其中已有的内容。

" Add function for remove tailing whitespaces
command! CleanupTrailingSpaces :%s/\s\+$//ge | :nohlsearch
autocmd InsertLeave * :CleanupTrailingSpaces

是否有一个标志:s[ubstitute]会使其不保存模式?

4

2 回答 2

8

这样的标志会很有用,但还不存在。但是,您可以像这样保存和重置寄存器:

" Add function for remove tailing whitespaces
command! CleanupTrailingSpaces let reset = @/ | %s/\s\+$//ge | let @/ = reset | nohlsearch
autocmd InsertLeave * :CleanupTrailingSpaces
于 2012-08-20T16:28:53.893 回答
3

我从vimcasts得到了类似的东西。:-)

function! <SID>StripTrailingWhitespaces()
    " Preparation: save last search, and cursor position.
    let _s=@/
    let l = line(".")
    let c = col(".")
    " Do the business:
    %s/\s\+$//e
    " Clean up: restore previous search history, and cursor position
    let @/=_s
    call cursor(l, c)
endfunction

nnoremap <silent> <F5> :call <SID>StripTrailingWhitespaces()<CR>
autocmd BufWritePre *.py,*.js :call <SID>StripTrailingWhitespaces()
于 2012-08-20T16:52:12.510 回答