tabstop
- локальная настройка буфера. Это означает, что каждый буфер имеет собственное значение. Таким образом, устанавливая его из своего vimrc
, вы устанавливаете только глобальное значение по умолчанию, которое, вероятно, будет перезаписано ftplugin
и т. Д.
Код плагина находится в $VIMRUNTIME/ftplugin.vim
. Грубо говоря, он делает runtime! ftplugin/python.vim
. runtime!
отличается от source
в двух аспектах: (а) он ищет по :h 'runtimepath'
, а не в текущем каталоге; (б) он является источником всех найденных файлов (это то, что означает "взрыв"), а не только первого.
Итак, из-за (b), ftplugin
первые источники свой ~/.vim/ftplugin/python.vim
, а затем $VIMRUNTIME/ftplugin/python.vim
. По этой причине ваши настройки окончательно перезаписываются.
Вот почему обычно мы хотим ~/.vim/after/ftplugin/python.vim
. Также обратите внимание, что стандартные скрипты ftplugin защищают от множественного поиска:
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
....
Так что, если вы действительно этого хотите, вы можете поместить это поверх своего ~/.vim/ftplugin/python.vim
и исключить все вещи из $VIMRUNTIME/ftplugin/python.vim
. Хотя редко хотел.
Разница между
set
,
setglobal
и
setlocal
на самом деле является разницей между типами опций: global, local-to-buffer, local-to-window, global-local. Для простоты:
setglobal
устанавливает глобальное значение для опции,
setlocal
устанавливает локальное, а
set
делает что-то «разумное» (tm). В частности,
set tabstop=x
устанавливает как глобальные, так и локальные (текущий буфер) значения.