Tôi thích sử dụng lệnh vim toàn cầu để hoàn thành các nhiệm vụ như thế này. Điều này áp dụng để thêm lần lặp vào đầu dòng hoặc sửa đổi một ký hiệu trong văn bản. Nó trông phức tạp hơn các giải pháp khác, nhưng là một mô hình khá linh hoạt để sử dụng khi bạn có nó tiện dụng, và dễ dàng sửa đổi mà không cần suy nghĩ nhiều.
Đầu tiên, chọn phạm vi của bạn (dòng nào bạn muốn áp dụng này). Tôi thường sử dụng các dấu (ví dụ ma
trên dòng đầu tiên và mb
trên dòng thứ hai, nhưng bạn cũng có thể sử dụng số dòng hoặc lựa chọn trực quan), sau đó nhập một sửa đổi của lệnh sau (hiện được điều chỉnh cho trường hợp sử dụng của bạn)
:let i=1|'a,'bg/^/s/^/\=i.". "/|let i=i+1
Giải cấu trúc
:let i=1
Điều này thiết lập biến i
với một giá trị bắt đầu. Thông thường danh sách bắt đầu bằng 1, vì vậy tôi đặt i thành 1.
|
Thanh bắt đầu một lệnh mới
'a,'b
Điều này đặt phạm vi của lệnh tiếp theo. Tôi đang đi từ đánh dấu a
đến đánh dấu b
, sẽ được đặt trên dòng đầu tiên và dòng cuối cùng trong danh sách của bạn.
g/^/
Đây là lệnh toàn cầu. Nó tìm kiếm tệp (hoặc phạm vi) cho một biểu thức chính quy định và sẽ thực thi phần còn lại của dòng lệnh trên mỗi dòng khớp. Tôi phù hợp với mọi dòng bằng cách tìm kiếm "đầu dòng". Nếu bạn có văn bản như
Item some txt
other text
Item second item
whatever
Item third
và chỉ muốn đặt các nhãn này ở phía trước Item
và bỏ qua các dòng khác, thực hiện g/Item/
hoặc g/^Item/
thay vào đó (giả sử văn bản Mục bằng chữ)
s/^/\=i.". "/
Điều này thực hiện biểu thức chính quy để thay thế phần đầu của dòng bằng giá trị được i
nối với a .
. Nói chung, bạn có thể làm điều này với bất cứ điều gì ( Item
ví dụ thay thế nhãn bằng số).
|let i=i+1
Mặc dù thanh bắt đầu một lệnh mới, nó sẽ thiết lập một lệnh thứ hai để chạy trong lệnh toàn cầu, thay vì sau khi toàn cầu hoàn tất. Kết quả là chúng tôi tăng i
trước khi dòng tiếp theo được xử lý bởi g. Đây là một nơi linh hoạt khác. Việc sửa đổi i có thể là bất cứ điều gì (tăng thêm 2, gọi một hàm tạo ra phần tử tiếp theo của chuỗi Fibonacci, bất cứ điều gì).
awk
có lẽ là công cụ cho công việc này. Nhưng tôi đang ở trên Windows (thở dài).