Почему я не могу изменить стандартный ввод для Vim на какой-либо файл на диске с помощью перенаправления?

Почему я не могу изменить стандартный ввод для Vim на какой-либо файл на диске с помощью перенаправления?

Я читал "Система разделения времени UNIX Деннис М. Ритчи и Кен Томпсон" статья и в качестве примера перенаправления стандартного ввода/вывода приводится пример редактора ed:

Команда ed <scriptинтерпретирует скрипт как файл команд редактора; таким образом, « <script» означает «взять входные данные из script».

Однако если я попробую сделать то же самое с помощью vim, то получу сообщение об ошибке «Ошибка чтения входных данных»:

[m@localhost rough]$ vim t2 <t
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.

Почему это так?

решение1

edи exестьредакторы строк. Они имеют своего рода пользовательский интерфейс, которым можно управлять с помощью строк в текстовом файле.

viи все его клоны, такие как VIM,полноэкранные редакторы. Они имеют пользовательские интерфейсы, которые не обрабатывают ввод и вывод как строки текстового файла. Ввод — это отдельные символы и последовательности символов, не сгруппированные в строки. Вывод — это отдельные символы и управляющие последовательности для рисования на видеотерминале.

Модельпользовательский ввод/выводпоскольку текстовые файлы не отображаются в интерактивных полноэкранных программах TUI, не говоря уже о программах с графическим интерфейсом.

То, какое поведение вы получите, варьируется от программы к программе. Некоторые полноэкранные программы TUI распознают, когда их стандартный ввод не является терминалом, и прерывают работу, как это nviи происходит. Другие, такие как VIM, выдадут предупреждение, но будут рассматривать нетерминальный входной файл как терминальный ввод, что приведет к несколько странному поведению для людей, которые ожидают, что ввод будет рассматриваться как команды скрипта. Другие, например less, явно открывают терминальное устройство для пользовательского интерфейса и не используют стандартный ввод-вывод для (его входной части). Другие же, как большинство оболочек (которые, заметьте, имеют интерактивные пользовательские интерфейсы, выходящие за рамки строчного режима), переходят в неинтерактивный режим.

Статья, написанная о Unix в 1974 году, не будет хорошим руководством по разнице между пользовательскими интерфейсами в строчном режиме и полноэкранными пользовательскими интерфейсами. Возможно, первый редактор Unix для видеотерминалов, Джордж Кулурис em, был годом позже. Также в будущем были termcap, оболочки с (своим) редактированием командной строки и дисциплины строк по умолчанию, которые использовали неграфические специальные символы.

Связанный контент