2013-04-26 52 views

回答

6

使用setlocal

autocmd bufreadpre *.txt setlocal textwidth=0 

,而不是set

使用setlocal确保您设置的值在当前缓冲区中设置,而不是在所有缓冲区中设置。

+0

我改成'setlocal',但问题仍然存在。 – 2013-04-26 15:34:45

+1

@PaulBaltescu:如果您正在编辑一个预先存在的文本文件,单独使用“textwidth”不会修改该行的大小,您必须选择全部并使用'gq'来包装行。 – 2013-04-26 16:31:38

6

首先,你的范围是错误的;全局默认使用:set:autocmd使用:setlocal作为缓冲区本地覆盖。

二,BufReadPre仅用于读取现有文件,而不是新文件;这就是为什么它第一次无法正常工作。相反,你应该使用BufNew,BufRead;这会捕获这两种情况,并且仅在之后应用文件被读取,所以当您使用模式行或在文件类型插件中设置时它仍然可以工作。

三,:autocmd解决方案一旦你有很多的自定义,往往会变得笨拙。如果您只想启用某些文件类型的设置,请将相应的:setlocal命令放入~/.vim/after/ftplugin/<filetype>.vim,其中<filetype>是实际的文件类型(例如java)。 (这需要你有:filetype plugin on;使用目录可以让你覆盖由$VIMRUNTIME/ftplugin/<filetype>.vim做过任何文件类型的默认设置)

+0

谢谢。我唯一需要注意的是,如果您保存了vim会话中的一个存在并进行此更改,则这些设置不会传播到已存在的hpp或cpp文件。但是,如果你使用hpp和cpp文件设置了一个新项目,这是行不通的。我的情况可能有一个解决方法,但是我只打开了2个选项卡和4个文件,因此重新创建会话非常简单。 – 2015-02-12 19:40:02

相关问题