Як мені перенаправити вихід команди на vim в bash?


87

Я намагаюся перенаправити вихід команди bash в новий файл.

Якщо я спробую трубу, як показано нижче:

ls -la | vim

Bash показує мені помилки:

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

Я знаю, що можу відкрити Vim, а потім використовувати:

:r !ls -la

Але чи можна це зробити в самому башті, щоб Vim відкрився і висновок був вставлений туди автоматично?

Відповіді:


140

Ви можете використовувати підстановку процесів (це також працює з програмами, які не вдається прочитати STDIN):

vim <(ls -la)

Або скористайтеся vimфункцією читання з STDIN:

ls -la | vim -


1
Мені дуже подобається варіант vim, він дозволяє мені легко шукати, знаходити та зберігати вихідні дані з дампів.
Джозеу Олександр Ібарра

38

Ви дійсно близькі самі по собі. Вам просто не вистачало одного персонажа.

ls -la | vim -

10
Ну технічно це два персонажі. ;)
Cory Klein

19

Ось ще один підхід, сподіваємось навчити когось нового.

Якщо ви знаєте, що команда :r !ls -laпрацює всередині vim, ви можете зробити наступне, щоб відкрити vim і змусити його запустити команду, як тільки вона відкриється, прямо з bash:

vim -c ':r! ls -la'

Це еквівалент відкриття, vimа потім виконання команди :r! ls -la. Це повинно працювати з будь-якою vimкомандою, де команда надходить після -cпараметра.


12

Ви можете сказати vim, щоб відкрити stdin:

ls -la | vim -

1

Якщо ваша мета - просто отримати вихід у текстовий файл, тоді вам не потрібно викликати vim. Bash може це зробити сам

ls -la > outputfile.txt

1

setlocal buftype=nofile

Це хороший варіант, якщо ви збираєтесь створити псевдонім для заміни less:

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

Тепер вам не потрібно вводити! кинути.

Ще один варіант:

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

тож ви можете вийти просто q<enter>.


Гарна ідея. Однозначно коротше, ніж набирати цей довгий! :)
код
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.