Линукс, Vim, LaTeX, полезные скрипты, визуализация данных, численные расчёты, немного ФП

20090509

Подсветка табуляций между пробелами и концевых пробелов в Vim

Продолжаю тему вспомогательной подсветки в Vim. Прошлый раз писал как показать длинные (> 80 символов) строчки в Vim.

Другая зараза для исходного кода — концевые пробелы (trailing whitespace) и табуляции вперемежку с пробелами. Для их подсветки у меня в ~/.vimrc есть вот такие выделения:
" highlight trailing spaces
au BufNewFile,BufRead * let b:mtrailingws=matchadd('ErrorMsg', '\s\+$', -1)
" highlight tabs between spaces
au BufNewFile,BufRead * let b:mtabbeforesp=matchadd('ErrorMsg', '\v(\t+)\ze( +)', -1)
au BufNewFile,BufRead * let b:mtabaftersp=matchadd('ErrorMsg', '\v( +)\zs(\t+)', -1)
Первое включает подсветку любых пробелов на конце строки. Второе и третье подсвечивают табуляции, перед которыми или после которых есть пробелы. Понятно, что вместо * можно явно прописать типы файлов, для которых это должно работать, но единственное место, где мне это не нужно — это буферы со справкой. Поэтому у меня сделано сейчас так:
" disable matches in help buffers
au BufEnter,FileType help call clearmatches()
Выглядит это так:



Подобным же целям служат, но иначе работают, скрипт spacehi.vim и рецепт #396 (для подсветки пробелов).

3 коммент.:

  1. Мне удобней другой вариант - автоматическое удаление trailing whitespaces и автоматическая замена табов на пробелы. В vim не настраивал ни разу такое, но вот в Geany такая функциональность есть по умолчанию

    ОтветитьУдалить
  2. В vim тоже можно удалять и заменять автоматически:

    %s/\s\+$// — удалить концевые пробелы
    опция expandtab — заменять табуляции при наборе
    команда retab — замена уже набранных табуляций в соответствии с текущими настройками

    Можно поместить в автокоманды на сохранение, но я предпочитаю вручную. А подсветку сделал, чтобы, когда открываешь чужой файл, сразу было видно, нормально он набран, или с сюрпризами.

    ОтветитьУдалить
  3. Пасиб за фишку, полезно :)

    ОтветитьУдалить