在Vim中是否存在一个不能保存模式的标志?

时间:2012-08-20 16:14:57

标签: regex vim substitution

我正在尝试创建一个autocmd,当我退出插入模式时,它会替换文件中的所有空格。然而,AFAIK会使Vim记住模式并删除那里已有的模式。

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

是否有:s[ubstitute]的标志会使其无法保存模式?

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分: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()