Мне бы хотелось, чтобы в моем терминальном vim было хорошее и приятное отображение пробела. Это позволило бы мне удалить их перед закрытием файла.
Я знаю, что этот вопрос довольно популярен, и я уже нашел десятки ответов на SO. К сожалению, я не нашел удовлетворительного еще ...
Поэтому я постараюсь обобщить собранную информацию и найденные решения.
Решение 1. Вручную выделите конечные пробелы
highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()
Плюсы:
- Легко использовать
- Быстрый
- Совместим с
cursorline
Минусы:
- Выбранный цвет не совместим с другими цветовыми схемами, поскольку для цвета вручную установлено значение
red
- Большие красные фоновые блоки не очень эстетичны
Решение 2. Использование функции списка
set list
set listchars+=trail:◦
Плюсы:
- Легко использовать
- Быстрый
Минусы:
- Проблема, если
:set cursorline
включена - Выделенный цвет для
list/trail
не настраивается. Должен быть таким же, как и другие списки
Решение 3. Использование функции скрытия
syn match WhiteSpace "\s\+$" containedin=ALL conceal cchar=◦
set conceallevel=2
set concealcursor=nv
highlight Conceal ctermfg=red
Плюсы:
- Красивее, чем первое решение
Минусы:
- Фон не совпадает с фоном курсора
- Может мешать другим скрытым правилам
- Выбранный цвет не всегда совместим с цветовой схемой
- Не совместим со старой версией Vim
Мой вопрос
Какое из перечисленных решений является наиболее подходящим с точки зрения производительности и совместимости, и как я могу получить все плюсы и ни одного из минусов?
Другими словами, я хотел бы найти решение, где:
- Выделение цвета в конце соответствует выбранной схеме цветов
- Этот цвет хорошо виден, но не слишком агрессивен для глаз
- Совместим с
cursorline
(фоном и передним планом) `- Совместим с другими плагинами, которые могут использовать скрытый
- Конечный символ может быть установлен на любой символ Unicode
:hi link ExtraWhitespace CursorLine
. См:help hi-link
.Ответы:
С точки зрения производительности, ни один из них не должен иметь значения. Vim в основном увязает в сложных синтаксических паттернах; картина здесь довольно проста.
Чтобы цвет подсветки соответствовал выбранной схеме цветов, используйте
:hi link
существующую группу; как правило, это было быError
. Конечно, все это имеет значение, только если вы часто переключаете (совсем другие) схемы цветов; иначе, использование подходящих цветов напрямую (как в вашем решении 1) также будет хорошо.Я бы пошел на это, но использовал
matchadd()
вместо:match
; это оставляет последний для пользовательского выделения. Кроме того,clearmatches()
это слишком грубо; удаляет все совпадения и, следовательно, может влиять на плагины. Вы можете использовать / посмотреть на мой плагин ShowTrailingWhitespace для чистой и мощной реализации (которая также включает исключения для определенных типов файлов). Да, это гораздо более масштабное решение, но я пока не заметил каких-либо последствий.Сама по себе это полезная функция, и ее постоянное включение оказывает влияние на позиционирование курсора на символах табуляции, поэтому я бы не рекомендовал этого делать.
Это, безусловно, будет мешать некоторым синтаксисам и плагинам, использующим эту функцию. Плохая идея.
источник
'listchars'
. Для меня подсветка более чем достаточно (особенно с агрессивными цветами).