vundle «отступ для плагина типа файла» путается с tabwidth


9

Вчера я установил vundle, и с тех пор, как я настроил табуляцию в моем vimrc, он игнорируется и возвращается к 4 вместо 2.

Я обнаружил, что следующая строка после абзаца vundle вызывает его:

filetype plugin indent on

Мой отступ настроен так:

set noexpandtab " Make sure that every file uses real tabs, not spaces
set shiftround  " Round indent to multiple of 'shiftwidth'
set smartindent " Do smart indenting when starting a new line
set autoindent  " Copy indent from current line, over to the new line

" Set the tab width
let s:tabwidth=2
exec 'set tabstop='    .s:tabwidth
exec 'set shiftwidth=' .s:tabwidth
exec 'set softtabstop='.s:tabwidth

Вы можете проверить мой полный vimrc здесь .

Я проверил проблему с отступами, используя скрипт на Python (где отступы действительно имеют значение).

Я уже попытался изменить filetype plugin indent onк , filetype plugin onно это ничего не меняет. Помогает только комментирование этой строки.
Теперь, как говорится в руководстве по установке vundle, эта строка обязательна.

Как мне исправить эту проблему с отступом? Могу ли я просто пропустить строку filetype или действительно обязательно хранить ее в vimrc?

Решение:

Благодаря @ChristianBrabandt и @romainl я нашел решение, которое также может находиться в одном файле vimrc:

filetype plugin indent on

[...]

set noexpandtab " Make sure that every file uses real tabs, not spaces
set shiftround  " Round indent to multiple of 'shiftwidth'
set autoindent  " Copy indent from current line, over to the new line

" Set the tab width
let s:tabwidth=2
au Filetype * let &l:tabstop = s:tabwidth
au Filetype * let &l:shiftwidth = s:tabwidth
au Filetype * let &l:softtabstop = s:tabwidth

Несмотря на то, что он не отвечает на ваш вопрос, я попытался использовать Vim-Plug вместо Vundle, и он отлично работал ...
nobe4

2
Посмотреть
часто

Вы также можете использовать новую автокоманду OptionSet для сброса настроек shiftwidth и softtabstop
Кристиан Брабандт,

Ответы:


10

Обо всем по порядку; строка ниже не имеет абсолютно никакого отношения к управлению Vundle или плагином:

filetype plugin indent on

Эта команда делает три вещи:

  • позволяет определять типы файлов,
  • включает специфичные для файлов сценарии (ftplugins),
  • включает специфичные для типа файла скрипты отступа.

Эта строка существует, потому что некоторые менеджеры плагинов должны убедиться, что обнаружение типов файлов отключено, прежде чем делать свое волшебство, а использование Vim для программирования будет намного сложнее без ftplugins и правильного отступа. По моему мнению, они должны просто иметь дело с обнаружением типов файлов внутри, но хорошо ...

В любом случае, ваша проблема вызвана чрезмерным владением ftp-плагинами, которые переопределяют ваши настройки отступов на свои. Ftplugin Python является наиболее распространенным преступником, потому что недавно было решено, что он должен обеспечить PEP8.

Самый простой выход - полностью отказаться от использования ftplugins:

filetype indent on

но они обычно идут с полезными вещами, поэтому этот метод не рекомендуется.

Самое чистое решение - оставить filetypeлинию в «оптимальном» состоянии:

filetype plugin indent on

и переопределите их переопределения своими собственными after/ftplugin/python.vim:

setlocal noexpandtab
setlocal shiftround
setlocal autoindent

let s:tabwidth=2
let &l:tabstop = s:tabwidth
let &l:shiftwidth = s:tabwidth
let &l:softtabstop = s:tabwidth

Ноты:

  • Я удалил, smartindentпотому что это не так уж умно для начала, и все равно не рекомендуется использовать скрипты отступа для конкретного типа файла.
  • Я заменил ваши :executeкоманды более чистыми :letкомандами, чтобы избежать ненужной конкатенации.

1
Если вы установите shiftwidthноль и softtabstop-1, это будет следовать настройке табуляции.
Кристиан Брабандт

спасибо за ваши объяснения. Я хотел бы сохранить большинство своих настроек в моем vimrc, потому что я хочу синхронизировать их с несколькими компьютерами. Я использовал ваше решение в моем vimrc и использовал ссылку faq @ChristianBrabandt, размещенную ниже моего вопроса, и она работает. Я отредактирую свой вопрос, чтобы включить мое решение.
wullxz

4

Проблема с отступом возникает из-за ftplugin, который загружает файл .vim, /usr/share/vim/vim-version-/ftplugin/-filetype-.vimкоторый переопределяет все, что у вас есть в этом .vimrcфайле. Вы можете узнать, где находится этот файл, выполнив следующую команду внутри vim :verbose set tabstop?. Вывод укажет вам файл, который переопределяет вашу конфигурацию.

В моем случае у меня были проблемы с конфигурацией отступов Python.

Простой способ решить эту проблему - сделать следующее:

Создайте папку .vim в своей домашней папке (если у вас ее нет)

cd ~/.vim
mkdir -p after/ftplugin/
cd ~/.vim/after/ftplugin/
vim python.vim

Добавьте следующее:

setlocal noexpandtab shiftwidth=4 softtabstop=4 tabstop=4

Измените все, что вы хотите в команде. Мой выглядит так, потому что я работаю с вкладками вместо пробелов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.