2014-01-24 111 views
0

~/.vimrc,我有两条线路:Vim:我如何覆盖全局设置?

set textwidth=80 
au FileType vim set textwidth=200 " I like to live dangerously 

当我打开VIM,set tw显示200,因为它应该。但是当我:source ~/.vimrc,set tw显示80。这是更加明确与set colorcolumn=+1

这是一个特别恼人的边缘情况下,因为有一次我会不断采购.vimrc正在编辑.vimrc,否则我可能会忽略这个问题。

我的问题:我做错了什么?如果是这样,我如何停止tw每次更改I :so ~/.vimrc

回答

0

可能不是一个好的解决方案,但你可以明确地防范它。

if !exists("g:conf_loaded") 
    " do things you only want to do once 
    set textwidth=80 
    let g:conf_loaded = 1 
endif 

或者你可以检测是否textwidth仍处于默认值:

if &textwidth == 0 
    set textwidth=80 
endif 
0

textwidth设置是当地的一个缓冲区。设置vim文件类型时,每个缓冲区都有一个autocmd运行。这将textwidth设置为200。然后,您重新输入~/.vimrc,将textwidth设置为80.FileType autocmd不会被刷新。

解决方法是删除textwidth 80行。

1

由于这只是一个极端例子为.vimrc,我会解决这个与条件是重新应用本地设置到Vimscript中的缓冲区:

set textwidth=80 
au FileType vim setlocal textwidth=200 " I like to live dangerously 
if &filetype ==# 'vim' 
    setlocal textwidth=200 
endif 

请注意,您应该使用:setlocal,而不是:set为缓冲区本地选项。否则,在编辑Vimscript后你打开的任何新的非Vimscript缓冲区将错误地继承较大的textwidth。