Практический вопрос: а как в 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)Тоже работает.Получается вот так:

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



а чем это удобнее, чем set tw=80?
ОтветитьУдалитьtextwidth позволяет строчки переносить, а подсветка позволяет видеть слишком длинные строчки. В общем-то, приведённые примеры можно изменить так, чтобы они учитывали &textwidth.
ОтветитьУдалитьу меня работает такое:
ОтветитьУдалитьmatch BadFormat /\s\+$\|\ \+\t\| \{8,}\|\%81v/
подвечивает только 81-ый символ и кривые пробелы/табы
плюс ftplugin меняющий формат для питона.
Хороший текстовый редактор без проблем переносит строки; в хороших языках программирования перенесённое продолжение строки визуально резко отличается от начала. Следовательно, ограничение на длину строки становится бессмысленным.
ОтветитьУдалить2 migmit:
ОтветитьУдалитьОграничение на длину строки остаётся осмысленным. 1) Оптимальная длина строки, с точки зрения удобства чтения — около 60–70 символов — не случайно газеты печатают узкими колонками; 2) Фиксированная длина строки позволяет без проблем размещать рядом несколько окон/терминалов, это особенно полезно при слиянии изменений или на больших экранах, 3) Именно потому, что перенесённые продолжения строк визуально резко отличаются от начала — получается некрасиво и ненаглядно — и лучше сделать так, чтобы было красиво всегда.
Лишь (2) является техническим ограничением, (1) и (3) связаны с особенностями человеческого зрения и восприятия.
Вот, кстати, обсуждение вопроса.
Этот комментарий был удален администратором блога.
ОтветитьУдалитьУ меня vim 7.2 и ваш пример с 77-80 строками не сработал, только второй.
ОтветитьУдалитьПорылся немного в мануале вима и исправил на такой:
:au BufWinEnter * let w:m1=matchadd('Search', '\%>76v.*\%<81v', -1)
Павел, странно, у меня 7.2.79, и работает. Поиск /\%<81v. выделяет все непустые символы левее 80-й колонки включительно (проверяю с hlsearch). Но твой вариант '\%>76v.*\%<81v' тоже работает. На всякий случай, включу и его в заметку. Спасибо.
ОтветитьУдалить