Какую конфигурацию Vim наконец применяет после установки значений в .vimr c, ftplugin, после / ftplugin et c.? - PullRequest
0 голосов
/ 03 августа 2020

Я редактирую файл python. Мои текущие настройки для tabstop следующие (просто экспериментирую):

  • ~ / .vimr c: set tabstop=4
  • ~ / .vim / ftplugin / python .vim: set tabstop=2
  • Нет файла ~ / .vim / after / plugin / python .vim

set tabstop? показывает tabstop=8

verbose set tabstop? показывает tabstop=8. Последний набор из /usr/share/vim/vim80/ftplugin/python.vim

Мои вопросы:

  • Почему tabstop установлено на 8, хотя я явно установил его на 4 в .vimrc файле или 2 в ~/.vim/ftplugin/python.vim файле
  • Когда загружается каждый из файлов, т.е. ~/.vimrc, ~/.vim/ftplugin/python.vim, ~/.vim/after/plugin/python.vim, /usr/share/vim/vim80/ftplugin/python.vim?
  • Какой файл имеет приоритет и где должен Я определяю свои настройки, чтобы переопределить другие?
  • Чем set отличается от set local?

Было бы здорово, если бы кто-нибудь ответил на все эти вопросы. Это, безусловно, принесет пользу людям, особенно начинающим и промежуточным пользователям Vim, поскольку все эти концепции взаимосвязаны

Ответы [ 2 ]

2 голосов
/ 03 августа 2020

tabstop - это ширина пространства, представленного символом табуляции в файле, но ширина пространства, вставляемого при нажатии Tab на клавиатуре, контролируется softtabstop (если он установлен на ненулевое значение). Ничего странного не происходит ни с порядком оценки, ни с setlocal, ни с любыми другими вопросами, о которых вы спрашиваете.

См. Также Для чего используется softtabstop? на Vim StackExchange.

1 голос
/ 03 августа 2020
  1. tabstop - локальная настройка буфера. Это означает, что каждый буфер имеет собственное значение. Таким образом, устанавливая его из своего vimrc, вы устанавливаете только глобальное значение по умолчанию, которое, вероятно, будет перезаписано ftplugin и т. Д.

  2. Код плагина находится в $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 устанавливает как глобальные, так и локальные (текущий буфер) значения.
...