Визуальная замена блоков vim

Я хочу сделать отступ в комментариях в конце каждой строки следующего кода:

Point d_test = Point(5,-1);    //inCircle > 0
Point e_test = Point(5,-1);  //inCircle > 0
Point f_test = Point(5,-1); //inCircle > 0
Point g_test = Point(4,-5); //inCircle = 0
Point h_test = Point(3,-2); //inCircle < 0
Point i_test = Point(5,0); //inCircle < 0
Point j_test = Point(5,0); //inCircle < 0

Я пытаюсь использовать визуальный выбор блока, выбирая блок с комментариями. Затем я пытаюсь использовать подстановку следующим образом:: '<,'>s / \% V ^ \ s + \% V // g

Я сделал несколько попыток, но безуспешно:( . Могу поспорить, есть лучший способ сделать это.

Конечный результат, который я ищу:

Point d_test = Point(5,-1);   //inCircle > 0
Point e_test = Point(5,-1);   //inCircle > 0
Point f_test = Point(5,-1);   //inCircle > 0
Point g_test = Point(4,-5);   //inCircle = 0
Point h_test = Point(3,-2);   //inCircle < 0
Point i_test = Point(5,0);    //inCircle < 0
Point j_test = Point(5,0);    //inCircle < 0

Спасибо.

2 ответа

Решение

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

Мне особенно нравится решать эту проблему с помощью vim-easy-align, где вы можете сделать отступ с помощью комментариев :EasyAlign /\/\// {'ig': []}

Редактировать: Easy Align игнорирует комментарии по умолчанию. Поэтому, чтобы выровнять комментарии, вы должны изменить ignore_groups параметр. Обновлен ответ, чтобы отразить это.

Вы также можете достичь этого с помощью макроса.

Предполагая, что курсор находится в первой строке в обычном режиме, затем: j qa0f;10a [Esc]32|dwjq 5@a Следует отформатировать все строки.

Этот макрос работает так:

  • qa: запись макроса в буфер a
  • 0: перейти к началу строки
  • f;: Найти ; персонаж
  • 10a [Esc]: вставить 10 пробелов, перейти в обычный режим
  • 32|: переместить курсор в строку 32
  • dw: удалить текущее слово (лишние пробелы до следующего слова)
  • jq: перейти к следующей строке и завершить запись макроса
  • 5@a: применить макрос, записанный в буфере a пять раз

Надеюсь это поможет.

Другие вопросы по тегам