Vim:如何覆盖全局设置?

时间:2014-01-24 01:45:08

标签: vim

~/.vimrc中,我有两行:

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时如何阻止:so ~/.vimrc更改?

3 个答案:

答案 0 :(得分:1)

由于这只是.vimrc的一个极端情况,我会解决这个问题,将条件重新应用于Vimscript缓冲区的本地设置:

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

请注意,对于buffer-local选项,您应该使用:setlocal而不是:set。否则,在编辑Vimscript后打开的任何新的非Vimscript缓冲区将错误地继承更大的文本宽度。

答案 1 :(得分: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

答案 2 :(得分:0)

textwidth设置是缓冲区的本地设置。设置vim文件类型时,您在每个缓冲区上运行autocmd。这将textwidth正确设置为200。然后重新提供~/.vimrc,将textwidth设置为80. FileType autocmd没有被激活。

解决方案是删除textwidth 80行。