Как перенаправить вывод команды в 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 -


1
Мне очень нравится опция vim, она позволяет мне легко искать, находить и сохранять результаты из дампов данных.
Хосе Александр Ибарра


19

Вот другой подход, надеюсь, научить кого-то чему-то новому.

Если вы знаете, что команда :r !ls -laработает внутри vim, вы можете сделать следующее, чтобы открыть vim и запустить ее сразу после открытия, прямо из bash:

vim -c ':r! ls -la'

Это эквивалент открытия, а vimзатем выполнения команды :r! ls -la. Это должно работать с любой vimкомандой, команда которой указана после -cопции.



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>.


Хорошая идея. Определенно короче, чем печатать так долго! :)
код
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.