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