Как раскрасить слово в выводе Vim Plugin - PullRequest
0 голосов
/ 20 сентября 2018

Я пишу плагин Vim.Основная логика написана на Python (Python 3.6) с требуемым кодом оболочки Vim Script.

Плагин выводит текст пользователю, используя функции печати Python.Например:

print( "The action " + action + " has failed." )

Как бы я сделал так, чтобы слово «не удалось» отображаться красным цветом?

Все, что я пытался найти до сих пор, возвращается с подсветкой синтаксиса вВизуализация кода выхода цвета Vim и ANSI в Vim.Оба цвета текста в основном буфере Vim для любого файла, который вы ищете.

Я хочу раскрасить слово из вывода Python из моего плагина.Есть мысли?

1 Ответ

0 голосов
/ 20 сентября 2018

Неудачные попытки

Мои эксперименты подтверждают, что Экранирующие коды ANSI не работают из встроенного интерпретатора Python.Это не удивительно, так как Vim захватывает выходные данные и использует свои собственные подпрограммы для вывода.Так как вы не можете использовать коды ANSI с :echo, это также не работает с :py print.Кроме того, в GVIM нет подключенных терминалов, а встроенный эмулятор терминала довольно тупой.

:py print("The ^[[01maction^[[0m has failed.")

Что работает (кроме GVIM), так это вызывать внешнюю команду, потому что ее вывод напрямую отправляется наТерминал.Это не поможет вам, хотя (если вы не хотите переключаться на вызов внешнего интерпретатора Python).

:!echo "The ^[[41maction^[[0m has failed."

Способ повлиять на раскраску вывода с помощью групп подсветки Vim а именно команда :echohl.К сожалению, это нельзя комбинировать с :py print:

:py vim.command('echohl ErrorMsg'); print("foobar")

Решение

Вы должны переключиться на :echo[msg] Vim, чтобы выбранная группа подсветки применялась квыход;теперь все чисто проходит через тот же API.Вы можете объединить и выполнить одну последовательность команд:

:py vim.command('echohl ErrorMsg | echo "foobar" | echohl None')

или отправить несколько vim.command() отдельно:

:execute "py vim.command('echohl ErrorMsg')" | py vim.command('echo "foobar"')
...