Отображение конечных пробелов в vim

Отображение конечных пробелов в vim

Я хотел бы иметь красивое и приятное отображение конечных пробелов в моем терминале 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: Использование функции скрытия

Это наверняка помешает некоторым синтаксисам и плагинам, использующим эту функцию. Плохая идея.

Связанный контент