it-roy-ru.com

Проблемы с расположением колонок Vim 80

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

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

Как вы справляетесь с 80-символьной индикацией, когда хотите set numbers, вертикальное разделение и т.д.?

405
cdleary

Я настроил это в моем .vimrc:

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

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

571
Simon Howard

Начиная с 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 .

753
Jeremy W. Sherman

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

match ErrorMsg '\%>80v.\+'
54
Maksim Vi.

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

highlight ColorColumn ctermbg=gray
set colorcolumn=80
42
wieczorek1990

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

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

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

28
Z.Zen

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

14
Dominykas Mostauskis

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

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

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

12
Shanded

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

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

Результат:

enter image description here

11
0x8BADF00D

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

6
Matthew Scharley

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

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

5
Aristotle Pagaltzis

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

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

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

5
Lucas Oman

Что ж, глядя на столбцы: help, на самом деле с ним не связываются.

В консоли это обычно определяется настройками консоли (т. Е. Определяется автоматически); в графическом интерфейсе он определяет (и определяется) ширину окон gvim.

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

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

3
Ding-Yi Chen

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

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

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

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

Для этого требуется vim 7+, 7.3 для относительного номера.

1
Mike L