The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

Отображение табуляций и выхода строки за границы 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-ю колонку. 

Проверять так каждую строку или включить автоматический перенос (set tw=80) не всегда удобно.

Более элегантный выход - подсвечивать всё, что вылазит за 80-ю колонку. Ниже несколько рецептов.

Включить подсветку вручную:

   :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-й - "ошибкой". 

Подвечивать только 81-ый символ и кривые пробелы/табы:

   :match BadFormat /\s\+$\|\ \+\t\| \{8,}\|\%81v/


Другая проблема для исходного кода - концевые пробелы (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)

Первое включает подсветку любых пробелов на конце строки. 
Второе и третье подсвечивают табуляции, перед которыми или после которых есть пробелы. 
Вместо "*" можно явно прописать типы файлов, для которых это должно работать.
 
21.05.2009 , Автор: jetxee , Источник: http://sovety.blogspot.com/2009/05/... (доп. ссылка 1)
Ключи: vim, edit / Лицензия: CC-BY
Раздел:    Корень / Пользователю / Редактирование текстов

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, pavlinux (ok), 17:09, 21/05/2009 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    Ща вылезет какой-нить неокульхацкер и скажет, что уже давно нет таких мониторов,
    а на любимом Sony HDMI 52" 16:9, при разрешении 7100x4000, 80 символов это маразм :)


     
     
  • 2.3, Аноним (-), 22:29, 21/05/2009 [^] [ответить]    [к модератору]
  • +/
    А согласитесь что уже мало осталось программистов, у которых есть нужда сидеть в чистой консоли. Почта - тоже самое, выглядит мягко говоря как то странно, если она отформатирована в таком виде.
     
     
  • 3.4, Гость (?), 23:01, 21/05/2009 [^] [ответить]    [к модератору]
  • +/
    >А согласитесь что уже мало осталось программистов, у которых есть нужда сидеть
    >в чистой консоли. Почта - тоже самое, выглядит мягко говоря как
    >то странно, если она отформатирована в таком виде.

    Консоль непричём. В одном окне редактора можно открыть несколько колонок с разными местами одного файла или разными файлами и переключаться между ними или просто смотреть на них. Удобно.

     
     
  • 4.5, Andrew Kolchoogin (?), 23:11, 21/05/2009 [^] [ответить]    [к модератору]
  • +/
    Да не, всё проще: 80 символов надо подсвечивать потому, что так в стандартах написано. With no strings attached. Маразм это, не маразм -- вот есть Coding Style, и будьте добры ему следовать. Dixi.
     
     
  • 5.21, User294 (??), 13:40, 27/05/2009 [^] [ответить]    [к модератору]
  • +/
    >Да не, всё проще: 80 символов надо подсвечивать потому, что так в
    >стандартах написано.

    А вот например был чудный стандарт - модем. На 300 бод. Предлагаю вам на него вернуться, т.к. этот стандарт не отменяли :).И вообще, вдруг какому-то китайскому "тетрису" бОльший поток данных в напряг?!Использовать гигабитный эзернет-никак не можно, что вы! :)

     
     
  • 6.24, dor (?), 11:29, 07/07/2009 [^] [ответить]    [к модератору]  
  • +/
    >А вот например был чудный стандарт - модем. На 300 бод. Предлагаю
    >вам на него вернуться, т.к. этот стандарт не отменяли :).И вообще,
    >вдруг какому-то китайскому "тетрису" бОльший поток данных в напряг?!Использовать гигабитный эзернет-никак
    >не можно, что вы! :)

    Капец.

    А, кстати, "модем" -- не "стандарт".

    Зачем показывать незнание?

    (hint: V.90 -- стандарт, его используют. 802.3 -- стандарт, его используют.)


     
  • 3.22, gaa (ok), 16:41, 28/05/2009 [^] [ответить]    [к модератору]  
  • +/
    >А согласитесь что уже мало осталось программистов, у которых есть нужда сидеть
    >в чистой консоли. Почта - тоже самое, выглядит мягко говоря как
    >то странно, если она отформатирована в таком виде.

    В режиме diff удобно смотреть как раз файлы с 76-78 символами в строке, так как они полностью помещаются. 1280x1024, Terminus 12.

     
  • 1.6, rstone (?), 23:29, 21/05/2009 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    80 это было ширина старого теминала ( те что dec по моему , потом VT )
    потом было 132 , но не очень прижилось .
    Так что стандарт он еще оттуда , и не стандарт вовсе , а принуждение :)
     
  • 1.7, . (?), 23:42, 21/05/2009 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    сейчас это также актуально. взглядом можно охватить приблизительно 80 символов с 12-15 кеглем. на монитор 1024 помещается 110 символов
    жестких ограничений уже нет, но всё же желательно не вылазить за 100 символов
     
  • 1.8, Антон (??), 00:05, 22/05/2009 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Ширина терминала 80 символов - это не причина, а следствие.  Именно 80 символов является пограничным значением, после которого зрительное восприятие строки как единого целого уменшается. Такие же требования приняты и в типографике, покажите мне хоть одну печатную книгу с более 80 символами в строке.
     
     
  • 2.11, pavlinux (ok), 14:33, 22/05/2009 [^] [ответить]    [к модератору]  
  • +/
    >Ширина терминала 80 символов - это не причина, а следствие.  Именно
    >80 символов является пограничным значением, после которого зрительное восприятие строки как
    >единого целого уменшается. Такие же требования приняты и в типографике, покажите
    >мне хоть одну печатную книгу с более 80 символами в строке.
    >

    Альбомы, Иллюстрированные каталоги, ...

     
     
  • 3.15, LiLu (?), 12:20, 23/05/2009 [^] [ответить]    [к модератору]  
  • +/
    >>Ширина терминала 80 символов - это не причина, а следствие.  Именно
    >>80 символов является пограничным значением, после которого зрительное восприятие строки как
    >>единого целого уменшается. Такие же требования приняты и в типографике, покажите
    >>мне хоть одну печатную книгу с более 80 символами в строке.
    >>
    >
    >Альбомы, Иллюстрированные каталоги, ...

    Зачем лгать?

     
  • 2.25, поцанчик (ok), 03:41, 15/07/2010 [^] [ответить]    [к модератору]  
  • +/
    Статистические данные, результаты тестов и исследований...
     
  • 1.9, rstone (?), 00:36, 22/05/2009 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Ну тогда откуда 132 ?
    Ведь было дофига терминалов с шириной 132 .
    По моему , причины были еще и экономические .

     
  • 1.10, masakra (ok), 09:12, 22/05/2009 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Заюзал, автору большой 10x
     
  • 1.12, pavlinux (ok), 14:54, 22/05/2009 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    > Второе и третье подсвечивают табуляции, перед которыми или после которых есть пробелы.

    А как же C комментарии, обычно они в виде

    /*
    * -
    * - вот эти звёздочки, по любому пишут как TAB + 1 SPACE
    */  

    Пример /usr/src/linux/drivers/net/r8169.c

     
     
  • 2.13, RapteR (ok), 19:33, 22/05/2009 [^] [ответить]    [к модератору]  
  • +/
    Комментарий кода уехавший на новую строку прочесть удобнее, чем переварить в голове извращенную синтаксическую конструкцию с кучей скобок и спец. символов.
     
     
  • 3.17, pavlinux (ok), 15:02, 23/05/2009 [^] [ответить]    [к модератору]  
  • +/
    >Комментарий кода уехавший на новую строку прочесть удобнее, чем переварить в голове
    >извращенную синтаксическую конструкцию с кучей скобок и спец. символов.

    Не, я не про это, а про то что если будет TAB + 1 SPACE, то в редакторе
    это будет светиться как красная полоса - раздражает малость...

     
  • 1.19, anonymous (??), 19:33, 25/05/2009 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    На самом деле ограничение в 80 символов пошло от перфокарт. Оно и по сей день актуально для Мэйнфреймов, хотя Card-Reader сейчас является устройством виртуальным, но backward compatibility для Мэйнфреймов это святая корова ...

    http://en.wikipedia.org/wiki/Computer_programming_in_the_punch_card_era

     
  • 1.20, anonymous (??), 19:39, 25/05/2009 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    http://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80
     
  • 1.23, paranormal (?), 18:47, 06/06/2009 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    У меня вышло что то вроде этого:

    " highlighting after 80 letter
    au BufWinEnter *.rb,*.erb,*.pl,*.sh let w:m2=matchadd('ErrorMsg', '\%>80v.\+', -1)
    " highlight trailing spaces
    au BufNewFile,BufRead *.rb,*.erb,*.pl,*.sh let b:mtrailingws=matchadd('ErrorMsg', '\s\+$', -1)
    " highlight tabs between spaces
    au BufNewFile,BufRead *.rb,*.erb,*.pl,*.sh let b:mtabbeforesp=matchadd('ErrorMsg', '\v(\t+)\ze( +)', -1)
    au BufNewFile,BufRead *.rb,*.erb,*.pl,*.sh let b:mtabaftersp=matchadd('ErrorMsg', '\v( +)\zs(\t+)', -1)

    так как мне данная фича только для нескольких Я.П. на которых пишу нужна.

     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:



      Закладки на сайте
      Проследить за страницей
    Created 1996-2018 by Maxim Chirkov  
    ДобавитьПоддержатьВебмастеруГИД  
    Hosting by Ihor