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

61

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

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

ls -la | vim

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

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

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

:r !ls -la

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

    
задан faizal 13.08.2014 в 18:13
источник

6 ответов

91

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

vim <(ls -la)

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

ls -la | vim -
    
ответ дан chaos 13.08.2014 в 18:58
источник
26

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

ls -la | vim -
    
ответ дан Cris Holdorph 13.08.2014 в 18:18
14

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

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

vim -c ':r! ls -la'

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

    
ответ дан Alaa Ali 13.08.2014 в 19:11
10

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

ls -la | vim -
    
ответ дан iffy 13.08.2014 в 18:20
1

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

ls -la > outputfile.txt
    
ответ дан Jake Stewart 24.03.2017 в 16:44
0

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

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

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

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

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

, чтобы вы могли выйти только с q<enter> .

    
ответ дан Ciro Santilli 包子露宪 六四事件 法轮功 29.01.2017 в 15:43