Vimscript - программно получить цвета из colorscheme - PullRequest
5 голосов
/ 28 марта 2012

Я пытаюсь создать autocmd в Vimscript, который устанавливает несколько атрибутов схемы цветов так, как я хочу. В частности, я пытаюсь сделать фон NonText того же цвета, что и обычный фон.

Проблема в том, что я понятия не имею, как получить цвет фона схемы цветов из vimscript.

У кого-нибудь есть идеи?

Edit:

Так вот что я пытаюсь достичь. На самом деле несколько вещей:

  1. Первоначально я пытался скрыть "~", который стоит перед всеми несуществующими строками. Кто-то предложил установить его в качестве цвета фона, поэтому я добавил autocmd, который сделал это: hi NonText guifg=bg.

  2. После этого я понял, что некоторые схемы цветов имеют другой цвет фона для обычных линий и «несуществующей» части буфера. Это проблема, так как мой autocmd устанавливает цвет NonText таким же, как обычный фон, а не специальный "несуществующий" фон.

    Кроме того, я решил, что даже без всей проблемы «избавиться от ~» мне не нравится, когда несуществующие части буферов имеют другой цвет.

Наконец, я пытаюсь узнать о vim colorschemes в целом, так как я планирую написать плагин, который будет нуждаться в некоторых других приемах, таких как определение цветов из схем.

Ответы [ 2 ]

6 голосов
/ 28 марта 2012

Здесь есть два подхода:

  1. Используйте hi NonText. Не один, но с :redir, конечно. Я не буду описывать его более многословно, потому что лично мне не нравится какое-либо решение, использующее :redir по ряду причин (они: 1. требуют синтаксического анализа 2. нет вложенных перенаправлений 3. нет способа узнать, активно ли перенаправление) .
  2. Используйте synIDattr() и hlID():

    let bgcolor=synIDattr(hlID('NonText'), 'bg#')
    

    назначит что-то в форме "#rrggbb" (просто "N" в терминале) переменной bgcolor или -1, если фон не был определен для этой группы. Вы можете использовать это для создания команды :hi (обычный фон должен быть определен в группе Normal).

  3. Просто используйте

    hi link NonText Ignore
    

    . Работает, если ваша цветовая схема не переопределила группу Ignore, так что на самом деле отображается .

1 голос
/ 28 марта 2012
hi NonText guibg=bg

Как насчет этого?


РЕДАКТИРОВАТЬ после уточнения из ОП:

Хорошо, давайте перейдем кНачните.Пока я бы приостановил написание плагинов, пока вы не ознакомитесь с основными настройками Vim и языком.Символы, одним из которых является ~, который вы пытаетесь скрыть, являются так называемыми символами списка , и их можно определить в опции listchars.Что вы можете увидеть по set listchars?.Их также можно включить / выключить (я имею в виду, видимым или невидимым) с помощью set list / set nolist, или включить / выключить с помощью set invlist.

Группа выделения NonText - этотот, который «покрывает» отображение этих символов, но на самом деле способ их включения / выключения заключается в настройке, а не в перезаписи цвета фона / переднего плана этой группы.Поэтому мое первоначальное замешательство по поводу ваших намерений.Существует также группа выделения SpecialKey, которая также может оказаться интересной, поскольку она охватывает некоторые случаи.

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