Vim автоматически удаляет отступы в комментариях Python [дубликат]


этот вопрос уже есть ответ здесь:

  • Как настроить vim, чтобы не помещать комментарии в начале строк при редактировании файлов python 8 ответов

Я использую Vim и редактирую скрипты Python.

Autoindent работает довольно хорошо в целом, но когда я начинаю новую строку и набираю'#', чтобы ввести комментарий, Vim отменяет эту линию для меня.

например, если есть

def foo():

и я нажимаю enter, Vim будет отступать правильно

def foo():
    pass

но, если вместо команды pass вводим #, он автоматически отключается

def foo():
# comment

class Thing():
    def __init__(self):
         pass
# comment line gets unindented all the way

мой .файл vimrc следующее. кто-нибудь знает, почему это происходит?

set tabstop=4
set smartindent
set shiftwidth=4
set expandtab
set backspace=indent,eol,start
set scrolloff=3
set statusline=%f%m%r%h%w [%Y %{&ff}] [%l/%L (%p%%)]
set laststatus=2
5 69

5 ответов:

задание smartindent on заставляет Vim вести себя так, как вы описываете для меня, тогда как с nosmartindent (что я обычно использую) он ведет себя так, как вы бы предпочли.

обновление: из документов на smartindent:

при вводе '#' в качестве первого символа в новую строку, отступ эта строка удаляется, ' # ' помещается в первый столбец. Выемка восстанавливается для следующей строки. Если вы не хотите этого, используйте эту отображение:": inoremap # X^H#", где ^H - вводится с помощью CTRL-V CTRL-H. При использовании команды "> > "строки, начинающиеся с"#", не сдвигаются право.

похоже на то.


обновление: вероятно, не нужно беспокоиться о следующем... Я оставлю его здесь для дополнительной информационной ценности. ; -)

если настройку nosmartindent не помогло, возможно, вы могли бы использовать :set команда -- без параметров -- чтобы получить список всех настроек, действующих в вашем сеансе Vim, затем вставьте его где-то (на Pastie возможно). Насколько я помню, есть еще несколько вариантов, которые влияют на автоматическое отступление.

в то время как сообщение Михала объясняет, что делает smartindent, вы можете сделать намного лучше, чем просто отключить его. Вы можете настроить его более по своему вкусу, или еще лучше, пусть Vim выбрать лучший отступ для вас. Со следующим в вашем vimrc вместо других настроек отступа:

filetype indent on

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

вы можете попробовать вариант только для файлов python:

autocmd BufRead *.py inoremap # X<c-h>#<space>

по какой-то неизвестной причине вышеприведенное поведение было вызвано, когда у меня было cindent on. Выключение его исправило это для меня. Никто из вышесказанного не помогло.

Если вы установите этот скрипт, вы получите правильный python (pep8) отступ:

http://www.vim.org/scripts/script.php?script_id=974