Отступ комментариев в соответствии с кодом в VIM - PullRequest
43 голосов
/ 10 октября 2008

Я делаю все свое кодирование в 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;
  }

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

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

Ответы [ 4 ]

45 голосов
/ 10 октября 2008

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

filetype plugin indent on
syntax enable

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


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

17 голосов
/ 24 февраля 2010

Если вы используете параметр отступа «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», а затем «#» снова. Вы можете попробовать это самостоятельно и увидеть, что он не запускает автоматический вывод текста.

9 голосов
/ 10 октября 2008

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

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

Подробнее ...

7 голосов
/ 10 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...