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

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

Если я попытаюсь использовать следующий канал:

ls -la | vim

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

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

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

:r !ls -la

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

1
задан 26 August 2015 в 04:00

5 ответов

Ты совсем рядом. Вы просто пропустили один символ.

ls -la | vim -
28
ответ дан 24 May 2018 в 04:40

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

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

vim -c ':r! ls -la'

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

15
ответ дан 24 May 2018 в 04:40

Вы можете сказать vim, чтобы открыть stdin:

ls -la | vim -
11
ответ дан 24 May 2018 в 04:40

Если ваша цель - просто получить вывод в текстовый файл, вам не нужно вызывать vim. Баш может сделать это один с

ls -la > outputfile.txt
1
ответ дан 24 May 2018 в 04:40

setlocal buftype=nofile является хорошим вариантом, если вы собираетесь создать псевдоним для замены less:

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

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

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

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

, поэтому вы можете выйти только с помощью q<enter>.

0
ответ дан 24 May 2018 в 04:40
  • 1
    Хорошая идея. Определенно короче, чем печатать это долго! :) – kode 21 June 2017 в 18:04

Другие вопросы по тегам:

Похожие вопросы: