Chuyển về VIM trước khi lệnh shell kết thúc


1

Khi thực hiện lệnh shell trong VIM, nó chờ lệnh kết thúc. Bạn có thể nhấn Enterđể chuyển trở lại VIM, nhưng nó sẽ chỉ chuyển trở lại sau khi lệnh kết thúc. Trong trường hợp tác vụ shell chạy lâu hơn, sẽ thuận lợi hơn khi quay lại VIM để tiếp tục hoạt động và kiểm tra đầu ra của vỏ sau.

Cách đơn giản nhất để:

  1. Chạy lệnh Shell ( :!jshint %)
  2. Chuyển về VIM trước khi lệnh kết thúc.
  3. Kiểm tra lại trên đầu ra sau. (Cách dễ dàng tôi tìm thấy là :!)

Giải pháp đơn giản cho một vấn đề đơn giản: chạy lệnh đó trong shell khác.
romainl

Làm rõ ràng tất cả các yêu cầu của bạn luôn luôn là một ý tưởng tốt.
romainl

Cả hai :!jshint %:!node server.jscó thể được thực hiện trong Vim. Cái đầu tiên phải được chạy từ Vim vì %(vì vậy tuyến đường "vỏ khác" bị cấm) nhưng tuyến thứ hai thì không (vì vậy tuyến đường "vỏ khác" rõ ràng). Vì câu hỏi của bạn không chỉ định bất cứ điều gì có thể ràng buộc bạn long_running commandvới Vim, sử dụng shell khác là một lựa chọn hoàn toàn hợp lệ (và sạch hơn nhiều) đáp ứng tất cả các yêu cầu trong câu hỏi của bạn.
romainl

Câu trả lời:


6

Bạn có thể thực thi bất kỳ lệnh nào, giống như trong trình bao bình thường &để gửi nó đến nền:

:! (long_running command) & 

và quay trở lại vim.

Mặc dù bạn cần lưu ý rằng nếu các lệnh thực hiện một cái gì đó, nó sẽ làm cho vim trông lộn xộn. Nếu lệnh của bạn không xuất ra bất cứ điều gì, tôi nghĩ bạn sẽ ổn thôi.

Nếu lệnh của bạn không xuất văn bản, bạn có thể xem xét:

:! (long_running command >output 2>&1) &

nếu bạn muốn có stdoutcũng như stderrtrong một tập tin hoặc

:! (long_running command >output.stdout 2>output.stderr) &

nếu bạn muốn chúng ở trong các tập tin riêng biệt.


Cảm ơn Neocrow, kiểm tra lại và đọc đầu ra sau đó chắc chắn là một yêu cầu, như được liệt kê trong viên đạn 3. Tôi sẽ nói rằng sự lộn xộn làm cho giải pháp này tương đối không sử dụng được cho trường hợp của tôi.
Joseph Jaber

Xin lỗi, tôi đã bỏ lỡ điểm về đầu ra. Đã chỉnh sửa câu trả lời của tôi để giải quyết vấn đề này;)
s.wagner

Cũng có thể muốn đề cập rằng để có hiệu ứng tương tự trên các cửa sổ, bạn sẽ làm :! Start (lệnh long_rucky)
sbell
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.