Mở đầu ra của lệnh shell trong khung chia


23

Xem xét bất kỳ ngôn ngữ lập trình giải thích.

Tôi có thể chạy tập lệnh hiện đang mở bằng cách sử dụng ! interpreter %và sử dụng phím quay lại để trở về vim sau khi thực hiện xong.

Có phải bằng cách nào đó không thể thay thế cửa sổ hiện tại bằng đầu ra của lệnh shell được thực thi, nhưng thay vào đó mở đầu ra trong một ngăn chia mới? Tôi vẫn muốn xem mã nguồn của mình trong quá trình thực thi tập lệnh của mình.

Tôi đã thử :split ! interpreter %, nhưng nó không hoạt động.

Là có một cách? Tôi đang sử dụng vim 7.3.

Câu trả lời:


29

Với :!, lệnh bên ngoài được thực thi trong trình bao và đầu ra thoáng qua không bị bắt trong Vim; bạn chỉ cần xem những gì được in đến thiết bị đầu cuối, sau đó điều khiển trả về Vim sau khi lệnh bên ngoài kết thúc.

Để giữ đầu ra, bạn phải đọc nó vào bộ đệm Vim . Vì thế, có :read!lệnh. Để mở bộ đệm đầu mới , kết hợp với :new:

:new | 0read ! <command>

Nếu bạn muốn chuyển tên tệp của bộ đệm hiện tại ( %) cho lệnh bên ngoài, bạn phải sử dụng :execute, để nó được đánh giá trong bộ đệm hiện tại:

:execute 'new | 0read ! interpreter' expand('%')

Hoặc, bạn sử dụng thực tế là với một bộ đệm mới, bộ đệm trước đó sẽ trở thành bộ đệm thay thế và sử dụng #thay vì %:

:new | 0read ! interpreter #

Loại bỏ bộ đệm đầu với :bdelete!.

Nếu bạn muốn xem đầu ra không đồng bộ trong khi thực thi, bạn cần một bộ ghép kênh bên ngoài hoặc một plugin, như được đề cập trong câu trả lời @chaos.


Lệnh ": exec ..." ở trên hoạt động với tôi, nhưng khi tôi cố gắng liên kết nó với tổ hợp phím F9, sử dụng mục nhập .vimrc này [nnoremap <buffer> <F9>: exec 'new | 0read! / Usr / bin / env python3 'bung rộng ('% ')], tôi gặp lỗi sau: [/ bin / bash: -c: dòng 0: EOF bất ngờ trong khi tìm kiếm kết hợp `' 'bung rộng ('% ' )]. Tôi đã thử một vài chuỗi thoát, nhưng tôi đoán không đúng. = :). Có ý kiến ​​gì không? Cảm ơn bạn.
NYCeyes

2

Theo tôi biết, bạn không thể làm điều đó trong vim. Nhưng sử dụng một bộ ghép kênh đầu cuối như thế screen. Trước khi mở vim, khởi động bộ ghép kênh:

screen

Sau đó nhấn ctrl- a Scho horitzontal và ctrl- a |cho màn hình tràn dọc.

Bây giờ hãy mở một tập tin vimtrong một trong những màn hình chia nhỏ. Và nhảy sang màn hình khác bằng cách sử dụng ctrl- a tab. Lưu ý rằng, trong màn hình thứ hai, trước tiên bạn phải mở một màn hình mới ( ctrl- a c) trước khi bạn có thể sử dụng nó.

Trong màn hình với vim, bạn có thể chỉnh sửa tệp và trong màn hình khác, bạn có thể thực thi nó và xem các tin nhắn và mã vĩnh viễn.

Dưới đây là một tài liệu tham khảo nhanh cho screen.


Ngoài ra, bạn có thể sử dụng tmuxbộ ghép kênh và vim-dispatchplugin để tự động chia tách và nhảy giữa các bảng.
taketwo
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.