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