我从这个回答中执行了:
:set modeline | doautocmd BufRead从那时起,我就不能禁用BufRead。
我可以打开一个文件并撤销modeline
:set nomodeline
:e!
:wq但是当我重新打开同一个文件时,它的modeline再次自动执行。
我试过noautocmd - 自动remove删除
:noautocmd w BufRead
:noautocmd BufRead
:exe "au! BufRead *"
:au! BufRead注意:由于BufRead,我想禁用所有自动执行的事件,而不仅仅是它设置的单个事件,如这里所解释的:https://stackoverflow.com/a/40173033/9391770
发布于 2020-10-15 16:58:33
在链接问题中,BufRead事件只被创造性地重用为:doautocmd (任何事件都可以),这样就可以在不重新加载缓冲区的情况下重新执行模型。现在,您要求的是相反的--防止模型加载。
对应的选项是'modeline'和'modelines' --如果前者为off或后者设置为0,则将忽略modelines。
在我看来,给定的映射很好;它可以简化一点;您不需要拼写<space> (只有<bar>),除了前面,:可以删除,它用于从正常模式到命令行模式的转换。一个预置的<C-u>将清除任何计数(如果您不小心提供了一些)。
:nnoremap <leader>mdl :<C-u>set modelines=5<bar>set modeline<bar>edit <bar>set modelines=0<bar>set nomodeline<CR>插件简化
anwolib插件有一个很好的:With {setlocal-args} Do {cmd}命令;如果您只是针对(缓冲器-本地) 'modeline'选项进行切换(至少对我来说是足够的),则整个映射可以编写为
:nnoremap <leader>mdl :<C-u>With modeline Do edit<CR>这是如此清晰和易懂,以至于您几乎不再需要一个映射!
模型的安全影响
Modelines只能更改Vim选项--有些甚至被禁止更改,因为这些选项可能被利用;无法通过它们执行任意的Vim命令。虽然有些攻击是可以想象的(特别是如果您有一些插件或自定义来操作更改的缓冲区选项),但一般情况下,模型都是安全的。因此,除非你偏执于安全问题,或者在安全要求严格的环境中工作,否则你通常不需要采取这样的预防措施。当然,如果您根本不使用模型,关闭它们可以减少攻击面。但是至少对我来说,认识到modelines在执行时很方便,然后切换设置并重新加载缓冲区的努力会比它们所带来的最小风险更糟糕。
https://stackoverflow.com/questions/64368210
复制相似问题