8

Мне бы хотелось, чтобы в моем терминале 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 (фон и передний план)`
  • Совместим с другими плагинами, которые могут использовать скрытый
  • Конечный символ может быть установлен на любой символ Юникода

1 ответ1

4

С точки зрения производительности, ни один из них не должен иметь значения. Vim в основном увязает в сложных синтаксических паттернах; картина здесь довольно проста.

Чтобы цвет подсветки соответствовал выбранной схеме цветов, используйте :hi link на существующую группу; обычно это Error . Конечно, все это имеет значение, только если вы часто переключаете (совсем другие) схемы цветов; иначе, использование подходящих цветов напрямую (как в вашем решении 1) также будет хорошо.

Решение 1. Вручную выделите завершающие пробелы

Я бы пошел на это, но используя matchadd() вместо :match ; это оставляет последний для пользовательского выделения. Кроме того, clearmatches() слишком грубый; удаляет все совпадения и, следовательно, может влиять на плагины. Вы можете использовать / взглянуть на мой плагин ShowTrailingWhitespace для чистой и мощной реализации (которая также включает исключения для определенных типов файлов). Да, это гораздо более масштабное решение, но я пока не заметил каких-либо последствий.

Решение 2. Использование функции списка

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

Решение 3. Использование функции скрытия

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .