我完全剥离了我的配置,我留下了以下的CONFIG_PREEMPT_NONE
:
~/.vimrc
如果我打开一个python文件,然后检查filetype plugin indent on
设置,我会看到它继承了正确的设置(我认为来自expandtab
):
/usr/share/vim/vim74/ftplugin/python.vim:49
问题是当我在命令行上打开多个文件时(例如:setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8
),或者当我从vim a.py b.py
内打开多个窗口时。
以下是我进行实验的一些步骤,以及vim
的相应结果。
:set expandtab?
vim a.py b.py
a.py
expandtab
- 纵向拆分,两个缓冲区都有C-w v
和a.py
expandtab
- 现在包含:n
的缓冲区为b.py
,其他缓冲区为noexpandtab
expandtab
vim a.py
a.py
expandtab
- 纵向拆分,两个缓冲区都有C-w v
和a.py
expandtab
- 刚刚加载:e b.py
的缓冲区为b.py
,另一个保留为noexpandtab
expandtab
vim
noexpandtab
- 加载:e a.py
,a.py
expandtab
- 加载:e b.py
,b.py
noexpandtab
vim z.txt a.py b.py
z.txt
noexpandtab
- 已加载:n
已a.py
expandtab
- 已加载:n
已b.py
有人能理解这个吗?甚至重现它?
正如最后两个实验所示,不仅仅是离开初始缓冲区导致此行为的行为...... noexpandtab
的第一个文件表现出来,其他文件没有。
以下是filetype=python
的输出,我正在运行Ubuntu Server 14.04.5 LTS。
vim --version
答案 0 :(得分:0)
问题是由于/usr/share/vim/vim74/ftplugin/python.vim
中包含在Ubuntu 14.04.5(可能还有其他版本)中的错误。
要纠正,我已应用以下补丁: see pastebin(对于标签来说并不好用)
curl https://pastebin.com/raw/RyVB9mJH | sudo patch -d /usr/share/vim/vim74 -p1
我要感谢@DanLowe:
/usr/share/vim
个文件供我查看说明:
Ubuntu打包的ftplugin/python.vim
包含以下内容:
if exists('*<SID>Python_jump') | finish | endif
这将检查是否存在名为Python_jump
的脚本本地函数 - 如果它存在,它将会纾困。
稍后在文件中我们找到了有用的配置,特别是:
setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8
这完全解释了为什么第一个Python文件有expandtab
,而其他所有文件都有noexpandtab
。
相比之下,Dan提供的ftplugin/python.vim
的OSX版本在测试中包含脚本本地Python_jump
声明,如果它已经定义,则只是跳过它,并继续其余设置。
if !exists('*<SID>Python_jump')
fun! <SID>Python_jump(motion) range
let cnt = v:count1
let save = @/ " save last search pattern
mark '
while cnt > 0
silent! exe a:motion
let cnt = cnt - 1
endwhile
call histdel('/', -1)
let @/ = save " restore last search pattern
endfun
endif
vim74/debian.vim
中的以下行显示了这种蛮力的努力:
set runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim74,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after
是的,这是正确的......您可能正在设置的VIM
环境变量被强行覆盖。 Yay \ o /