Hãy nói rằng tôi có một chức năng, được đặt tên StripWhitespace
.
Tôi có thể chạy nó trên một tệp bằng cách mở tệp và chạy :StripWhitespace
.
Làm cách nào tôi có thể tự động chạy chức năng đó đối với thư mục tệp và lưu kết quả khi tôi thực hiện?
Hãy nói rằng tôi có một chức năng, được đặt tên StripWhitespace
.
Tôi có thể chạy nó trên một tệp bằng cách mở tệp và chạy :StripWhitespace
.
Làm cách nào tôi có thể tự động chạy chức năng đó đối với thư mục tệp và lưu kết quả khi tôi thực hiện?
Câu trả lời:
Bạn có thể sử dụng -c
đối số để chạy lệnh khi khởi động, từ vim(1)
:
-c {command}
{command} will be executed after the first file has been
read. {command} is interpreted as an Ex command. If the
{command} contains spaces it must be enclosed in double
quotes (this depends on the shell that is used). Example:
Vim "+set si" main.c
Note: You can use up to 10 "+" or "-c" commands.
Thí dụ:
vim -c ':call StripWhitespace()' file1 file2
Để thoát sau đó, thêm | :wqa
:
vim -c ':call StripWhitespace() | :wqa' file1 file2
Nếu bạn đã ở trong Vim, bạn có thể sử dụng các lệnh :argdo
hoặc :bufdo
để thực thi một lệnh trên mỗi mục trong danh sách đối số hoặc danh sách bộ đệm, tương ứng.
ví dụ: để chạy :
lệnh trên mỗi tệp trong danh sách đối số:
:argdo StripWhitespace
Hoặc để gọi một hàm từ mọi tệp trong danh sách bộ đệm:
:bufdo call StripWhitespace()
Hoặc để chạy macro q
trên mọi tệp trong danh sách đối số:
:argdo normal @q
Sau đó, bạn có thể lưu tất cả các bộ đệm đã thay đổi với :wall
hoặc lưu tất cả và thoát Vim với :wqall
.
Nếu bạn muốn viết các tệp khi bạn thực hiện, bạn có thể thêm một cuộc gọi đến :update
, như vậy:
:argdo s/foo/bar/ge | update
Có nhiều cách khác nhau để bạn có thể đưa các tệp vào Vim ở vị trí đầu tiên, bao gồm:
vim *
(điều này thêm tất cả các tệp vào danh sách đối số),:args
lệnh (hỗ trợ ký tự đại diện và biểu thức backtick) để điền danh sách đối số hoặc :argadd
lệnh để thêm tệp vào đó,:e
, :Ex
hoặc một plugin tập tin mở.'hidden'
; (2) : update
lệnh là một cải tiến nhỏ :w
vì nó chỉ ghi nếu một thay đổi đã được thực hiện, do đó :bufdo update
hoặc :argdo update
sẽ ghi tất cả các bộ đệm hoặc đối số đã sửa đổi.
update
. Tôi đã cân nhắc việc đề cập đến hidden
khi tôi đang viết câu trả lời, nhưng đã quyết định chống lại nó bởi vì tôi không muốn làm quá lên. Về sự phản ánh, nó nên ở trong đó. Tôi sẽ cập nhật câu trả lời để bao gồm cả hai đề xuất hiện nay.
:wall
điều này, cũng có lợi thế là không đạp xe qua bộ đệm và di chuyển bạn ra khỏi nơi bạn bắt đầu. Tôi cho rằng :argdo update
vẫn là một câu chuyện khác - có thể bạn không muốn viết cho bộ đệm không có trong danh sách đối số của bạn.