2010-06-11 35 views
26

Tôi biết về lệnh :bufdo và cố gắng kết hợp nó với macro mà tôi đã ghi lại (@a) để thêm #include vào đúng vị trí của mỗi tệp tiêu đề tôi ' d tải. Tuy nhiên, tôi không thể tìm thấy một cách dễ dàng để chạy macro trên mỗi bộ đệm. Có cách nào để thực hiện một macro thông qua chế độ cũ, đó là những gì :bufdo yêu cầu? Hoặc là có một lệnh tôi đang mất tích?Chạy macro trong tất cả các bộ đệm trong vim

+0

hãy xem http://stackoverflow.com/questions/1291962/replay-a-vim-macro-until-end-of-buffer EDIT: đừng bận tâm đến điều này – gruntled

+0

@gruntled: Cảm ơn bạn đã liên kết. Tôi bỏ qua điều đó bởi vì câu hỏi dường như không áp dụng, nhưng các kỹ thuật nên hoạt động. Tôi đã bỏ phiếu để đóng cái này. –

Trả lời

31

Bạn có thể làm điều đó như thế này:

:bufdo execute "normal @a" | write 

Lệnh bình thường sẽ chạy macro, nhưng nó phải được chạy bằng cách sử dụng: thực thi, nếu không ký tự ống sẽ được hiểu là ký tự chế độ bình thường.

0

Cách thay thế duy nhất tôi có thể đưa ra là thêm các lệnh :w:bn vào macro để nó tự động lưu và chuyển sang bộ đệm tiếp theo. Sau đó tôi có thể chạy lệnh trên 52 bộ đệm khác bằng cách nhập [email protected]. Điều này làm việc, nhưng với tôi là một mô hình khái niệm khác nhau hơn :bufdo, và tôi hy vọng một người khác sẽ chỉ cho tôi theo hướng của một cái gì đó tương tự như :bufdo.

11

Bạn phải sử dụng normal để thực hiện chế độ bình thường lệnh, một thực hiện như vậy vĩ mô (@a) trong chế độ lệnh:

:bufdo normal @a 
+1

Điều này sẽ chỉ hoạt động nếu 'autowrite' được kích hoạt, khôn ngoan khác nó sẽ dừng lại với một lỗi khi nó cố gắng để thay đổi bộ đệm thứ hai, vì nó sẽ được từ bỏ một bộ đệm sửa đổi. –

+0

@DaveKirby sẽ làm việc này nếu chúng tôi bao gồm: w trong macro của chúng tôi? – MeanEYE

+1

@MeanEYE: Có, nếu bạn kết thúc macro của mình bằng ': w', công cụ này sẽ hoạt động. –

Các vấn đề liên quan