Tôi thường sử dụng các macro cực dài khi xử lý chỉnh sửa và tái cấu trúc lặp đi lặp lại. Bất cứ khi nào có thể tôi đều viết chúng dưới dạng các lệnh của chế độ cũ thay vì ghi chúng dưới dạng macro, bởi vì chúng dễ dàng chỉnh sửa tương tác theo cách đó (với cửa sổ lệnh).
Tuy nhiên, đôi khi tôi cần thêm vào một vài lệnh chế độ thông thường, ví dụ: chỉ lấy một phần của dòng chứ không phải toàn bộ dòng để sử dụng sau này trong macro của tôi hoặc sắp xếp một số văn bản theo cách tôi muốn.
Có cách nào để tiếp tục lệnh ex mode sau khi norm
được đưa vào không?
(Đối với một ví dụ thực tế về loại phức tạp mà tôi đang nói đến :)
:'a+s/\_^\s*\(\S*\)::\_[^>]*>\s*\("[^"]*"\)\s*;\_s*\_$/ "\1", \2,/ | m 'a- | norm f,50a ^[d44|
Có cách nào để tôi có thể thêm nhiều văn bản vào cuối và để nó thực thi như một lệnh chế độ cũ không?
:execute
sẽ chỉ truyền chuỗi dưới dạng đối số :normal
và vì vậy, phần sau sẽ không thấy những gì sau dòng lệnh, cho phép bạn thêm các lệnh Ex khác. Chỉ có một điều cần chú ý, nếu chuỗi chứa các ký tự điều khiển không theo nghĩa đen như \e
đối với <Esc>
bạn phải sử dụng dấu ngoặc kép để cho phép Vim diễn giải chúng, nếu không, các trích dẫn đơn sẽ ngăn việc giải thích bất cứ điều gì bên trong chuỗi.
:normal
lệnh tiêu thụ phần còn lại của dòng không? Nếu vậy bạn có thể gói nó bên trong một chuỗi mà bạn có thể thực thi bằng:execute
lệnh ::exe 'norm f,50a ^[d44|' | other Ex command
.