Piping bộ đệm đến lệnh bên ngoài trong Vim


92

Tôi là một người mới Vim. Tôi muốn gửi nội dung của bộ đệm hiện tại đến stdin của lệnh bên ngoài (giả sử thư). Mục đích cuối cùng của tôi là thiết lập một phím tắt để gửi nhanh email từ bộ đệm Vim hiện tại. Tôi đoán đây phải là một thứ tầm thường, nhưng tôi không thể tìm ra cách gửi bộ đệm Vim đến một lệnh bên ngoài. Cảm ơn trước.


Câu hỏi liên quan trong việc cung cấp văn bản đã chọn như STDINđể các lệnh shell: Ống để shell và nhận ra trên đường dây thông tinthay thế văn bản gốc được lựa chọn với sản lượng
user1129682

Câu trả lời:


130

Bạn có thể sử dụng :w !cmdđể ghi bộ đệm hiện tại vào stdin của lệnh bên ngoài. Từ :help :w_c:

: [range] w [rite] [++ opt]! {cmd}

Thực hiện {cmd}với [range]các dòng làm đầu vào tiêu chuẩn (lưu ý khoảng trống phía trước '!'). {cmd}được thực thi như với ":!{cmd}", bất kỳ '!'được thay thế bằng lệnh trước đó |:!|.

Một lệnh liên quan là lệnh :%!cmdthực hiện tương tự và sau đó thay thế bộ đệm hiện tại bằng đầu ra của lệnh. Vì vậy, :%!sortsẽ gọi lệnh sắp xếp bên ngoài để sắp xếp bộ đệm hiện tại tại chỗ.


6
Đây là hữu ích để định dạng json như: :'<,'>!python -mjson.toolhay:%!python -mjson.tool
TrinitronX

1
Để định dạng đường đi, sử dụng :%!gofmtmà không có cuối cùng %, vì điều đó sẽ gây ra nó để sử dụng phiên bản lưu (có thể khác nhau từ bộ đệm hiện hành)
thomasrutter

Có cách nào để thay thế bộ đệm hiện tại bằng đầu ra lệnh chỉ khi thành công không? Nếu lệnh trả về khác 0, không thay thế bộ đệm?
thomasrutter

@thomasrutter nếu bộ đệm được thay thế bằng thông báo lỗi thay vì đầu ra dự kiến, bạn chỉ có thể nhấn uđể hoàn tác
törzsmókus

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.