Câu trả lời:
Có, ví dụ nếu bạn muốn làm ls
, hãy thử:
:!ls
Để sinh ra một vỏ, sử dụng
:shell
:w !sudo tee %
nano
Tôi có xu hướng sử dụng ctrl+z
để ngủ vi, chạy những gì tôi cần trong vỏ, sau đó fg
tiếp tục vi. Không chính xác là một câu trả lời cho câu hỏi của bạn, nhưng tôi thấy đó là một cách rất nhanh để làm việc.
Nếu bạn quên rằng bạn có vi mở trong nền (điều này có thể xảy ra khi bạn bận), khi bạn cố gắng đăng xuất khỏi shell bằng cách sử dụng, ctrl+d
bạn sẽ được cảnh báo rằng bạn có các công việc nền đang chạy và bạn có thể đóng chúng, hoặc nhấn ctrl + d lần nữa để đăng xuất. Ngoài ra, nếu bạn cố gắng mở lại cùng một tệp hai lần, bạn sẽ nhận được cảnh báo khôi phục, do đó bạn có thể nhấn a
để hủy bỏ và chạy fg để quay lại vi.
Vì bạn đã đề cập "nhận thiết bị xuất chuẩn", lưu ý rằng bạn có thể làm
:r! command
và đầu ra của lệnh sẽ được thêm vào tệp, hoặc
:<range>!command
để có nội dung của phạm vi được lọc thông qua lệnh [ví dụ :1,$!wc
]
:%!command
có vẻ khá hữu ích
:.,+20 !sort
]
Thành ngữ ưa thích của tôi là
!!command
đó là tốc ký cho
:.!command
mà đường ống hiện tại thông qua lệnh và chèn đầu ra vào tập tin. Trường hợp phổ biến nhất đối với tôi là chỉnh sửa lệnh bằng vi và chạy:
!!sh
Hoặc là
!<motion>command
chẳng hạn như (ví dụ)
!apsh
để chạy toàn bộ đoạn hiện tại thông qua shell.
!}
bạn phải được định vị ở đầu đoạn, hãy thử !ap
. (Tôi không biết điều này có trong mỗi vi hay chỉ vim)
Bằng cách sử dụng dấu hai chấm và dấu chấm than, bạn có thể chạy bất kỳ lệnh nào trong đường dẫn shell và tập lệnh shell, hãy nhớ rằng lệnh chạy dưới người dùng đang chạy chương trình vi / vim và sử dụng môi trường của nó.
:!<command>
Vì vi sử dụng môi trường có hiệu lực khi nó được chạy, nên nó sử dụng cùng một đường dẫn trong lệnh cha. Hãy nhớ rằng một số shell giữ bộ đệm của các chương trình trong đường dẫn và vi có thể không hoạt động với bộ đệm này (phụ thuộc vào shell mà nó sử dụng và phiên bản của nó), vì vậy bạn có thể sẽ chạy sai nhị phân trong trường hợp bạn có nhiều hơn hơn một nhị phân có cùng tên.
Bạn có thể thấy đầu ra của một lệnh bằng cách gõ, ví dụ, :!ls -lh
trong chế độ lệnh.
Nếu bạn muốn chèn đầu ra của lệnh vào tệp bạn đang chỉnh sửa, chỉ cần thêm một r
. Ví dụ , :r!which perl
.
Tôi có cái này trong .vimrc của tôi. Tìm thấy trên Stack Overflow một lúc trước:
" Executes the current line in a bash shell; syntactically similar to slimv's ,d feature
:nmap ,,d Y:!<C-R>"<C-H><CR>
Tôi sẽ, và làm, làm tròn điều này một cách dễ dàng trong Linux bằng cách mở hai cửa sổ dòng lệnh đầu cuối, chạy vi trong một và cái kia có sẵn cho công việc khác cùng một lúc.