Как я могу использовать vim в конвейере для раскрашивания текста?

Я хотел бы иметь команду, которую я могу вставить в конвейер команд, который добавляет цветовые экраны к его вводу в соответствии с возможностями подсветки синтаксиса vim.

Например:

cat somefile.js | vim - <???> | less

Полученный текст будет иметь значение somefile.js, но будет раскрашен в соответствии с тем, как текущая конфигурация vim сделает это в редакторе.

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

Ответ 1

Я думаю, что ваша идея имеет один основной недостаток: никто никогда не думал о том, чтобы разрешить такую ​​вещь.

Очевидно, что vim способен выполнять подсветку синтаксиса. Но я готов поспорить, что вы используете конус мороженого, который, если вам удастся получить vim, чтобы передать текст и обработать его, вам не понравятся результаты.

Посмотрите, что происходит, когда вы передаете текст через more (или less, если хотите). Когда он идет на терминал, эти программы отображают один экранный экран и ждут, пока вы нажмете пробел. Но если вы перенаправляете stdout в другое место, кроме терминала, эти программы замечают это и просто копируют свой вход в свой вывод без изменений.

Если vim не замечает, что вы прокладываете текст, вы можете отправить команды перемещения курсора, которые вы, вероятно, не хотите в своем выходе. Если vim замечает, скорее всего, просто передаст текст, а не синтаксис - покрасит его. Только если vim делает синтаксис-раскраску, но не добавляет движений курсора, ваша идея будет работать.

Вы можете попробовать. Вот ответ, в котором обсуждаются пробки через vim:

Выполнить команду из Vim из командной строки

Но я говорю, почему бы не пропустить текст через программу, которая была разработана и предназначена для передачи текста через нее? Пигменты могут раскрашивать каждый основной язык программирования и формат разметки.

http://pygments.org/

Главное преимущество, которое я вижу в вашей идее: вы можете настроить способ синтаксической раскраски vim, получить его так, как вы этого хотите, а затем использовать vim для обработки вашего текста. Но, вероятно, не так сложно настроить Pyigs, и это может быть даже удовлетворительным из коробки, и в этом случае это, безусловно, будет самым простым способом. И Pyigs не только имеет выход ANSI-последовательности, но также имеет выход HTML, RTF, LaTeX и т.д. Поэтому, если вы получаете Pyigs, работающие так, как вы этого хотите, он должен иметь возможность выводить любой формат вывода, который вам нужен; vim будет иметь только последовательность ANSI.

Ответ 2

Там модуль Perl, называемый Text:: VimColor, который я слышал, сделает все, что вы ищете.

http://search.cpan.org/dist/Text-VimColor/

Но позвольте мне спросить об этом: для чего нужно, чтобы пройти меньше? Почему бы не использовать vim как отличный просмотрщик файлов? view - будет считываться со стандартного ввода в режиме только для чтения.

Ответ 3

У моей установки vim уже включен vim pager/colorizer script, и его можно найти по адресу:

 https://githucat  /usr/share/vim/vim73/macros/{less.sh,less.vim}

Лично я использую    https://github.com/rkitover/vimpager

который имеет vimcat и vimpager, которые делают то, что вы думаете, что они делают.

Ответ 5

Это может быть то, что вы после

cat filename.sh | vim - -c 'syntax on; syn=bash'

Это некрасиво, но вы могли бы псевдоним:

alias vim.sh="vim -c 'syntax on; syn=bash'"

Затем используйте так:

cat filename.sh | vim.sh -