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

Запретить Vim от вставлять строку при вводе двоеточия (:) в Python

Всякий раз, когда я добавляю символ : в Vim в режиме Python, он либо:

  • вставляет строку
  • выделяет строку
  • ничего не делает

Что он даже пытается сделать, и как мне избавиться от этого поведения?

4b9b3361

Ответ 1

Некоторые клавиши при нажатии будут вызывать функцию отступа Vim, которая будет пытаться установить правильное количество отступов в текущей строке. (Вы можете вручную запустить это, набрав == в нормальном режиме.)

Вы можете изменить, какие клавиши запускают это поведение, но сначала вам нужно знать, какой режим отступов используется.

Сначала выполните :set indentexpr?. Если это непусто (я бы ожидал этого для Python), то используется режим indentexpr. В этом случае выполнение :set indentkeys? дает вам список триггерных ключей. Чтобы удалить двоеточие, выполните :setlocal indentkeys-=:.

Если indentexpr пуст, вы, вероятно, используете режим cindent, а :set cindent? сообщит вам, что установлен cindent. В этом случае сделайте то же самое, что и раньше, но используйте cinkeys вместо indentkeys. (Обратите внимание, что режим indentexpr имеет приоритет над режимом cindent.)

Ответ 2

Он пытается быть полезным. Если вы хотите отключить автоматический отступ для текущего файла,

:setlocal noautoindent
:setlocal nocindent
:setlocal nosmartindent
:setlocal indentexpr=

Или вы можете добавить набор в свой файл vimrc. Вы также можете сделать это для каждого типа файла. См. здесь

Ответ 3

Ответ Натана Григга поставил меня на правильный путь. Мне пришлось внести несколько изменений для моей настройки.

Мне пришлось использовать :setlocal indentkeys-=<:>, потому что в моем случае :set indentkeys? показал indentkeys=0{,0},!^F,o,O,e,<:>,=elif,=except.

Кроме того, размещение :setlocal indentkeys-=<:> в .vim/after/ftplugin/python.vim не помогло сделать изменение постоянным. Я обнаружил, что есть встроенный файл indent python vim, который запускается ПОСЛЕ этого файла после ftplugin.

Диагностировать, открыть файл Python для редактирования и запустить :scriptnames. Это покажет вам список всех скриптов vim, которые были запущены, в порядке приоритета. Сценарии внизу этого списка были применены совсем недавно и имеют приоритет. См. этот вопрос в SuperUser для получения дополнительной информации.

Когда я это сделал, он показал мне встроенный файл vim в /my-install-path/vim/7.4.1830/share/vim/vim74/indent/python.vim. Разумеется, это установило <:> как часть отступов.

Чтобы исправить это, я установил автокоманду в .vimrc, и это действительно последнее слово.

autocmd FileType python setlocal indentkeys-=<:>

Обновление

Мне пришлось добавить :setlocal indentkeys-=: в конце концов. Вот что у меня в моем .vimrc сейчас.

autocmd FileType python setlocal indentkeys-=<:>
autocmd FileType python setlocal indentkeys-=: