加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 18:37:44 所属栏目:安全 来源:网络整理
导读:我已经在我的. vimrc中添加了以下函数,以便在保存之前删除尾随的空格 fun! SIDStripTrailingWhitespaces() let l = line(".") let c = col(".") %s/s+$//e call cursor(l,c) endfun autocmd BufWritePre *.h :call SIDStripTrailingWhitespaces()autocmd B
我已经在我的. 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来加载我的代码审阅者.

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

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

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()

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读