Я пишу плагин Vim. Основная логика написана на Python (Python 3.6) с требуемым кодом оболочки Vim Script.
Плагин выводит текст пользователю, используя функции печати Python. Например:
print( "The action " + action + " has failed." )
Как я могу получить слово "не удалось" в красном?
Все, что я пробовал искать до сих пор, возвращается с подсветкой синтаксиса в визуализации кода Vim и ANSI в Vim. Оба цветных текста в основном буфере Vim для любого файла, который вы ищете.
Я хочу покрасить слово из вывода Python из моего плагина. Какие-нибудь мысли?
Мои эксперименты подтверждают, что escape-коды ANSI не работают из встроенного интерпретатора Python. Это неудивительно, так как Vim фиксирует вывод и использует свои собственные процедуры для вывода. Поскольку вы не можете использовать коды ANSI с :echo
, это согласуется с тем, что это не работает с :py print
, no. Кроме того, в GVIM нет терминала, и эмулятор встроенного терминала довольно глупый.
:py print("The ^[[01maction^[[0m has failed.")
Что работает (кроме GVIM), вызывает внешнюю команду, потому что ее вывод напрямую отправляется на терминал. Это вам не поможет (если вы не захотите переключиться на вызов внешнего интерпретатора Python).
:!echo "The ^[[41maction^[[0m has failed."
Способ влиять на расцветку вывода - это группы выделения Vim, а именно :echohl
команда :echohl
. К сожалению, это не может сочетаться с :py print
:
:py vim.command('echohl ErrorMsg'); print("foobar")
Вы должны переключиться на Vim :echo[msg]
чтобы сделать выбранную группу выделения применимой к выходу; теперь все чисто проходит через тот же API. Вы можете либо объединить, либо выполнить одну командную последовательность:
:py vim.command('echohl ErrorMsg | echo "foobar" | echohl None')
Или отправьте несколько vim.command()
отдельно:
:execute "py vim.command('echohl ErrorMsg')" | py vim.command('echo "foobar"')