Відображення пробілів у vim


11

Мені б хотілося, щоб у моєму терміналі vim був гарний і милий показ пробілу пробілу. Це дозволить мені видалити їх перед закриттям файлу.

Я знаю, що це питання досить популярне, і я вже знайшов десятки відповідей на ТА. На жаль, я ще не знайшов задоволення ...

Тому я спробую узагальнити зібрану інформацію та знайдені рішення.

Рішення 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.
garyjohn

Відповіді:


4

Щодо продуктивності, жодне з них не повинно змінити значення. Vim збивається здебільшого складними синтаксичними зразками; візерунок тут досить простий.

Щоб колір виділення відповідав вибраній схемі кольорів, використовуйте :hi linkнаявну групу; зазвичай, це було б Error. Звичайно, будь-яке з цих питань має значення лише в тому випадку, якщо ви часто перемикаєте (зовсім інші) кольорові схеми; в іншому випадку, використання відповідних кольорів безпосередньо (як у вашому рішенні 1) теж буде добре.

Рішення 1: Виділення вручну пробілів

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

Рішення 2: Використання функції списку

Це сама корисна функція, а постійне її збереження впливає на позиціонування курсору на символах Tab, тому я б не рекомендував цього.

Рішення 3: Використання функції приховування

Це, безумовно, заважатиме деяким синтаксисам та плагінам за допомогою функції. Погана ідея.


Отже, з вашої відповіді я розумію, що існує таке рішення, яке дозволяє використовувати спеціальний знак Unicode для позначення додаткових пробілів. Це питання справді складніше, ніж я спочатку думав.
nowox

Правильно, користувальницькі символи працюють лише з 'listchars'. Мені виділення більш ніж достатньо (особливо з агресивними кольорами).
Інго Каркат
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.