Остановите vim от нарушения моего отступа в комментариях

Вопрос или проблема

По какой-то причине 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 и обратить внимание на настройки, которые могут конфликтовать с желаемым поведением.

  1. Отключение автоиндентации: Первым делом рекомендуется отключить автоматическую индентацию. Для этого добавьте следующую строку в ваш .vimrc:

    set nosmartindent
  2. Включение C-индентации: Затем активируйте C-индентацию:

    set cindent
  3. Настройки ключей индентации: Чтобы предотвратить удаление пробелов при добавлении символа # в начале строки, нужно обновить параметры cinkeys и indentkeys, исключив символ #. Для этого добавьте следующие строки:

    set cinkeys-=0#
    set indentkeys-=0#
  4. Активация плагинов тип файла: Если у вас включено автоматическое включение плагинов для работы с типами файлов, добавьте следующую строку:

    filetype plugin indent on
  5. Автоматические команды для типов файлов: Если вы столкнулись с проблемой в определённом типе файла (например, yaml), можно создать автоматическую команду, которая отключает indentexpr для этого типа файла. Например:

    autocmd FileType yaml set indentexpr=
  6. Проверка ваших настроек: После внесения изменений можно проверить текущие настройки, чтобы убедиться, что они применены. Используйте следующую команду:

    :verbose set autoindent? smartindent? cindent? cinkeys? indentexpr?

Эта команда покажет текущее состояние каждого из параметров и откуда они были установлены. Если вы видите, что значение установлено из другого файла конфигурации, это может помочь вам найти источник проблемы.

  1. Избегайте ненужных плагинов и настроек: Если у вас есть плагины или местоположения в настройках, которые могут переопределить ваши изменения, рассмотрите возможность их отключения или проверки, какие именно параметры они изменяют.

Следуя этим рекомендациям, вы сможете остановить Vim от удаления пробелов в комментариях и настроить желаемую индентацию в соответствии с вашими предпочтениями.

Оцените материал
Добавить комментарий

Капча загружается...