2013-01-02 47 views
8

tôi có một danh sách các tập tin tôi đã mở trong VIM sử dụng lệnh này:Sử dụng lệnh VIM trên tất cả các file mở

vim `cat list.txt` 

Tôi đang tìm kiếm để chạy lệnh này trên tất cả các file mở:

:99,104 norm i# 

(từ dòng 99-104, chèn một chú thích "#") < --simple, công trình

Khi tôi chạy lệnh trên để chèn nó hoạt động như mong đợi trên file hiện hành. Làm cách nào để VIM chạy đúng lệnh trên tất cả các tệp đang mở? Tôi đã thử :argdo, :windo, :bufdo nhưng không có bất kỳ may mắn nào.

Mọi đề xuất?

Trả lời

11

Tôi đoán bufdo sẽ làm việc, nếu bạn có set hidden (để cho phép bufdo để thay đổi bộ đệm mà không lưu) trước:

:set hidden 
:bufdo 99,104 norm i# 

Sau đó lưu tất cả các file với :bufdo! w hoặc :wa.

(Lưu ý: set hidden có thể được thay thế bằng set autowrite là tốt.)

+0

Cảm ơn, tôi bỏ lỡ ": set hidden". Chúc mừng. –

3

Tôi nghĩ sed sẽ là một lựa chọn tốt hơn nếu bạn có thể sử dụng nó. sed là một trình soạn thảo dòng lệnh thay vì một trình soạn thảo tương tác như vim.

sed -i '99,104s/^/#/' list of files 
+1

'sed' là trình soạn thảo _stream_. Nếu bạn muốn một trình soạn thảo _text_ (chính hãng) có thể được điều khiển từ một tập lệnh hoặc dòng lệnh, có 'ed' và' ex'. –

1

Vì bạn đã cung cấp tất cả các tệp làm đối số, :argdo là lệnh đúng. (Trừ khi bạn mở các tệp khác, :bufdo cũng sẽ hoạt động.) Nếu bạn không muốn :set hidden (như được chỉ ra trong câu trả lời khác), bạn phải ngay lập tức lưu bộ đệm qua :update. Bởi vì bạn đang sử dụng một lệnh :normal, bạn phải đặt nó bên trong :execute để có thể nối một lệnh Ví dụ:

:argdo 99,104 execute 'norm i#' | update 
Các vấn đề liên quan