我有一个回调设置,该回调是在保存缓冲区后自动自动的代码(取决于文件类型(。我想避免在很长的文件中避免这种行为。当文件长于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.