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