【问题标题】:Call a function without adding to undo list [duplicate]调用函数而不添加到撤消列表[重复]
【发布时间】:2014-09-01 15:34:17
【问题描述】:

在我保存文件之前,我已经设置了 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()

【问题讨论】:

  • 出于好奇,为什么要在 python 脚本的末尾多出一个空行?
  • 原因很多,总结的很好:stackoverflow.com/questions/729692/…PEP8推荐。
  • 嗯……不,PEP8 中没有提到该建议,如果有建议,文件的最后一行将以换行符结尾,而不是空的。 Vim 已经以换行符结束每一行,除非你另有说明。

标签: vim


【解决方案1】:

您无法在不丢失撤消历史记录的情况下禁用撤消。想想撤销的实现;如果你有一个缺口,那就很难了。

如果您不担心丢失历史记录,

:set undolevels=-1

(然后恢复到以前的值)就可以了。

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

PS:有些插件以更健壮的方式实现尾随空格删除,例如我的DeleteTrailingWhitespace plugin。 (插件页面有其他插件的链接。)

【讨论】:

  • 你说得对,谢谢。
猜你喜欢
  • 2018-01-18
  • 2017-03-02
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
  • 2013-03-18
  • 2019-11-06
  • 2012-02-28
相关资源
最近更新 更多