1. Không khó để đạt được hành vi sử dụng thay thế hai bước:
:,$s/BEFORE/AFTER/gc|1,''-&&
Đầu tiên, lệnh thay thế được chạy cho mỗi dòng bắt đầu từ dòng hiện tại cho đến cuối tệp:
,$s/BEFORE/AFTER/gc
Sau đó, :substitute
lệnh đó được lặp lại với cùng một mẫu tìm kiếm, chuỗi thay thế và cờ, sử dụng :&
lệnh (xem :help :&
):
1,''-&&
Tuy nhiên, sau đó, thực hiện thay thế trên phạm vi các dòng từ dòng đầu tiên của tệp đến dòng mà dấu ngữ cảnh trước đó đã được đặt, trừ đi một. Vì :substitute
lệnh đầu tiên lưu trữ vị trí con trỏ trước khi bắt đầu thay thế thực tế, dòng được đánh địa chỉ bởi ''
là dòng hiện tại trước khi lệnh thay thế đó được chạy. ( ''
Địa chỉ đề cập đến
'
dấu hiệu giả; xem :help :range
và :help ''
để biết chi tiết.)
Lưu ý rằng lệnh thứ hai (sau |
dấu tách lệnh — xem
:help :bar
) không yêu cầu bất kỳ thay đổi nào khi mẫu hoặc cờ được thay đổi trong lệnh đầu tiên.
2. Để lưu một số thao tác nhập, để hiển thị khung của lệnh thay thế ở trên trong dòng lệnh, người ta có thể xác định ánh xạ ở chế độ Bình thường, như sau:
:noremap <leader>cs :,$s///gc\|1,''-&&<c-b><right><right><right><right>
Phần theo sau <c-b><right><right><right><right>
là cần thiết để di chuyển con trỏ đến đầu dòng lệnh ( <c-b>
) và sau đó bốn ký tự sang bên phải ( <right>
× 4), do đó đặt nó giữa hai dấu gạch chéo đầu tiên, sẵn sàng cho người dùng bắt đầu nhập mẫu tìm kiếm . Khi mẫu mong muốn và mẫu thay thế đã sẵn sàng, lệnh kết quả có thể được chạy bằng cách nhấn
Enter.
(Người ta có thể xem xét việc có //
thay vì ///
trong ánh xạ ở trên, nếu người ta thích nhập mẫu, thì hãy nhập dấu gạch chéo phân tách, theo sau là chuỗi thay thế, thay vì sử dụng mũi tên phải để di chuyển con trỏ qua dấu gạch chéo ngăn cách đã có sẵn bắt đầu phần thay thế.)
\vpattern
- mẫu 'rất kỳ diệu': ký tự không phải chữ và số được hiểu như là những biểu tượng regex đặc biệt (không thoát cần thiết)