VIM: Как изменить цвет подсветки Showbreak без использования цветного элемента NonText

Я отметил, что символ "showbreak" подсвечивается цветным элементом "NonText". NonText также используется для символов EOL.
Я хотел бы сохранить цвет подсветки для символов EOL, но вы хотите изменить его для символа showbreak, это возможно?

Другая проблема заключается в том, что мой символ showbreak не отображается. Я хотел бы использовать этот символ "↳" и поместить его в столбец linenumbers (используя set cpoptions + = n). Я не могу понять, как отображать символ и как помещать пробел после символа showbreak (между текстом и символом).

Кто-нибудь может мне помочь?

Ответ 1

Я не думаю, что вы хотите, чтобы подсветка отличалась от символа EOL, по крайней мере, я не знаю, как это сделать.

Во второй части я могу помочь. Я смог получить "↳" для отображения в столбце номера строки со следующими настройками:

let &showbreak = '↳ '
set wrap
set cpo=n

Обратите внимание, что после есть пробел. Это выглядит хорошо, пока в файле не будет > 9 строк. Если вы хотите, чтобы он совпал с последним символом столбца номера, независимо от количества строк, я не уверен, что вам нужно делать.

Изменить: Недавно я написал функцию доказательство концепции для кого-то из IRC, которая выделяет первый символ в строке, которая имеет был обернут другой группой подсветки. Он не тестировался много, но, похоже, он работает. Не совсем то, что вы ищете, но, возможно, стоит посмотреть.

Ответ 2

:help hl-NonText довольно ясно, что вы не можете иметь разные цвета для строки 'showbreak' и других нетекстовых строк, из которых eol является членом (см. :help 'listchars'):

нетекстовых

'~' и '@' в конце окна, символы из 'showbreak' и другие символы, которые на самом деле не существуют в тексте (например, " > " отображается, когда двойной символ не помещается в конце линия).

Если вы согласны принять это ограничение (@elliottcable), hi! link NonText LineNr будет соответствовать строке 'showbreak' цветам номеров строк.

Если вы действительно хотели стать умным, в качестве компромисса вы могли бы создать сопоставление или команду для переключения между ':set list' и ':set nolist', которые также будут настраивать параметр NonText highlight.

Если вы используете :set relativenumber (добавленный в vim 7.3), :set showbreak=↳\ \ \ надежно сохранит ваш 'showbreak' аккуратно выстроенный, поскольку ширина номера не изменится при навигации по файлу. (Это в дополнение к :set cpo+=n и :set wrap @Randy Morris, упомянутым в его ответе.)

Вам обязательно понадобится UTF-8 для символа , поскольку он не отображается в других кодировках. Я настоятельно рекомендую вам тщательно документировать свои проблемы с кодировкой, подробно рассказывая о том, как воспроизводить их вместе с вашей ОС, ее версией и выходом :version vim и размещать их как отдельные вопросы. UTF-8 должен помогать вам бороться с несколькими языками, а не быть препятствием.