2012-07-03 71 views
61

Trong Vim, tôi có văn bản sau đây.Cách thêm văn bản ở cuối mỗi dòng trong Vim?

key => value1 
key => value2 
key => value1111 
key => value12 
key => value1122222 

Tôi muốn thêm "," ở cuối mỗi dòng. Văn bản trước đó sẽ trở thành như sau:

key => value1, 
key => value2, 
key => value1111, 
key => value12, 
key => value1122222, 

Có ai biết cách thực hiện việc này không? Có thể sử dụng khối hình ảnh để thực hiện việc này không?

+0

Câu hỏi tương tự [tại đây] (http://stackoverflow.com/questions/594448/how-can-i-add-to-the-end-of-each-line-in-vim). – glts

+0

Một trong những lý do tôi yêu thích ... Nhiều cách để làm mọi thứ, và tất cả những điều này đều hiệu quả và trông thanh lịch. – 0xc0de

Trả lời

103

này sẽ làm điều đó cho mọi dòng trong file:

:%s/$/,/ 

Nếu bạn muốn tập hợp các dòng thay vì toàn bộ tệp, bạn có thể chỉ định chúng thay cho số %.

Một cách là chọn một hình ảnh và sau đó nhập :. Nó sẽ điền vào :'<,'> cho bạn, sau đó bạn gõ phần còn lại của nó (Chú ý bạn chỉ cần thêm s/$ /, /)

:'<,'>s/$/,/ 
+4

Hàng cuối cùng có thêm ''', phải là ':' <,'> s/$ /, /'. – cjg

16

chế độ cũ là dễ nhất:

:%s/$/, 

: - enter command mode 
% - for every line 
s/ - substitute 
$ - the end of the line 
/- and change it to 
, - a comma 
1
:%s/$/,/g 

$ phù hợp cuối dòng

+2

Điều đó cũng sẽ thêm '$' vào dòng, không chỉ ','. – ZyX

+2

'/ g' được sử dụng để thực hiện thay thế trên mọi lần xuất hiện trong một dòng. Bởi vì chỉ có một '$' trong một dòng, bạn có thể thả nó một cách an toàn. – romainl

+0

Có lỗi của tôi trên, $. và/g là từ habbit, và có nó là tùy chọn. – kalhartt

10

Lệnh thay thế có thể được áp dụng cho một lựa chọn hình ảnh. Tạo khối hình ảnh trên các dòng mà bạn muốn thay đổi và nhập : và lưu ý rằng dòng lệnh được khởi tạo như sau: :'<,'>. Điều này có nghĩa rằng các lệnh thay thế sẽ hoạt động vào việc lựa chọn hình ảnh, như vậy:

:'<,'>s/$/,/ 

Và đây là thay một mà nên làm việc ví dụ của bạn, giả định rằng bạn thực sự muốn dấu phẩy ở cuối mỗi dòng như bạn đã đề cập. Nếu có dấu không gian, sau đó bạn có thể cần phải điều chỉnh các lệnh cho phù hợp:

:'<,'>s/\s*$/,/ 

này sẽ thay thế bất kỳ số lượng khoảng trắng trước khi kết thúc phù hợp với một dấu phẩy, có hiệu quả loại bỏ dấu khoảng trắng.

Các lệnh giống nhau có thể hoạt động trên một loạt các dòng, ví dụ: cho 5 dòng tiếp theo: :,+5s/$/,/ hoặc cho toàn bộ bộ đệm: :%s/$/,/.

34

Một giải pháp khác, sử dụng một tính năng tuyệt vời:

:'<,'>norm A, 

Xem :help :normal.

+6

Tôi thích những câu trả lời này thể hiện một tính năng ít được biết đến của vim. – Swiss

+0

@Swiss, bạn sẽ thích [nhận xét này] (http://stackoverflow.com/questions/11303032/how-to-add-text-at-the-end-of-the-each-line-in-vim/ 11305004 # comment14879144_11306510), sau đó. – romainl

+0

@Swiss, bạn cũng có thể thích [udioca's exposé] (http://www.reddit.com/r/vimgolf/comments/wmtep/abusing_macros_part_1_normal/) trên ': normal'. Tôi tìm thấy nó thông tin! – Conner

3

Nếu bạn muốn thêm '' ở cuối của các dòng bắt đầu bằng 'chìa khóa', sử dụng:

:%s/key.*$/&, 
+0

Hoặc ': g/key/s/$ /,'. Xem ': help: global'. – romainl

102

Có là trong thực tế một cách để làm điều sử dụng chế độ khối trực quan này. Đơn giản chỉ cần nhấn $A trong chế độ khối Hình ảnh nối thêm vào cuối tất cả các dòng trong vùng chọn. Văn bản được thêm vào sẽ xuất hiện trên tất cả các dòng ngay khi bạn nhấn Esc.

Vì vậy, đây là một giải pháp khả thi:

vip<C-V>$A,<Esc> 

Đó là, trong chế độ bình thường, Visual chọn một đoạn văn vip, chuyển sang chế độ Visual khối CTRLV, phụ thêm vào tất cả các dòng $A dấu phẩy ,, sau đó nhấn Esc để xác nhận.

Tài liệu có tại :h v_b_A. Thậm chí còn có một minh họa về cách nó hoạt động trong phần ví dụ: :h v_b_A_example.

+0

Huh, không hoạt động đối với tôi ... Tính năng mới trong phiên bản mới hơn 7.2? Nghe hay đấy – weronika

+1

Không, đây là tiêu chuẩn Vim: Chọn một số dòng trong chế độ khối Visual (với 'C-V') sau đó di chuyển con trỏ đến cuối dòng' $ 'và nối thêm vào tất cả chúng' A'. Bạn sẽ yêu thích [': h v_b_A'] (http://vimdoc.sourceforge.net/htmldoc/visual.html#v_b_A), điều này thực sự toàn diện. – glts

+1

Ồ, tôi hiểu chuyện gì đang xảy ra! Tôi thường sử dụng Ctrl-C thay vì để thoát khỏi chế độ chèn, và rõ ràng với Ctrl-C, điều này không hoạt động! Thật lạ lùng. – weronika

1

Tôi có <M-DOWN> (mũi tên xuống) được ánh xạ tới <DOWN>. để tôi có thể lặp lại lệnh cuối cùng trên một loạt các dòng rất nhanh. với ánh xạ này tôi có thể:

A,<ESC> 

Và sau đó giữ phím Alt trong khi nhấn xuống nhiều lần để nối dấu phẩy vào cuối mỗi dòng.
Điều này làm việc tốt cho tôi vì nó cho phép kiểm soát rất tốt những gì các dòng làm và không nhận được sự thay đổi.
(Tôi cũng đã các mũi tên khác ánh xạ tương tự để cho phép dễ dàng lặp lại của .)

Đây là dòng bản đồ để dán vào vimrc của bạn:

map <M-DOWN> <DOWN>. 
Các vấn đề liên quan