Я хотел бы иметь красивое и приятное отображение конечных пробелов в моем терминале 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.
решение1
С точки зрения производительности, ни один из них не должен иметь значения. Vim в основном тормозит из-за сложных синтаксических шаблонов; здесь шаблон довольно прост.
Чтобы цвет подсветки соответствовал выбранной цветовой схеме, используйте :hi link
существующую группу; обычно это Error
. Конечно, все это имеет значение только в том случае, если вы часто переключаете (совершенно разные) цветовые схемы; в противном случае, использование подходящих цветов напрямую (как в вашем решении 1) тоже будет неплохо.
Решение 1: Вручную выделить конечные пробелы
Я бы выбрал это, но использование matchadd()
вместо :match
; это оставляет последнее для пользовательского выделения. Также, clearmatches()
слишком грубо; он удаляетвсесовпадения, и поэтому могут повлиять на плагины. Вы можете использовать / посмотреть на мойПлагин ShowTrailingWhitespaceдля чистой и мощной реализации (которая также включает исключения для определенных типов файлов). Да, это гораздо большее решение, но я пока не заметил никакого эффекта.
Решение 2: Использование функции списка
Это полезная функция сама по себе, и ее постоянное включение влияет на позиционирование курсора на символах табуляции, поэтому я бы не рекомендовал ее.
Решение 3: Использование функции скрытия
Это наверняка помешает некоторым синтаксисам и плагинам, использующим эту функцию. Плохая идея.