2016-01-13 2 views
3
/** 
* Definition for an interval. 
* struct Interval { 
*  int start; 
*  int end; 
*  Interval() : start(0), end(0) {} 
*  Interval(int s, int e) : start(s), end(e) {} 
* }; 
*/ 

У меня есть этот формат код и хочу непрокомментировать структуры в Vim на что-то вроде этого:удалить первый N символы в Vim от выбранной линии

/** 
* Definition for an interval. 
*/ 
struct Interval { 
    int start; 
    int end; 
    Interval() : start(0), end(0) {} 
    Interval(int s, int e) : start(s), end(e) {} 
}; 

прямо сейчас я просто использую это:% s/\ s * \ s // gc удалить '*', но это также повлияет на строку '* Определение для интервала.', не уверен, что vim может выбрать, какую строку я хочу заменить. Или, если есть еще один лучший способ переместить * для комментария.

ответ

1

Вы можете отметить линии с режимом визуальной линии Сдвигv, а затем использовать что-то вроде одного из них:

" Remove leading space, asterisk, space 
:s/\s\*\s// 

" Remove leading 3 characters on line, whatever they are 
:s/^...// 

Затем переместите комментарий близко */ вверх, где комментарий теперь должен конец.

4

Есть точно 47.337 способов сделать то, что вы хотите. Вот один ...

Move - :m - соответствие первая линия */ - /\*\/ - выше первой линии, соответствующей struct - ?struct? -:

:/\*\//m?struct?- 

Результат:

/** 
* Definition for an interval. 
*/ 
* struct Interval { 
*  int start; 
*  int end; 
*  Interval() : start(0), end(0) {} 
*  Interval(int s, int e) : start(s), end(e) {} 
* }; 

Отрежьте три первых символы - :normal 3x - каждой строки между строкой чуть ниже текущей - + - и первая строка, соответствующая }; - /};/ -:

:+,/};/norm 3x 

Результат:

/** 
* Definition for an interval. 
*/ 
struct Interval { 
    int start; 
    int end; 
    Interval() : start(0), end(0) {} 
    Interval(int s, int e) : start(s), end(e) {} 
}; 
1

Еще один из способов 47.337 ... использовать режим визуального блока.

Первый ход курсор к строке 3 (3G), затем

<ctrl-v>6jlldO */<esc> 

или более переносимый способ:

<ctrl-v>/*\/<cr>ldO */<esc> 

Btw: Вы можете легко узнать, сколько строк вы должны двигаться вниз (6j -part), если вы включаете относительные номера строк с :set relativenumber

Смежные вопросы