Vim 80 столбцов макет проблем - PullRequest
404 голосов
/ 25 октября 2008

Мне кажется, что в Vim неправильная индикация на 80 столбцов: set columns=80. Иногда я также set textwidth, но мне нравится видеть и предвидеть переполнение строки с помощью альтернативы set columns.

У этого есть некоторые неприятные побочные эффекты - я не могу set number из-за боязни разделения между файлами, которые имеют разные порядки номеров строк; то есть <100 строковых файлов и> = 100 строковых файлов потребуют два разных значения set columns из-за дополнительного столбца, используемого для отображения дополнительных цифр. Я также запускаю новые (g) сеансы Vim вместо разделения окон по вертикали, что вынуждает меня использовать буфер обмена оконного менеджера - vsplit s заставляет меня делать set columns каждый раз, когда я открываю или закрываю панель, поэтому начинаю сессия менее хлопотная.

Как вы обрабатываете 80-символьную индикацию, когда хотите set numbers, вертикальное разделение и т. Д .?

Ответы [ 14 ]

752 голосов
/ 22 сентября 2010

Начиная с vim 7.3, вы можете использовать set colorcolumn=80 (set cc=80 для краткости).

Поскольку более ранние версии не поддерживают это, мой .vimrc использует вместо этого:

if exists('+colorcolumn')
  set colorcolumn=80
else
  au BufWinEnter * let w:m2=matchadd('ErrorMsg', '\%>80v.\+', -1)
endif

См. Также онлайн-документацию по опции colorcolumn .

570 голосов
/ 25 октября 2008

У меня это настроено в моем .vimrc:

highlight OverLength ctermbg=red ctermfg=white guibg=#592929
match OverLength /\%81v.\+/

Это подсвечивает фон тонким красным цветом для текста, который превышает ограничение в 80 столбцов (в любом случае, в режиме графического интерфейса тонкое - в режиме терминала это меньше).

54 голосов
/ 13 июля 2009

Короткий путь:

match ErrorMsg '\%>80v.\+'
42 голосов
/ 04 марта 2016

Я предпочитаю:

highlight ColorColumn ctermbg=gray
set colorcolumn=80
28 голосов
/ 22 июля 2010

Ответ Саймона Ховарда великолепен. Но /\%81v.\+/ не может выделить вкладки, которые превышают столбец 81. Поэтому я сделал небольшую настройку, основанную на материалах, которые я нашел в VIM wiki , и выборе цветов HS выше:

highlight OverLength ctermbg=darkred ctermfg=white guibg=#FFD9D9
match OverLength /\%>80v.\+/

А теперь VIM выделит все, что превышает столбец 80. Ура!

14 голосов
/ 28 января 2014

enter image description here

Минималистичный, не чрезмерный подход. Только 79-й символ слишком длинных строк выделяется. Он преодолевает несколько распространенных проблем: работает в новых окнах, переполненные слова выделены правильно.

augroup collumnLimit
  autocmd!
  autocmd BufEnter,WinEnter,FileType scala,java
        \ highlight CollumnLimit ctermbg=DarkGrey guibg=DarkGrey
  let collumnLimit = 79 " feel free to customize
  let pattern =
        \ '\%<' . (collumnLimit+1) . 'v.\%>' . collumnLimit . 'v'
  autocmd BufEnter,WinEnter,FileType scala,java
        \ let w:m1=matchadd('CollumnLimit', pattern, -1)
augroup END

Примечание: обратите внимание на FileType scala,java, это ограничивает это исходными файлами Scala и Java. Возможно, вы захотите настроить это. Если вы опустите его, он будет работать на всех типах файлов.

12 голосов
/ 01 ноября 2014

Хороший способ пометить только первый символ, выходящий за указанные границы:

highlight ColorColumn ctermbg=magenta "set to whatever you like
call matchadd('ColorColumn', '\%81v', 100) "set column nr

Из разговора Дамиана Конвея .

11 голосов
/ 15 мая 2015

Вы также можете нарисовать линию, чтобы увидеть 80 предел:

let &colorcolumn=join(range(81,999),",")
let &colorcolumn="80,".join(range(400,999),",")

Результат:

enter image description here

6 голосов
/ 25 октября 2008

Более новые версии vim допускают значение :set numberwidth=x, которое устанавливает ширину отображения номера строки. Я на самом деле не использую складывание и т. Д., Поэтому я бы не знал об этом. Хотя рисование тонкой вертикальной линии выходит за рамки консольного приложения. GVim может разрешить это (я им не пользуюсь, поэтому не могу комментировать).

5 голосов
/ 25 октября 2008

Вы можете попробовать это:

au BufWinEnter * if &textwidth > 8
\ | let w:m1=matchadd('MatchParen', printf('\%%<%dv.\%%>%dv', &textwidth+1, &textwidth-8), -1)
\ | let w:m2=matchadd('ErrorMsg', printf('\%%>%dv.\+', &textwidth), -1)
\ | endif

Это установит два блика в каждом буфере, один для символов в 8 столбцах, перед тем, как установлен &textwidth, и один для символов за пределами этого столбца. Таким образом, у вас есть некоторая степень ожидания. Конечно, вы можете настроить его, чтобы использовать другую ширину, если вы хотите более или менее предвосхищать (которое вы платите в виде потери подсветки синтаксиса в этих столбцах).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...