【发布时间】:2021-01-29 17:44:39
【问题描述】:
从这个answer我执行了:
:set modeline | doautocmd BufRead
从那以后,我无法禁用 BufRead。
我可以打开一个文件并取消设置模式线:
:set nomodeline
:e!
:wq
但是当我重新打开同一个文件时,它的 modeline 会再次自动执行。
我试过noautocmd - autocmd-remove:
:noautocmd w BufRead
:noautocmd BufRead
:exe "au! BufRead *"
:au! BufRead
请注意,由于 BufRead,我想禁用所有自动执行,而不仅仅是由它设置的单个 事件,如下所述:https://stackoverflow.com/a/40173033/9391770
【问题讨论】:
-
我认为您对
BufRead有点困惑-该事件仅被创造性地重用于:doautocmd(任何事件都可以),以便在不重新加载缓冲区的情况下重新执行模式行-什么链接的问题是关于。现在您似乎在要求 opposite - 防止加载模式线。 -
我认为你从
:set nomodeline得到的结果好坏参半,因为它是一个缓冲区本地选项——只有从当前缓冲区打开的缓冲区才会观察到这一点。要坚持这一点,必须将命令放入您的~/.vimrc文件中,或使用:setglobal nomodeline。要完全关闭模式线,您也可以:set modelines=0- 此选项是全局选项,因此更易于处理。 -
非常感谢@IngoKarkat!很好的解释。我一点一点地尝试,但是在
:set modeline | doautocmd BufRead之前执行的文件中,我只能阻止在.vimrc 中运行一次模式行,我将您的代码:set modelines=0像:setglobal nomodeline单独放在.vimrc 中是不够的。 -
此外@Ingo,我创建了一个仅在受信任文件中运行模式行的映射,您可以检查一下吗?请。
nnoremap <leader>mdl <Esc>:set modelines=5<space><bar><space>:set modeline<space><bar><space>:e<space><bar><space>:set modelines=0<space><bar><space>:set nomodeline<CR>
标签: vim disable autocmd modeline