Как раскрасить слово в выводе Vim Plugin

1

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

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

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

Как я могу получить слово "не удалось" в красном?

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

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

  • 0
    Где этот текст напечатан?
  • 0
    В самом низу терминала. Где бы вы в противном случае набирали команды или видели, в каком режиме вы находитесь.
Теги:
vim
vim-plugin

1 ответ

1

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

Мои эксперименты подтверждают, что 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"')
  • 0
    Это много, чего я не понимаю. :) Что здорово, дает мне хорошую отправную точку. Я вернусь назад, чтобы сообщить вам, если это то, что я делаю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню