Распределение столбцов Vim 80

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

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

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

Ответ 1

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

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

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

Ответ 2

С 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.

Ответ 3

Более короткий путь:

match ErrorMsg '\%>80v.\+'

Ответ 4

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

highlight ColorColumn ctermbg=gray
set colorcolumn=80

Ответ 5

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

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

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

Ответ 6

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. Вы, вероятно, захотите настроить это. Если вы опустите его, он будет работать на всех типах файлов.

Ответ 7

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

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

От Дамиана Конвей talk.

Ответ 8

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

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

Результат:

enter image description here

Ответ 9

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

Ответ 10

Вы можете попробовать следующее:

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, и один для символов за пределами этого столбца. Таким образом, у вас есть некоторое ожидание. Конечно, вы можете настроить его на использование другой ширины, если хотите больше или меньше ожиданий (которые вы платите в виде потери подсветки синтаксиса в этих столбцах).

Ответ 11

Я боюсь, что вы наложили ограничения на набор решений, которые, ну, оставляют вас с нулевым набором.

Используя :set textwidth=80, вы исправите все проблемы, о которых вы упомянули, за исключением того, что вы не можете легко увидеть лининг линии. Если вы :set ruler, вы включите отображение позиции x, y в строке состояния, которую вы можете использовать, чтобы увидеть, в каком столбце вы находитесь.

Кроме того, я не уверен, что вам сказать. Стыдно потерять столбец чисел, свернуть столбец и разбить только потому, что вам нужно :set columns=80.

Ответ 12

Ну, глядя на столбцы: help, на самом деле это не делается, чтобы возиться с.

В консоли обычно определяется настройкой консоли (т.е. автоматически определяется); в GUI, он определяет (и определяется) ширину окон gvim.

Итак, вы обычно позволяете консолям и оконным менеджерам выполнять свои задания, прокомментировав set columns

Я не уверен, что вы подразумеваете под "видеть и предвидеть переполнение строки". Если вы хотите, чтобы EOL был вставлен примерно в колонку 80, используйте либо set textwidth, либо set wrapmargin; если вы просто хотите мягкую упаковку (т.е. линия обернута, но нет фактического EOL), тогда играйте с set linebreak и set showbreak.

Ответ 13

это одно из левого поля, но его симпатичная маленькая карта для изменения размера текущего разделения до 80 символов, если у вас есть номера строк:

" make window 80 + some for numbers wide  
noremap <Leader>w :let @w=float2nr(log10(line("$")))+82\|:vertical resize <c-r>w<cr> 

Ответ 14

Вы можете попробовать это, чтобы установить размер окна, чтобы разрешить 80 символов фактического текста. Однако это все еще не работает с вертикальными расколами.

let &co=80 + &foldcolumn + (&number || &relativenumber ? &numberwidth : 0)

Для этого требуется vim 7+, 7.3 для relativedumber.