Почему vim не подчиняется моему расширению в файлах python?

После того, как я установил Vundle, мой vim больше не подчиняется настройкам expandtab, которые у меня были. Мои вкладки были установлены в 2 пробела, но теперь в файлах python это уже не так. Проблема вызывается этой строкой:

filetype plugin on

Что делает эта строка (требуется vundle)? Кроме того, что я могу сделать, чтобы убедиться, что мои настройки соблюдены?

Спасибо!

VIMRC: pastebin.com/tGmfCi78

Ответы

Ответ 1

Проблема заключается в том, что ваши настройки переопределяются плагином filetype, частью Vim. Проблема заключается в ftplugin/python.vim:

" As suggested by PEP8.
setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8

Плагин python пытается настроить исходный код по умолчанию PEP8, поэтому он настраивает tabstop. Вам понадобятся некоторые из этих плагинов, но вам может понадобиться настроить собственные автокоманды, чтобы исправить все, что вам не нравится.

Есть два способа сделать это. Если у вас есть папка ~/.vim, самый простой способ - добавить файл ~/.vim/after/ftplugin/python.vim:

" Here, you can set the setting directly, or call a command or function
" to help you.  We'll call a command, and then implement that command in
" your top-level vimrc to help keep things in one place.
SetupPython

В .vimrc добавить:

function! SetupPython()
    " Here, you can have the final say on what is set.  So
    " fixup any settings you don't like.
    setlocal softtabstop=2
    setlocal tabstop=2
    setlocal shiftwidth=2
endfunction
command! -bar SetupPython call SetupPython()

Последний бит просто позволяет вам вызывать функцию как SetupPython, а не call SetupPython() в последующем файле.

Другим способом является сохранение всего в вашем .vimrc, но вы используете автокоманду VimEnter для настройки autocommand FileType для python для установки ваших настроек. Ожидая, пока не будет запущен VimEnter, все остальные плагины успеют настроить свои автокоманды, поэтому ваш будет добавлен в конец списка. Это позволяет запускать после плагина python FileType autocommand и устанавливать собственные настройки. Это немного беспорядок, и механизм after/ выше - это предпочтительный способ сделать это.

FWIW, многие общие настройки, которые я сохраняю в функции SetupSource(), вызываемой из нескольких разных FileType s. Тогда у меня будет SetupPython() вызов SetupSource(). Это помогает сохранить некоторые функции немного чище и уменьшить некоторое дублирование. Если это поможет, взгляните на функции в моих vimfiles здесь: https://github.com/jszakmeister/vimfiles/blob/master/vimrc#L5328

Ответ 2

Переопределенные настройки

Может быть, настройки переопределяются языковыми настройками. Для получения дополнительной информации см. http://vim.wikia.com/wiki/Keep_your_vimrc_file_clean:

Быстрый способ начать работу - переместить все материалы, относящиеся к языку, из файла .vimrc в файл с именем .vim/ftplugin/language.vim(или $HOME/vimfiles/ftplugin/language.vim в Windows),

Проверьте эти местоположения для конкретного файла .vim на основе python.

Тип файла

Кажется, что Vundle требует filetype off, и я не уверен, что вы должны его снова включить. Там есть нить на странице github для Vundle, объясняющей, почему требуется filetype on. Возможно, это обеспечит некоторую проницательность.

Я также думаю, что filetype plugin indent on, за которым следует filetype on, является избыточным. В соответствии с vim help docs, первый включает обнаружение, плагин и отступ, а последний включает обнаружение и оставляет плагин и отступ неизменным:

Overview:                   *:filetype-overview*

command                     detection       plugin          indent

:filetype on                on              unchanged       unchanged
:filetype off               off             unchanged       unchanged
:filetype plugin on         on              on              unchanged
:filetype plugin off        unchanged       off             unchanged
:filetype indent on         on              unchanged       on
:filetype indent off        unchanged       unchanged       off
:filetype plugin indent on  on              on              on
:filetype plugin indent off unchanged       off             off