Как сделать так, чтобы Vim отображал цвета в соответствии с цветовыми кодами?

61

Короче, я пытаюсь заменить lessна vim( vimpager). У меня есть настройки для скриптов, чтобы выкладывать цвета (и жирный и все хорошо), когда они могут. lessпонимает цветовые коды и отображает их красиво. Как я могу сделать vimсинтаксический анализ кодов и отобразить цвета / жирность, как это lessпроисходит?

phunehehe
источник

Ответы:

45

Два ответа:

Коротко: вы хотите использовать vim-скрипт AnsiEsc.vim . Он будет скрывать фактические escape-последовательности ANSI в вашем файле и использовать подсветку синтаксиса для соответствующего цвета текста. Проблема с использованием этого в пейджере заключается в том, что вам нужно будет заставить vim распознавать, когда использовать это. Я не уверен, можете ли вы просто всегда загружать его или он будет конфликтовать с другими файлами синтаксиса. Вам придется экспериментировать с этим.

Длинный ответ: лучшее, на что вы можете надеяться, это частичное непереносимое решение. Less фактически не понимает escape-последовательности терминала, поскольку они в значительной степени зависят от терминала, но less может распознать их (подмножество) и будет знать, как передать их на терминал, если вы используете -r(или-R) вариант. Терминал интерпретирует escape-последовательности и изменяет атрибуты текста (цвет, жирный, подчеркивание ...). Vim, будучи редактором, а не пейджером, не просто передает необработанные управляющие символы в терминал. Он должен отображать их каким-то образом, чтобы вы могли их редактировать. Вы можете использовать другие функции vim, такие как скрытие и подсветка синтаксиса, чтобы скрыть последовательности и использовать их для установки цветов текста, однако он всегда будет обрабатывать только подмножество последовательностей терминалов и, вероятно, не будет работать на некоторых терминалах. ,

Это действительно одна из многих проблем, с которыми вы столкнетесь, когда попытаетесь использовать текстовый редактор в качестве пейджера.

Ян Хлавачек
источник
Короче говоря, вы должны написать часть эмулятора терминала в Vim, которая обрабатывает escape-последовательности терминала, которые присутствуют в вашем входе.
Жиль "ТАК - перестань быть злым"
Спасибо, я думаю, что сдаюсь. Если это не легко, это больше не имеет особого смысла.
phunehehe
1
@JanHlavacek ссылка не работает :(
Nitrodist
19
@Nitrodist: less -r FILE( источник )
Adobe
1
Похоже, что ссылка Яна переместилась на linux-tips.com/t/how-to-enable-syntax-highlighting-in-less/208
Тимоти Зорн
2

Теперь с vim 8 вы можете использовать режим терминала, :terminalа затем в этом терминале сделать cat myfileи вернуться в обычный режим с помощью Ctrl-w N. Это будет правильно отображать цветовые коды ANSI. Автоматизируя эти шаги и читая данные из стандартного ввода вместо файла, можно использовать vim для замены less.

rubystallion
источник
Это не отвечает на вопрос вообще. Как это заменить less?
ossbuntu
@ossbuntu Если вы бежите , ls --color=always >/tmp/colored.txtа затем в Vim с :terminal cat /tmp/colored.txtпоследующим :only, то вы будете иметь выход LS красиво окрашенный в Vim , как меньше будет делать. Поскольку vim поддерживает передачу команд в качестве аргументов командной строки при запуске, очевидно, что можно less
поиграться,