vim – 仅为编辑的行删除尾随的空格

前端之家收集整理的这篇文章主要介绍了vim – 仅为编辑的行删除尾随的空格前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经在我的. vimrc中添加了以下函数,以便在保存之前删除尾随的空格
  1. fun! <SID>StripTrailingWhitespaces()
  2. let l = line(".")
  3. let c = col(".")
  4. %s/\s\+$//e
  5. call cursor(l,c)
  6. endfun
  7.  
  8. autocmd BufWritePre *.h :call <SID>StripTrailingWhitespaces()
  9. autocmd BufWritePre *.cpp :call <SID>StripTrailingWhitespaces()
  10. autocmd BufWritePre *.c :call <SID>StripTrailingWhitespaces()

它工作得很好但是,在某些情况下,我只想从已编辑的行中删除尾随的空格.这是为了确保我的diff输出看起来像一些遗留代码文件一样,几乎所有的行都有尾随的空格,我不想用不必要的diff来加载我的代码审阅者.

diff -b现在不是一个解决方案,因为它也忽略了一行中的任何地方的空格,有时该更改足以包含在diff输出中.

所以我的问题是 – 是否可以从Vim中的文件中只删除在本次会话中编辑的行的尾随空格?

@H_502_9@
@H_502_9@
mMontu’s answer有正确的想法,但它不处理边缘的情况.也就是说,如果我将光标向下移动,然后备份,全部在编辑模式下,它不会接收到这些行的更改.如果我们想处理这个,那么我们需要存储用户访问的顶部和底部的行.这里有一些更强大的代码,将所有内容分组成函数
  1. fun! <SID>SetupTrailingWhitespaces()
  2. let curline = line('.')
  3. let b:insert_top = curline
  4. let b:insert_bottom = curline
  5. endfun
  6.  
  7. fun! <SID>UpdateTrailingWhitespace()
  8. let curline = line('.')
  9. if b:insert_top > curline
  10. let b:insert_top = curline
  11. elseif b:insert_bottom < curline
  12. let b:insert_bottom = curline
  13. endif
  14. endfun
  15.  
  16. fun! <SID>StripTrailingWhitespaces()
  17. let original_cursor = getpos('.')
  18. exe b:insert_top ',' b:insert_bottom 's/\s\+$//e'
  19. call setpos('.',original_cursor)
  20. endfun

现在我们在正确的时间调用这些函数

  1. autocmd InsertEnter * :call <SID>SetupTrailingWhitespaces()
  2. autocmd InsertLeave * :call <SID>StripTrailingWhitespaces()
  3. autocmd CursorMovedI * :call <SID>UpdateTrailingWhitespace()

或者,我写了a plugin,提供这个更新的功能,还有一些额外的功能,如正常模式下的剥离.

@H_502_9@

猜你在找的Bash相关文章