Vim поддерживает вывод в stderr, который мы можем перенаправить на stdout для решения вашей проблемы. Однако будьте осторожны, эта функция предназначена только для целей отладки, поэтому у нее есть несколько преимуществ. Вот краткий набросок того, как вы можете это сделать.
Во-первых, мы будем запускать Vim в автоматическом или пакетном режиме, который включается с помощью флагов -e
-s
(:h -s-ex
). Мы отключаем файлы подкачки -n
, потому что они будут мешать, если нам нужно убить Vim, когда он зависнет.
Вместо того, чтобы передавать команды Ex в качестве аргументов командной строки, мы используем файл сценария с -S
. Создайте файл hi.vim
со следующим содержимым:
verbose highlight
:verbose
необходим для того, чтобы Vim вывел сообщение :highlight
в stderr. Давайте посмотрим, что у нас есть на данный момент:
$ vim -n -e -s -S hi.vim
Пока не запускайте это, иначе вы застрянете во тьме безголового Вима!
Добавьте команду :quit
и перенаправьте stderr на stdout:
$ vim -n -e -s -S hi.vim +quit 2>&1
Вуаля! Теперь направьте этот беспорядок в любой файл или утилиту по вашему желанию.
На эту тему есть очень подробная вики-статья "Vim как системный интерпретатор для vimscript".
Тонкости: из-за того, как Vim взаимодействует с терминальной средой, он не может записывать правильные окончания строк LF в unix в пакетном режиме вывода. Вместо этого он записывает окончания строк, которые выглядят как окончания строк CRLF.
Рассмотрите возможность добавления фильтра, чтобы избавиться от них:
$ vim -n -e -s -S hi.vim +quit 2>&1 | tr -d '\r' | my-css-util
Это отвечает на общий вопрос о том, как «перенаправить команду ex на STDOUT в vim», но это не обязательно работает для вашей проблемы :hi
из-за этого ограничения, вызванного флагами -e -s
:
'term' и $TERM не используются.
person
glts
schedule
25.05.2013
vim +'redir! >outfile' +'silent! hi' +'redir END' +'q'&&cat outfile
- person Kent   schedule 24.05.2013:TOhtml
? - person romainl   schedule 24.05.2013