Vim неправильно выделяет отступы в первой строке блоков Python

#python #vim #windows-subsystem-for-linux

#питон #vim #windows-subsystem-for-linux

Вопрос:

Недавно я установил Ubuntu на свой компьютер с Windows с помощью WSL. Я использовал его только для написания некоторого кода на Python и отправки этого кода на GitHub.

Моя проблема в том, что в какой-то момент прошлой ночью Vim прекратил автоиндентирование после запуска, например, цикла for. Если я сделаю отступ на одну строку, а затем нажму Enter, следующая строка будет с отступом.

Если я введу, например, «для x в mylist:[Enter]print(x)», то я увижу следующее

 for x in mylist:
print(x)
 

вместо того , чтобы

 for x in mylist:
  print(x)
 

My .vimrc — это

 set number
hi Comment ctermfg=White
set ai
set softtabstop=2
set expandtab
 

:set ft? ВОЗВРАТ filetype=python

:filetype ВОЗВРАТ filetype detection:ON plugin:OFF indent:OFF .

filetype plugin indent on не устраняет мою проблему.

Надеюсь, я здесь что-то упускаю. Я нашел много людей с похожими вопросами, но лучшие ответы, которые я видел, просто говорят о том, как проверить, включены ли определенные настройки, а не о том, что делать, если включение этих настроек не помогает. Кроме того, ни один из вопросов, похоже, не совсем совпадает с моим. Спасибо.

Ответ №1:

Правила отступов обрабатываются при получении FileType события. Который, в свою очередь, срабатывает по BufRead событию. Следовательно, вы должны иметь filetype indent on перед открытием свой файл. Или вручную повторно примените событие с :e помощью или :setf python или чего-либо еще.

Комментарии:

1. Отлично, спасибо вам! Это дает мне отступ в 8 пробелов; нужно ли мне что-то менять tabstop , чтобы исправить это?

2. @PeterOhaver Убедитесь, что у вас есть filetype plugin on (также перед открытием файла). Он ftplugin отвечает за настройку таких параметров, как tabstop , и т.д. shiftwidth