Вопрос или проблема
По какой-то причине Vim считает, что все мои комментарии должны быть без отступов. Если я добавляю #
в начале строки, весь ведущий пробел внезапно удаляется. Как я могу это остановить?
У меня установлены Janus и NERDtree, если это имеет значение, вместе с многочисленными другими персональными настройками в моем .vimrc
, но ни одна из них (насколько я знаю) не могла бы вызвать такое поведение.
Меня никогда не устраивают ответы “установите все эти вещи на всякий случай”. Я настаиваю на том, чтобы знать, какие из этих параметров были установлены неправильно и как они были установлены. Вот команда, которая покажет вам значения всех соответствующих настроек, упомянутых здесь, а также где они были последний раз установлены. Если нет строки Last set from
, это значение по умолчанию. Нет смысла повторно устанавливать правильные значения по умолчанию.
:verbose set autoindent? smartindent? cindent? cinkeys? indentexpr?
noautoindent
nosmartindent
cindent
Last set from ~/.vim/vimrc
cinkeys=0{,0},0),:,!^F,o,O,e
Last set from ~/.vim/vimrc
indentexpr=
Нажмите ENTER или введите команду, чтобы продолжить
Смотрите: http://vimdoc.sourceforge.net/htmldoc/options.html#:set-verbose
Все, что мне нужно было сделать, чтобы это заработало — удалить set smartindent
из одного плагина и добавить в мой ~/.vim/vimrc
:
set cindent cinkeys-=0#
set expandtab shiftwidth=4 tabstop=4 softtabstop=4
Это была битва, которую я тоже вел и, кажется, наконец выиграл. Проблема в том, что есть десяток различных способов, как поведение может быть переопределено (плагинами/синтаксисами).
Вот все настройки, которые мне пришлось использовать, чтобы выиграть битву:
set nosmartindent
set cindent
filetype plugin indent on
set cinkeys-=0#
set indentkeys-=0#
autocmd FileType * set cindent "некоторые типы файлов переопределяют это
С помощью autocmd
первая set cindent
не должна быть необходима, но это одна из тех вещей, когда я продолжал добавлять строки, пока поведение не исчезло.
ссылаюсь на этот ответ:
http://vim.wikia.com/wiki/Restoring_indent_after_typing_hash
изменить на:
set nosmartindent
set cindent
set cinkeys-=0#
set indentkeys-=0#
или:
:inoremap # X<BS>#
Полностью согласен с @Bruno Bronowsky, что другие ответы, по сути, эквивалентны тому, чтобы использовать танк для стрижки травы, и очень не полезны в долгосрочной перспективе, так как вы никогда не узнаете, какая настройка действительно делает то или другое.
Тем не менее, я хотел бы объяснить, что подавляющее большинство этих проблем с отступами комментариев происходит конкретно из indentexpr
на нативном neovim. Т.е. если вы не сильно настраивали свой neovim (как, собственно, и люди в этих других ответах…), это, скорее всего, и будет проблемой.
Так как это функция, которая определена по-разному для каждого типа файла, лучший способ обойти это — создать автокоманду для типа файла, где у вас возникает эта проблема.
Например: у меня проблема была с файлами yaml
. Поэтому я добавил эту строку в свою конфигурацию ->
autocmd FileType yaml set indentexpr=
чтобы решить проблему и остановить vim/neovim от путаницы с моими отступами.
Я решил проблему, закомментировав set smartindent
.
Ответ или решение
Чтобы остановить Vim от изменения вашей индентации в комментариях, необходимо изменить несколько параметров в вашем конфигурационном файле .vimrc
и обратить внимание на настройки, которые могут конфликтовать с желаемым поведением.
-
Отключение автоиндентации: Первым делом рекомендуется отключить автоматическую индентацию. Для этого добавьте следующую строку в ваш
.vimrc
:set nosmartindent
-
Включение C-индентации: Затем активируйте C-индентацию:
set cindent
-
Настройки ключей индентации: Чтобы предотвратить удаление пробелов при добавлении символа
#
в начале строки, нужно обновить параметрыcinkeys
иindentkeys
, исключив символ#
. Для этого добавьте следующие строки:set cinkeys-=0# set indentkeys-=0#
-
Активация плагинов тип файла: Если у вас включено автоматическое включение плагинов для работы с типами файлов, добавьте следующую строку:
filetype plugin indent on
-
Автоматические команды для типов файлов: Если вы столкнулись с проблемой в определённом типе файла (например,
yaml
), можно создать автоматическую команду, которая отключаетindentexpr
для этого типа файла. Например:autocmd FileType yaml set indentexpr=
-
Проверка ваших настроек: После внесения изменений можно проверить текущие настройки, чтобы убедиться, что они применены. Используйте следующую команду:
:verbose set autoindent? smartindent? cindent? cinkeys? indentexpr?
Эта команда покажет текущее состояние каждого из параметров и откуда они были установлены. Если вы видите, что значение установлено из другого файла конфигурации, это может помочь вам найти источник проблемы.
- Избегайте ненужных плагинов и настроек: Если у вас есть плагины или местоположения в настройках, которые могут переопределить ваши изменения, рассмотрите возможность их отключения или проверки, какие именно параметры они изменяют.
Следуя этим рекомендациям, вы сможете остановить Vim от удаления пробелов в комментариях и настроить желаемую индентацию в соответствии с вашими предпочтениями.