Я хотел бы записать весь буфер в стандартный вывод ( /dev/stdout
) вместо файла, и следующая команда работает, как и ожидалось, при редактировании файла:
:w >> /dev/stdout
Подсказка: нажмите Control+, Lчтобы обновить экран.
Но это не работает, как ожидалось, когда я пытаюсь сделать то же самое из командной строки ( не в интерактивном режиме ), например:
$ echo This is example. | vim - '+:w >> /dev/stdout' '+:q!'
Vim: Reading from stdin...
Же с :w !tee
, :x! /dev/stdout
, :%print
и аналогичные.
Перед тем как уйти, он говорит: [Device] 1L, 17C appended
.
Есть ли способ заставить vim записать стандартный ввод в стандартный вывод в середине канала? Может это как-то буферизуется?
command-line
invocation
unix
ex-mode
kenorb
источник
источник
vim
для анализа файлов вместоsed
(например, массовые повторные сложные изменения в нескольких больших файлах). В примере ничего не делается для того, чтобы он был простым и не создавал потенциальную копию другого поста .Ответы:
Для печати буфера на стандартный вывод оболочки
vim
необходимо запустить в режиме Ex, в противном случае он откроет «обычный» путь со своим собственным окном и очистит все выходные буферы при выходе.Вот самый простой рабочий пример:
или даже короче
Примечание. Команда
vim -e
в основном эквивалентнаex
команде.Специальный дескриптор файла для стандартного ввода должен быть указан (
/dev/stdin
), чтобы предотвратить дополнительные раздражающие сообщения (как описано ниже).А вот несколько примеров разбора строк:
Примечание: последний пример показывает дополнительное раздражающее сообщение, которое невозможно скрыть, потому что это стандартная стратегия чтения всего файла в память и сообщения о том, что он был прочитан из стандартного ввода. Первый пример работает без сообщения, потому что файл создает бесконечные данные без сигнала конца файла ( EOF ), поэтому он никогда не достигнет конца своего входного чтения.
Связанные с:
источник
+q!
а не+:q!
, верно?vipe
это удобный инструмент для редактирования конвейеров, входящий в составmoreutils
пакета. Это обертка для редакторов (в том числе иvi
название). Он используетEDITOR
переменные среды для установки редактора, так, как и с другими инструментами , которые используютEDITOR
(такие какcrontab
,visudo
и т.д.), вы можете действие сценария , используя этот переменную. Например, вы можете изменить это, чтобы сделать:Конечно, сложные действия могут перейти в кавычки, поэтому вы можете написать скрипт:
И использовать
EDITOR="sh /path/to/script"
.источник