Trong Vim, một cách thanh lịch để lấy đầu ra từ dòng lệnh là gì?


14

Nếu tôi đang ở Vim và muốn nhận một số đầu ra từ dòng lệnh và xử lý nó vào tệp hiện tại của mình, tôi có thể chạy nó:

:! echo "foo" >> %

Điều đó sẽ nối "foo" vào tệp hiện tại của tôi và tôi sẽ phải tải lại.

Có cách nào thanh lịch hơn để làm điều này không - ví dụ đầu ra đó có đi vào bộ đệm mà tôi có thể dán không?

Câu trả lời:


24

Đúng:

:r !echo "foo"

Xem

:help :r!

Điều đó sẽ chèn đầu ra của lệnh sau dòng hiện tại. Nếu bạn muốn bắt đầu ra lệnh vào một thanh ghi mà bạn có thể dán, bạn có thể làm điều này:

:let @a = system('echo "foo"')

Bây giờ đầu ra của lệnh (bao gồm cả dòng mới) đang được đăng ký a. Xem

:help let-@
:help system()

Sau khi xem trợ giúp và thử nghiệm, tôi thấy rằng 1) :rlà viết tắt của "đọc" (vì vậy bạn có thể gõ 'đọc' hoặc chỉ 'r' và đó là cùng một lệnh) và 2) thực hiện :r path/to/foo.txtsẽ chèn nội dung của điều đó tập tin sau con trỏ.
Nathan Long

Ngoài ra - tôi không biết về systemcuộc gọi. Thật tuyệt vời!
Nathan Long

1
Tôi cũng không biết bạn có thể tự thiết lập các thanh ghi như thế nào let @a = 'foo'. Một ý tưởng tuyệt vời là, sau khi thực hiện tìm kiếm và thay thế, bạn có thể lưu cụm từ tìm kiếm vào một đăng ký để dán ở nơi khác bằng cách thực hiện let @a = @/- "tạo một thanh ghi chứa những gì / đăng ký chứa, cụ thể là tìm kiếm cuối cùng của tôi."
Nathan Long

1
@Nathan Long: Bạn được chào đón. Các cách khác để dán từ thanh ghi / là 1) để thực thi :put /để đặt nội dung thanh ghi trên dòng tiếp theo và 2) trong khi ở chế độ chèn, để nhập Ctrl-R theo sau /để chèn nội dung thanh ghi vào vị trí con trỏ. Để biết thêm về những người, xem :help :put:help i_CTRL-R.
garyjohn
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.