Визуализируйте пространство, если в Vim есть несколько пробелов - PullRequest
0 голосов
/ 29 сентября 2019

Я использовал:

set listchars=tab:├─,trail:·,precedes:←,extends:→,nbsp:·,space:·

для рендеринга пробела и символа табуляции.

Но я хочу показать только> = 2 пробела, я не хочу отображать, если в нем один пробелмежду другими символами.

(Это то же самое, что и "editor.renderWhitespace": "boundary" в vscode)

Могу ли я сделать это в Vim? (config или plugin)

Спасибо.

1 Ответ

1 голос
/ 30 сентября 2019

Используя скрытие, есть несколько способов, которыми это может пойти, в зависимости от того, чего вы хотите достичь.

Я буду использовать matchadd() ниже, но теоретически вы можете сделать что-то подобноес syn-conceal.Разница в том, что совпадение является локальным для окна.Синтаксис доступен там, где он определен - вы можете использовать любой тип файла или другой механизм для установки этого через синтаксис.

Я предполагаю, что регулярное выражение \s (соответствует пробелу) соответствует тому, что вам нужно.Если вам нужны только пробелы, измените \s на (один пробел) в регулярном выражении.

Я предполагаю, что вы можете прочитать vim regexp.Страницы справки обширны, но обратите внимание, что ниже я использую \v, чтобы явно установить магический тип (matchadd чувствителен к опциям, влияющим на регулярные выражения, таким как 'magic'), и я использую \zs, когда это необходимо, чтобы начать совпадение.

Я буду использовать тестовый текст ниже.

Тестовый файл

word word  word   word
word word  word   word

set conceallevel=1

На уровне 1,нам разрешено использовать заменяющие символы в наших матчах.

Таким образом, мы можем заменить все лишние пробелы, например, ., чтобы сделать их выдающимися:

let space_match = matchadd('Conceal', '\v\s\zs\s+', 10, -1, {'conceal': '.'})

(10 является приоритетом по умолчанию, а -1 запрашивает новый идентификатор для матча.)

Очистка

Чтобы избавиться от матча / скрыть, вы можете просто

call matchdelete(space_match)
...