有条件运行一个VIM格式



我有一个回调设置,该回调是在保存缓冲区后自动自动的代码(取决于文件类型(。我想避免在很长的文件中避免这种行为。当文件长于n行时,可以使:w:noa w相同吗?

直接实现您的要求是通过映射:w。通过使用:help map-expr,您可以动态反应条件(此处:缓冲区中的行数(:

:nnoremap <expr> :w ':' . (line('$') >= 1000 ? 'noa ' : '') . 'w'

请注意,覆盖内置的EX命令有更多强大的方法。(例如cmdalias.vim-为vim命令创建别名。(

推荐替代

映射的优点是您直接看到它具有什么影响(尽管您必须记住:noautocmd在这里有什么影响(,并且可以轻松影响/覆盖它。

但是,它与直接调用:update的映射或插件无法使用。我希望改用回调设置。您可能有

之类的东西
:autocmd BufWritePost <buffer> call AutoFormat()

我会介绍一个守护此类布尔国旗:

:autocmd BufWritePost <buffer> if exists('b:AutoFormat') && b:AutoFormat | call AutoFormat() | endif

,然后设置一个初始化它的钩子:

:autocmd BufWritePre <buffer> if ! exists('b:AutoFormat') | let b:AutoFormat = (line('$') < 1000) | endif

这样,您会看到是否启用了自动形式(甚至可以将b:AutoFormat放入状态线(,并且可以通过操纵标志来调整行为:

:let b:AutoFormat = 0   " Turn off auto-formatting even though the buffer is small.
:let b:AutoFormat = 1   " Force auto-formatting even though it's a large buffer.

相关内容

  • 没有找到相关文章

最新更新