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 (для подсветки пробелов).

20090505

Показать длинные (>80) строчки в Vim

Большинство программистов согласятся, что строчки кода должны быть короче 80 символов. Часто это просто хороший тон: читаем Linux Kernel Coding Style (80) , Style Guide for Python code (79), Good Haskell Style (79), Ruby Coding Conventions (80), Google C++ Style Guide (80)...

Практический вопрос: а как в Vim увидеть, что строка стала длиннее 80 символов? Это может быть очень полезно, если ширина окна больше 80. Простой и дубовый способ: 80| и курсор перемещается на 80-ю колонку. Однако каждую строчку так проверять неудобно.

Более элегантный выход — подсвечивать всё, что за 80-ю колонку вылазит. Сразу куча (похожих) рецептов: Highlight long lines.

Включить подсветку вручную:
:match ErrorMsg '\%>80v.\+'
Чтобы включать подсветку автоматически, каждый раз при открытии буфера, в ~/.vimrc помещаем:
:au BufWinEnter * let w:m1=matchadd('Search', '\%<81v.\%>77v', -1)
:au BufWinEnter * let w:m2=matchadd('ErrorMsg', '\%>80v.\+', -1)
Должно работать в Vim после 7.1.40. При этом последние 4 символа до 80-й колонки будут предупреждающе подсвечиваться «поиском», а все, что после 80-й — «ошибкой».

Дополнение: в комментариях предложен ещё и другой способ выделить последние 4 символа строки:
:au BufWinEnter * let w:m1=matchadd('Search', '\%>76v.*\%<81v', -1)
Тоже работает.


Получается вот так:



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

20090504

Исправление дефектов кожи и ручное удаление шума в GIMP

Александр Прокудин описал очень интересное расширение для GIMP — вейвлетный разбор. За красивым названием — мощнейший инструмент. Можно использовать для:
  • ретуши дефектов кожи,
  • избирательного ручного удаления шума,
  • выделения или удаления деталей определённого размера,
  • смягчения границ...
Принцип действия: вейвлетным преобразованием изображение разделяется на несколько слоёв, каждый с деталями разного размера (разной «длиной волны»), от слоя с мелкими деталями наверху к слоям со всё более крупными деталями внизу. Благодаря такому разбору изображения на слои можно исправить, например, мелкие детали, не затрагивая крупных.

Для установки в Ubuntu Jaunty: скачиваем исходники, устанавливаем пакет libgimp2.0-dev, распаковываем исходники во временный каталог, make, make userinstall.

Расширение появляется в меню ФильтрыОбщиеWavelet decompose.