Как перенаправить вывод команды в vim в bash?

87

Я пытаюсь перенаправить вывод команды bash в новый файл.

Если я попробую трубу, как показано ниже:

ls -la | vim

Баш показывает мне ошибки:

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

Я знаю, что могу открыть Vim и затем использовать:

:r !ls -la

Но есть ли способ сделать это в самом bash, чтобы Vim открывался и выходные данные вставлялись туда автоматически?

Фейзалем
источник

Ответы:

140

Вы можете использовать процесс подстановки (это также работает с приложениями, которые не могут читать из STDIN):

vim <(ls -la)

Или используйте vimфункцию для чтения из STDIN:

ls -la | vim -
хаос
источник
2
<(ls -la)на самом деле процесс подстановки, а не подстановка команд .
Элия ​​Каган
1
Мне очень нравится опция vim, она позволяет мне легко искать, находить и сохранять результаты из дампов данных.
Хосе Александр Ибарра
38

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

ls -la | vim -
Крис Холдорф
источник
10
Ну, технически это два персонажа. ;)
Кори Кляйн
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. Баш может сделать это наедине с

ls -la > outputfile.txt
Джейк Стюарт
источник
1

setlocal buftype=nofile

Это хороший вариант, если вы собираетесь создать псевдоним для замены less:

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

Теперь вам не нужно вводить! выйти

Другой вариант:

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

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

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
источник
Хорошая идея. Определенно короче, чем печатать так долго! :)
код