2014-01-19 3 views
1

У меня есть длинная строка кода, который мне нужно разделить на отдельные строки:Вставьте количество пробелов в замене

Method(new Namespace::ClassName(LongParameterName1, LongParameterName1, LongParameterName3)); 

Я хочу, чтобы разделить его следующим образом:

Method(new Namespace::ClassName(LongParameterName1, 
           LongParameterName1, 
           LongParameterName3)); 

регулярное выражение будет таким:

s:, :,\r       : 

Как установить количество пробелов, которые используются (если можно)?

ПРИМЕЧАНИЕ: У меня довольно большое количество строк, поэтому я хочу использовать регулярное выражение.

ответ

2

можно вычислить положение, в котором вы хотите начать имена переменных в следующих строках и используйте команду подстановки с выражением, как:

:let c = strridx(getline('.'), '(') 
:s/\v(,)/\=submatch(1) . "\r" . printf("%" . c . "s", " ")/g 

я написал их в две инструкции, чтобы избежать Markdown прокрутки, но вы могут присоединиться к ним с символом трубы.

Первая инструкция ищет позицию последних открывающих круглых скобок (первая начинается с конца). И вторая инструкция использует printf(), чтобы вставить это число пробелов после символа новой строки.

Это дает:

Method(new Namespace::ClassName(LongParameterName1, 
           LongParameterName1, 
           LongParameterName3)); 

Чтобы повторить эту задачу несколько раз, вы можете обернуть эти инструкции функции и вызывать их из команды :g. Надеюсь, вы поняли эту идею.

+0

Но нет собственного варианта для регулярного выражения, правильно? – Alex

+0

Это зависит от того, что вы имеете в виду ** ** **. Насколько мне известно, для выполнения операции в запасной части вы должны ее оценить. И это функция, реализованная в большинстве используемых двигателей регулярных выражений. – Birei

1

Вот как бы я это сделать:

  • установить макрос (qa «), что поиск следующего»,»(<escape>\,), хмель в режим редактирования и нажмите ввод (i<enter>), выйти записывая макросъемки (q)
  • переигровка, что макрос очень быстро, пока я не сделал с линией (@a затем @@)
  • заменить курсор на второй строке и начать запись нового макроса (qa «): I затем нажмите <space>, пока ваш параметр не достаточно вкладок, и перейти к следующей строке, заменяя курсор на первой carácter (<escape>j^), прекратить запись макроса (q)
  • и повторить, что окончательный макрос как первый (@a затем @@)

это выглядит менее элегантно, чем регулярные выражения, но ИМХО, когда пришло время, чтобы получить вещи сделаны, ну, это время, чтобы получить вещи сделать :)

1

Я хотел бы использовать регулярное выражение, а затем отступ. Например...

s:, :,\r:g 
V?Method<cr><cr>8> 

В реальной практике я бы, вероятно, использовать >....... вместо 8>, потому что это позволяет визуализировать, сколько вы отступов.

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