我已经在我的.
vimrc中添加了以下函数,以便在保存之前删除尾随的空格
fun! <SID>StripTrailingWhitespaces() let l = line(".") let c = col(".") %s/\s\+$//e call cursor(l,c) endfun autocmd BufWritePre *.h :call <SID>StripTrailingWhitespaces() autocmd BufWritePre *.cpp :call <SID>StripTrailingWhitespaces() autocmd BufWritePre *.c :call <SID>StripTrailingWhitespaces()
它工作得很好但是,在某些情况下,我只想从已编辑的行中删除尾随的空格.这是为了确保我的diff输出看起来像一些遗留代码文件一样,几乎所有的行都有尾随的空格,我不想用不必要的diff来加载我的代码审阅者.
mMontu’s answer有正确的想法,但它不处理边缘的情况.也就是说,如果我将光标向下移动,然后备份,全部在编辑模式下,它不会接收到这些行的更改.如果我们想处理这个,那么我们需要存储用户访问的顶部和底部的行.这里有一些更强大的代码,将所有内容分组成函数:
fun! <SID>SetupTrailingWhitespaces() let curline = line('.') let b:insert_top = curline let b:insert_bottom = curline endfun fun! <SID>UpdateTrailingWhitespace() let curline = line('.') if b:insert_top > curline let b:insert_top = curline elseif b:insert_bottom < curline let b:insert_bottom = curline endif endfun fun! <SID>StripTrailingWhitespaces() let original_cursor = getpos('.') exe b:insert_top ',' b:insert_bottom 's/\s\+$//e' call setpos('.',original_cursor) endfun
autocmd InsertEnter * :call <SID>SetupTrailingWhitespaces() autocmd InsertLeave * :call <SID>StripTrailingWhitespaces() autocmd CursorMovedI * :call <SID>UpdateTrailingWhitespace()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。