Неудачные попытки
Мои эксперименты подтверждают, что Экранирующие коды 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"')