Я пытаюсь перенаправить вывод команды удара в новый файл.
Если я пробую канал как указано ниже:
ls -la | vim
Bash показывает мне ошибки:
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.
Я знаю, что могу открыть Vim и затем использовать:
:r !ls -la
Но есть ли способ сделать это в самом ударе, так, чтобы Vim был открыт, и вывод вставляется там автоматически?
Можно использовать замена процесса (это также работает с приложениями, которые не могут читать от STDIN
):
vim <(ls -la)
Или использование vim
функция для чтения от STDIN
:
ls -la | vim -
Вы действительно близки самостоятельно. Вы просто пропускали один символ.
ls -la | vim -
Вот другой подход, надо надеяться, чтобы преподавать кому-то что-то новое.
, Если Вы знаете, что команда :r !ls -la
работает в энергии, можно сделать следующее, чтобы открыть энергию и заставить его выполнить команду, как только это открывается, прямо от удара:
vim -c ':r! ls -la'
Это - эквивалент открытия vim
, тогда выполняющий команду :r! ls -la
. Это должно работать с любым vim
команда, куда команда происходит после -c
опция.
Можно сказать энергии открывать stdin:
ls -la | vim -
Если Ваша цель состоит в том, чтобы просто получить вывод в текстовый файл затем, Вы не должны вызывать энергию. Bash может сделать это один с
ls -la > outputfile.txt
setlocal buftype=nofile
Это хороший вариант, если вы собираетесь создать псевдоним для замены less
:
seq 100 | vim +':setlocal buftype=nofile' -
Теперь вы не Т нужно набрать! выйти.
Другой вариант:
seq 100 | vim +'nnoremap q :quit!' -
, так что вы можете выйти с помощью всего лишь q<enter>
.
Я хочу добавить опцию
ls -al | view -
view
— версия vim только для чтения (эквивалентно vim -R
)