Làm thế nào tôi có thể ghi lại một macro lồng nhau?


11

Tôi muốn ghi lại một macro trong một macro, như vậy:

qa
    [ first macro ... ]
    qb
        [ second macro ... ]
    q
    [ some more stuff, involving @b ... ]
q

Tuy nhiên, cái thứ hai qđược hiểu là một yêu cầu dừng macro đầu tiên và phần còn lại được hiểu là các lệnh.

Có cách nào để bắt đầu ghi macro thứ hai trong macro không?

Nếu không, có cách nào khác để đạt được hiệu quả mong muốn khi lặp lại một chuỗi các lần nhấn phím nhất định, trong khi đã ở trong một macro không?


1
Trước tiên bạn không thể ghi lại macro bvà sau đó ghi lại acuộc gọi macro @b?
statox

@statox Vấn đề là bcó tác dụng phá hủy, vì vậy tôi không thể ghi lại trước (trừ khi tôi muốn ghi lại, nhấn umột loạt lần, sau đó bắt đầu ghi a).
Doorknob

1
Tôi nghĩ rằng đó là giải pháp tốt nhất của bạn. Lưu ý rằng bạn cũng có thể ghi lại nó trong một bộ đệm khác ( enew, ghi âm bd) hoặc chỉnh sửa trực tiếp bthanh ghi bằng cách ghi vào tệp của bạn nội dung của macro và sau đó "ghi" nó bằng cách đặt các ký tự vào thanh ghi "by.
statox

Câu trả lời:


10

AFAIK, bạn không thể ghi hai macro qx...qtrong một lần chụp. Đối với yêu cầu của bạn, bạn phải tạo macro bbằng cách qb....q, sau đó qa...@bq.

Nếu bạn không muốn "ghi lại", bbạn có thể làm lại let @b='whatever'sau đó @bsẽ phát lại macro. Ví dụ: let @b='ggdG'xác định một macro bđể xóa tất cả nội dung của bộ đệm hiện tại của bạn mà không "ghi âm".

Có một mẹo định nghĩa vĩ mô, có thể không liên quan đến câu hỏi của bạn. Đó là macro đệ quy, không macro lồng nhau. Đó là, bạn có thể làm:

qa..whatever..@aq

điều này sẽ đệ quy lại macro a. Đôi khi nó rất hữu ích, khi chúng ta không biết chúng ta muốn phát lại macro bao nhiêu lần. Bởi vì khi xảy ra lỗi, phát lại macro sẽ tự động dừng lại. Nó tiết kiệm 999@achẳng hạn.


1

Ghi lại các lần nhấn phím vào macro @a cũng giống như việc gõ văn bản tương ứng với các tổ hợp phím đó để đăng ký a. Khi một cái gì đó được lưu trữ trong một thanh ghi, bạn có thể đặt nó hoặc chơi nó dưới dạng macro / tổ hợp phím. Vì vậy, bạn có thể bắt đầu ghi một macro vào @a thông qua qa, sau đó trong khi macro đang ghi, hãy lấy một số văn bản để đăng ký b, có thể sử dụng một cái gì đó như "bye. Tất cả những gì làm là đưa văn bản vào một thanh ghi khác so với nếu bạn không chỉ định thanh ghi b. Bây giờ đăng ký b có một số văn bản trong đó, bạn có thể phát lại văn bản đó dưới dạng tổ hợp phím bằng cách nhấn @b. Bạn thậm chí có thể làm điều đó trong khi macro @a vẫn đang được ghi lại. Đó là siêu hình!

Nhược điểm chính của điều này là có thể sẽ dễ dàng hơn để viết một số chức năng vimscript làm những gì bạn muốn, và sau đó có thể gọi nó trong một bản ghi macro. Vẻ đẹp của macro là bạn có thể thấy hiệu ứng của những gì bạn đang ghi trong khi ghi, nhưng kỹ thuật ghi macro meta này đã làm mất đi phần nào.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.