Как использовать трубу для редактирования файла с помощью vi

15

Допустим, у меня есть файл с именем file.txt. Это имя файла, который я хочу редактировать с помощью vi. Я хочу сделать что-то вроде этого, чтобы я мог редактировать файл:

cat file.txt | vi

Однако это не работает. Как это можно сделать?

Чтобы уточнить вещи:

Вот содержимое файла file.txt:

textfile

Поэтому я хочу как-то отправить содержимое файла file.txt в vi, чтобы произошло то же самое, что и при наборе текста vi textfile.

Содержимое файла file.txt может измениться. Я хочу, чтобы vi редактировал любой файл, указанный в file.txt.

tony_sid
источник
Я не думаю, что vi = vim. Я не знаю, что это имеет значение для этого вопроса, но ваш тег вводит в заблуждение.
Soandos
Я думаю, что на ваш вопрос вы можете задать еще кое-что. Открытие произвольно названного файла - базовое использование vi. то есть: vi file.txt. Есть ли что-то более продвинутое, что вы пытаетесь сделать?
camster342
vi запускает vim на OSX и на других современных системах Linux.
tony_sid
Я на самом деле пытаюсь редактировать файл, имя которого хранится в буфере обмена OSX. Набрав pbpaste, вы увидите имя файла. Я пытаюсь отредактировать этот файл, фактически не вводя его, а используя то, что хранится в буфере обмена. В Linux нет pbpaste, но по сути это то же самое, что и вывод файла cat.
tony_sid
установить xclipи затем использовать xclip -oдля доступа к буферу обмена на оболочке в x11. на всякий случай, если вам нужно заменить pbpaste...
Акира

Ответы:

9

Вы можете попробовать это:

% vi `cat file.txt`

или, чтобы избежать использования кошки,

% vi `< file.txt`

вы говорите vi (m) просто куча произвольных вещей. если вы хотите, чтобы vi (m) делал что-то вроде «эй, откройте этот файл», вы должны передать ему те же команды, которые вы использовали бы в vi (m), например. что - то вроде :e foo.txt. но это просто сложнее, чем делать то, что я предложил.

Акира
источник
Это не сработало.
tony_sid
4
это галочки, вы правильно их набрали? они открывают подоболочку, выполняют 'кошку' ... если это не работает, попробуйте vi $(cat file.txt)
akira
О, хорошо, теперь это работает. Спасибо.
tony_sid
23

По крайней мере для vim (не уверен насчет vi), вы можете сделать

cat file.txt | vim -

'-' говорит vim читать со стандартного ввода.

Джефф
источник
1
Извините, но это не правильный ответ. Откроется vim с содержимым textfile. Спрашивающий хочет, чтобы vim сам открыл текстовый файл. Я бы понизил голос, но, к сожалению, у меня здесь недостаточно репутации.
подводное
Скубо прав! Мой ответ более полезен, чем просто передать что-то из stdin.
Джефф