调用函数而不添加到撤消列表

时间:2014-07-11 05:08:02

标签: vim

在我保存文件之前,我已经设置vim来修剪行末尾的空白,并确保如果我正在编辑.py文件,文件末尾只有一个空白行。但是,函数调用最终会在撤消历史记录中结束;如何在不能撤消这些功能的情况下运行这些功能?

fun! <SID>StripTrailingWhitespaces()
    let l = line(".")
    let c = col(".")
    %s/\s\+$//e
    call cursor(l, c)
endfun

autocmd FileType * autocmd BufWritePre <buffer> :call <SID>StripTrailingWhitespaces()

function TrimEndLines()
    let save_cursor = getpos(".")
    :silent! %s#\($\n\s*\)\+\%$##
    call setpos('.', save_cursor)
endfunction

au BufWritePre * call TrimEndLines()

function AppendEndLine()
    let save_cursor = getpos(".")
    :silent! %s/^\(.*\)\%$/\1\r/
    call setpos(".", save_cursor)
endfunction

au BufWritePre * call AppendEndLine()

1 个答案:

答案 0 :(得分:1)

您无法在不丢失撤消历史记录的情况下禁用撤消操作。想想撤消实现;如果你在那里有差距,那将会非常困难。

如果您不担心失去历史,

:set undolevels=-1

(然后恢复到之前的值)将会这样做。

此外,:undojoin可用于将两个独立的条目融合在一起。但在您的情况下,最好将(自动)更改保留在撤消历史记录中。

PS:有一些插件能够以更强大的方式实现尾部空白删除,例如:我的DeleteTrailingWhitespace plugin。 (插件页面包含指向其他插件的链接。)