Подтвердить что ты не робот

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

Я использую 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
4b9b3361

Ответ 1

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

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

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

Кажется, это так.


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

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

Ответ 2

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

filetype indent on

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

Ответ 3

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

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

Ответ 4

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