我希望默认文本宽度为80个字符,除了一些文件扩展名之外txt.除了第一次编辑(和创建)txt文件外,以下行似乎有效.
setlocal textwidth=80
autocmd bufreadpre *.txt set textwidth=0
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?
使用 setlocal
autocmd bufreadpre *.txt setlocal textwidth=0
Run Code Online (Sandbox Code Playgroud)
而不是set.
随着setlocal你确保你设置的值在当前缓冲区设置,并不适用于所有的缓冲区.
首先,你的范围是错误的; 使用:set全球默认并:setlocal在缓冲区局部覆盖:autocmd.
其次,BufReadPre仅用于读取现有文件,而不是新文件; 这就是它第一次不起作用的原因.相反,你应该使用BufNew,BufRead; 这会捕获这两种情况,并且仅在读取文件后应用,因此在使用modelines或在filetype插件中设置时它仍然有效.
第三,:autocmd一旦你有很多自定义,解决方案往往变得笨拙.如果您只想为某些文件类型启用设置,请将相应的:setlocal命令放入~/.vim/after/ftplugin/<filetype>.vim,其中<filetype>是实际的文件类型(例如java).(这需要您拥有:filetype plugin on;使用after目录允许您覆盖由此完成的任何默认文件类型设置$VIMRUNTIME/ftplugin/<filetype>.vim.)