Vim设置不断重置

Vim设置不断重置,vim,tmux,Vim,Tmux,我在tmux中使用vim。由于某些原因,我的vim设置不断重置--编辑--更多详细信息:具体来说,tabstop和autoindent被设置为默认值,即tabstop=8和noautoindent。我不认为是我的设置中有什么东西将它们设置为那样,因为当我键入:so$MYVIMRC时,它会从我的vimrc重置为正确的值。我想vim不知怎么地“忘记”了我的设置 我还没有弄清楚到底是什么原因造成的,但这种情况经常发生,几乎每隔几分钟就发生一次。当我关注另一个窗口或在tmux中切换窗格时,这种情况似乎最

我在tmux中使用vim。由于某些原因,我的vim设置不断重置--编辑--更多详细信息:具体来说,tabstop和autoindent被设置为默认值,即
tabstop=8
noautoindent
。我不认为是我的设置中有什么东西将它们设置为那样,因为当我键入
:so$MYVIMRC
时,它会从我的vimrc重置为正确的值。我想vim不知怎么地“忘记”了我的设置

我还没有弄清楚到底是什么原因造成的,但这种情况经常发生,几乎每隔几分钟就发生一次。当我关注另一个窗口或在tmux中切换窗格时,这种情况似乎最常见。但这并不是每次都会发生,有时只是在打字时发生。我不知道问题是什么,但它非常令人沮丧。而且,这种情况似乎在python中发生得最多,在javascript中发生得更少,在PHP或其他语言中发生得更少。虽然这可能是因为我大部分时间都在使用python和javascript

我之前遇到了一个问题,我的状态栏中出现了胡言乱语:。这解决了这个问题,但似乎导致了这个新问题

以下是我认为与.vimrc、.tmux.con和.bashrc相关的部分。这些都是我的设置,我没有包括键绑定

vimrc先生 .tmux.conf
您说过您使用javascript和python,并且在更改它们时注意到它们之间的差异。您确定这正在改变,而不是javascript和python的行为有所不同吗

注意病原体#infect()。您可能已经安装了类似syntastic的东西,而syntastic又将安装用于javascript和python的lint工具。这些工具可能具有特定于文件类型的缩进设置。如果您在python的PEP8之后有一些内容,那么它可能默认为间距,而不是缩进的制表符


选中.vim/ftplugin和.vim/ftdetect,可以将特定于文件类型的设置放在那里,这将覆盖在.vimrc中指定的默认行为。

某些设置是缓冲区或窗口的本地设置。缩进设置,例如
'shiftwidth'
'softtabstop'
'expandtab'
,是缓冲区的本地设置,而不是全局设置。这很有意义,因为不同的文件类型有不同的需求。python和makefile是需要完全不同缩进设置的类型的一个很好的例子

设置每个文件类型的缩进设置通常通过以下方式之一完成:

  • 对每个文件使用modeline。真恶心!(
    :h modeline
  • ~/.vimrc
    中使用
    autocmd
    。e、 g.
    autocmd文件类型c、cpp、cs、java setlocal shiftwidt=4 softtabstop=4 expandtab
  • 将这些设置置于
    ~/.vim/after/ftplugin/python.vim
    中。将
    python
    替换为您希望具有特定设置的任何文件类型
注意:您可以通过
:set ft?

就我个人而言,我喜欢after目录结构,因为它既漂亮又整洁,并且可以避免我的
~/.vimrc
文件中的混乱

有关更多帮助,请参阅:

:h local-options
:h 'sw
:h 'rtp
:h after-directory
:h ftplugin-overrule

具体重置/更改了哪些设置?缩进设置是否正在更改?如果是这种情况,那是因为这些选项是缓冲区的本地选项,而不是全局选项。您可能希望查看通过
:help
更改的每个选项。我还建议您看看“:h local-options”缩进和tabstop是我注意到最多的两个选项。我没有意识到这些设置有本地值和全局值。我希望具有与我在vimrc中定义的相同的tabstop和缩进功能,除非我明确指定,否则我不需要本地设置。有没有办法强迫vim对我打开的每个缓冲区使用我的vimrc中的设置?你发布的
.vimrc
没有tabstop设置,因此我不太明白
tabstop
如何恢复。不管怎样,在你注意到一个变化后,@ohlec
softtabstop=4
的输出是什么:详细设置缩进?我相信也设置了tabstop。。。正如我在运行
时所说的那样:$MYVIMRC
设置是正确的。那个冗长的命令真是太棒了!谢谢你。我认为这不是问题所在。当我执行:so$MYVIMRC时,它将tabstop和autoindent重置为我想要的值。所以我不认为在我的设置中有什么东西在改变它。它看起来更像是被重置为默认设置:tabstop=8,noautoindent等…这是一开始工作,直到它突然停止。运行
:verbose set autoindent?
将返回以下内容:
从~/.vim/after/ftplugin/python.vim自动缩进最后一个集。但是,以下是该文件的全部内容
set-softtabstop=4 set-autoindent
知道可能是什么原因吗?只想确保您在一行中有
set-softtabstop=4 autoindent
所有内容(而不是缺少的
set
)或者让他们在
~/.vim/after/ftplugin/python.vim
中的自己的行中将它们分隔为
set softtabstop=4
set autoindent
。分隔行,仅仅因为堆栈溢出上的注释格式看起来很奇怪。这两行中都有
set
,您不应该从~/.vim/after/ftplugin/python.vim
自动缩进最后一个集合。这是非常令人不安的,因为你在文件中说了相反的话。要特别小心,请确保从
~/.vimrc
中删除所有缩进设置。它们将不再需要。我已经这样做了,而且仍在进行中。。。我不知道这怎么可能。
export TERM=screen-256color
export TERM=screen-256color
:h local-options
:h 'sw
:h 'rtp
:h after-directory
:h ftplugin-overrule