Làm cách nào để chuyển hướng lệnh đầu ra sang vim trong bash?


87

Tôi đang cố gắng chuyển hướng đầu ra của lệnh bash thành một tệp mới.

Nếu tôi thử đường ống như dưới đây:

ls -la | vim

Bash chỉ cho tôi các lỗi:

Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.

Tôi biết rằng tôi có thể mở Vim và sau đó sử dụng:

:r !ls -la

Nhưng có một cách để làm điều này trong bash chính nó, để Vim được mở và đầu ra được dán tự động ở đó?

Câu trả lời:


140

Bạn có thể sử dụng thay thế quy trình (điều này cũng hoạt động với các ứng dụng không thể đọc được STDIN):

vim <(ls -la)

Hoặc sử dụng vimchức năng của để đọc từ STDIN:

ls -la | vim -

2
<(ls -la)thực sự là quá trình thay thế chứ không phải thay thế lệnh .
Eliah Kagan

1
Tôi thực sự thích tùy chọn của vim, nó cho phép tôi tìm kiếm, tìm và lưu đầu ra dễ dàng từ các bãi chứa dữ liệu.
Josue Alexander Ibarra

38

Bạn đang thực sự gần gũi với chính mình. Bạn chỉ thiếu một nhân vật.

ls -la | vim -

10
Về mặt kỹ thuật, đó là hai nhân vật. ;)
Cory Klein

19

Đây là một cách tiếp cận khác, hy vọng sẽ dạy cho ai đó một cái gì đó mới.

Nếu bạn biết rằng lệnh :r !ls -lahoạt động bên trong vim, bạn có thể thực hiện các thao tác sau để mở vim và làm cho nó chạy lệnh ngay khi mở, ngay từ bash:

vim -c ':r! ls -la'

Điều này tương đương với việc mở vimsau đó thực hiện lệnh :r! ls -la. Điều này sẽ làm việc với bất kỳ vimlệnh nào , trong đó lệnh xuất hiện sau -ctùy chọn.


12

Bạn có thể nói với vim để mở stdin:

ls -la | vim -

1

Nếu mục tiêu của bạn chỉ đơn giản là đưa đầu ra vào một tệp văn bản thì bạn không cần phải gọi vim. Bash có thể làm điều đó một mình với

ls -la > outputfile.txt

1

setlocal buftype=nofile

Đây là một lựa chọn tốt nếu bạn định tạo bí danh để thay thế less:

seq 100 | vim +':setlocal buftype=nofile' -

Bây giờ bạn không cần phải gõ! bỏ thuốc lá

Một lựa chọn khác là:

seq 100 | vim +'nnoremap q :quit!' -

Vì vậy, bạn có thể thoát với chỉ q<enter>.


Ý tưởng tốt. Chắc chắn ngắn hơn gõ dài này! :)
kode
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.