2012-01-26 31 views
13

Tôi đang cố gắng chỉnh sửa tệp cấu hình và muốn thêm một dòng mã cụ thể (trên dòng mới) bất cứ khi nào một chuỗi cụ thể được khớp ... mọi thứ tôi đã tìm kiếm cho tìm kiếm và thay thế, tôi đang tìm kiếm và nối thêm ...Tìm chuỗi và thêm dòng vào vi/vim

Trả lời

13

Trong vim\r là dòng mới. Vì vậy, bạn có thể làm một cái gì đó như thế này

%s/search string/&\rnew code/ 
+1

Để làm rõ. Khi sử dụng thay thế dấu và làm cho nó phụ thêm? Hay nó có chứa dòng bạn đang thay thế để bạn có thể thêm vào trước "% s/chuỗi tìm kiếm/\ rnewcode & /"? – VolatileStorm

+0

@Jaypal '% s /^.* chuỗi tìm kiếm. * $/& \ Rnew code /' có thể tốt hơn? Bạn có thể phá vỡ dòng ban đầu. ví dụ: nếu dòng là "chuỗi tìm kiếm = xyz" hoặc "chuỗi foosearch = chuỗi tìm kiếm" – Kent

+1

'\ r' là dòng mới trong chuỗi thay thế. Trong mẫu tìm kiếm '\ n' là dòng mới. – Benoit

0

Đây là những gì tôi sẽ làm:

:g/specific string/s/.*/&specific line of code 

Lệnh g lấy về tất cả các dòng có chứa specific string và sau đó áp dụng các lệnh s thay thế cho những dòng. Lệnh s thay thế toàn bộ phù hợp với nội dung của nó cộng với specific line of code

HTH

13

cá nhân, tôi nghĩ rằng sử dụng ": g" lệnh có lẽ là tốt hơn so với ": s" cho vấn đề này.

:g/key/norm owhat ever you want 

sẽ làm cho văn bản:

foo 
bar 
key 
foo2 
bar2 
key2 
blah 

tới:

foo 
bar 
key 
what ever you want 
foo2 
bar2 
key2 
what ever you want 
blah 

nếu bạn muốn thêm dòng mới phía trên dòng có chứa các mô hình, chỉ cần thay đổi nhỏ "o" để "O".

+0

tốt hơn so với 'norm o' là' put = 'bất cứ điều gì bạn muốn'' – Benoit

+0

@Benoit yep, đặt hoặc đặt! – Kent

+0

Nếu bạn có tùy chọn 'autoindent',' norm o' và 'norm O' có lợi thế có thể là chúng sẽ sử dụng cùng một thụt đầu dòng như dòng bạn đang tìm kiếm. – bdesham