2012-05-02 2 views

ответ

30

есть ВИМ конкретным регулярное выражение, чтобы сделать это

:%s/.*\n.*\n.*\n/\0\r/g 
  • % s является ВИМ команда экс на замену во всем файле
  • . * \ n - линия, включающая конец строки
  • \ 0 - это все согласованное выражение
  • \ r vim способ добавить новую строку (не \ n, как можно было бы ожидать)

Редактировать: если вы хотите что-либо еще, кроме новой строки, просто поместите текст перед \ r (правильно регулярное выражение спаслось, если он содержит несколько регулярных выражения символов)

+5

ВИМ также имеет '\ {п \}' ', что соответствует N' мест где шаблон. Например, я использовал это, чтобы вставить слово «GO» на каждую 100-ю строку (поскольку ввод '. * \ N' 100 раз утомительно):'% s/\ (. * \ N \) \ {100 \}/\ 0GO \ г/G'. Или, включив очень важный режим ('\ v') в регулярном выражении, он становится немного проще читать:'% s/\ v (. * \ N) {100}/\ 0GO \ r/' –

2

Я бы сделать это:

:%s/^/\=(line(".")%4==0?"\n":"")/g 

это работает, если ваше требование изменено на «* добавить новую пустую строку каждые 700 строк * с» :) вы просто меняете «4»

P.S. если мне это нужно, я не сделаю этого в vim. sed, awk, могли сделать это намного проще.

+0

Можете ли вы объяснить для меня, что означает каждый cmd? – Alisha

+0

'^' Представляет начало строки. Мы получаем Mod of число текущей строки на 4, если оно истинно (равно нулю), оно добавляет новую строку в качестве заместителя, иначе ничего не использует "". – SergioAraujo

12

Вы можете использовать macro. Весь процесс выглядит следующим образом:

qq  " start recording to register q (you could use any register from a to z) 
o  " insert an empty line below cursor 
<Esc> " switch to normal mode 
jjj " move the cursor 3 lines downward 
q  " stop recording 

Затем просто перейти на стартовую линию и тип [email protected] выполнить макрос 1000 раз.

+3

Последняя команда будет выглядеть так: 'qqoThis - это строка, которая добавляет jjjq' и, вероятно,' 333 @ q' (1000/3 = 333) –

+0

@Sam Vim перестанет запускать макрос, как только он ударит в конец файла. –

+0

Это также удобно, если вы хотите что-либо сделать с * концом * строки, а не вставлять новую строку перед 4-й строкой или аналогичной. – HitScan

5
" insert a blank line every 3 lines 

:%s/\v(.*\n){3}/&\r   

: .............. command 
% .............. all file 
s .............. replace 
/.............. start pattern that we will replace 
\v ............. very magic mode, see :h very-magic 
(.*\n) ......... everything including the line break 
{3} ............ quantifier 
/.............. start new pattern to replace 
& .............. corresponds to the pattern sought in (.*\n) 
\r ............. add line break 

источник: http://www.rayninfo.co.uk/vimtips.html

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