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

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

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

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

14 ответов


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

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

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


начиная с 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 опции.


короче так:

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

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

highlight ColorColumn ctermbg=gray
set colorcolumn=80

ответ Саймона Говарда велик. Но!--1--> не удается выделить вкладки, превышающие столбец 81 . Поэтому я сделал небольшую настройку, основанную на материале, который я нашел на VIM wiki и выбор HS цветов выше:

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

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


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


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

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

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


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

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

результат:

enter image description here


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


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

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

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


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

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


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

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

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

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


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

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

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

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

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