2012-05-02 32 views

Trả lời

30

có một biểu thức chính quy vim cụ thể để làm điều đó

:%s/.*\n.*\n.*\n/\0\r/g 
  • % s là lệnh cũ vim để thay thế trong toàn bộ tập tin
  • . * \ n là một dòng bao gồm phần cuối của dòng
  • \ 0 là toàn bộ cụm từ được đối sánh
  • \ r vim cách để nói thêm một dòng mới (không \ n như mong đợi)

Chỉnh sửa: nếu bạn muốn bất cứ điều gì khác hơn một dòng mới, chỉ cần đặt văn bản trước \ r (đúng regex trốn thoát, nếu nó có chứa một số nhân vật regex)

+5

vim cũng có '\ {n \}' phù hợp 'lần xuất hiện n' của một mô hình. Ví dụ tôi sử dụng điều này để chèn từ 'GO' trên mỗi dòng 100 (như gõ '. * \ N' 100 lần trở nên tẻ nhạt):'% s/\ (. * \ N \) \ {100 \}/\ 0GO \ r/g'. Hoặc bằng cách kích hoạt chế độ ma thuật ('\ v') trong regex, nó trở nên đơn giản hơn một chút để đọc:'% s/\ v (. * \ N) {100}/\ 0GO \ r/' –

2

tôi sẽ làm điều này:

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

làm việc này nếu yêu cầu của bạn chuyển thành "* thêm một dòng trống mới mỗi 700 dòng * s" :) bạn chỉ cần thay đổi "4"

P.S. nếu tôi cần làm điều này, tôi sẽ không làm điều đó trong vim. sed, awk, có thể làm điều đó đơn giản hơn nhiều.

+0

Bạn có thể giải thích hay không với tôi những gì mỗi cmd là viết tắt của? – Alisha

+0

'^' Thể hiện sự bắt đầu của dòng. Chúng tôi đang nhận được Mod số của dòng hiện tại 4, nếu nó là đúng (bằng không) nó ses một dòng mới như là một substituition, nếu không nó không sử dụng gì "". – SergioAraujo

12

Bạn có thể sử dụng macro. Quá trình hoàn thành trông giống như:

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 

Sau đó chỉ cần di chuyển đến dòng bắt đầu và gõ [email protected] để thực hiện vĩ mô 1000 lần của bạn.

+3

Lệnh cuối cùng sẽ giống như 'qqoĐây là dòng để thêm jjjq' và có lẽ' 333 @ q' (1000/3 = 333) –

+0

@Sam Vim sẽ ngừng chạy macro ngay khi nó kết thúc tệp. –

+0

Điều này cũng hữu ích nếu bạn muốn làm bất cứ điều gì với * kết thúc * của một dòng thay vì chèn một dòng mới trước dòng thứ 4 hoặc tương tự. – 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 

nguồn: http://www.rayninfo.co.uk/vimtips.html

Các vấn đề liên quan