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

Отступы комментарии к коду соответствия в vim

Я делаю все свое кодирование в vim и очень доволен этим (так что, пожалуйста, не используйте ответы "другого редактора" ), но испытываете постоянное раздражение в том, что функция smartindent хочет не отступать от комментариев, начиная С# at все. например, я хочу

  # Do something
  $x = $x + 1;
  if ($y) {
    # Do something else
    $y = $y + $z;
  }

вместо предпочтительного vim

# Do something
  $x = $x + 1;
  if ($y) {
# Do something else
    $y = $y + $z;
  }

Единственные способы, с помощью которых я мог предотвратить отправку комментариев в начало строки, - это либо вставить, либо удалить символ на линии перед ударом # (неудобство, которое нужно помнить, чтобы делать каждый раз) или поворачивать (потеря автоматического увеличения и уменьшения отступов при открытии/закрытии фигурных скобок).

Как установить vim для сохранения отступов для комментариев вместо отправки их в начало строки?

4b9b3361

Ответ 1

Похоже, вы кодируете Perl. Убедитесь, что в вашем .vimrc установлены следующие параметры:

filetype plugin indent on
syntax enable

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


Примечание: наличие set smartindent и/или set autoindent в ~/.vimrc может помешать работе решения. Если у вас проблемы, найдите их.

Ответ 2

Если вы используете параметр отступов "smartindent", исправление для вашей проблемы объясняется в документации VIM ": help smartindent":

    When typing '#' as the first character in a new line, the indent for
    that line is removed, the '#' is put in the first column.  The indent
    is restored for the next line.  If you don't want this, use this
    mapping: ":inoremap # X^H#", where ^H is entered with CTRL-V CTRL-H.
    When using the ">>" command, lines starting with '#' are not shifted
    right.

Я использую "smartindent" и могу подтвердить, что описанное исправление работает для меня. Он обманывает VIM, заменяя нажатие клавиши "#" на ввод "X", затем нажимая "backspace", а затем снова набрав "#". Вы можете попробовать это самостоятельно и увидеть, что он не вызывает автоматическое outdenting.

Ответ 3

Эта проблема может быть решена путем помещения в файл _vimrc следующего содержания.

set cindent
set cinkeys=0{,0},!^F,o,O,e " default is: 0{,0},0),:,0#,!^F,o,O,e

Дополнительная информация...

Ответ 4

Я думаю, что "smartindent" предназначен для C, поэтому он считает, что "#" - это начало предпроцессорной директивы вместо комментария. Я не знаю, для чего это решение, за исключением того, что вы вводите пробел, затем обратно, а затем "#" это не сделает.