Заставить Vim отобразить линию на границе заданной ширины текста


26

Большинство текстовых редакторов и IDE, которые я использую в эти дни, имеют функцию, которая позволяет отображать строки определенной длины символов в текстовом буфере. Это полезно, когда вы хотите сохранить строки в файле определенной длины.

Есть ли способ заставить Vim сделать это, предпочтительно используя уже определенное textwidthзначение? Линии будут автоматически перенесены в этот момент, но я бы очень хотел увидеть, где он находится.

В случае, если это имеет значение, я в основном использую gVim для Windows, но я бы хотел, чтобы решение работало в разных версиях Vim.

Ответы:


41

для (g) vim используйте следующее:

set colorcolumn=80

или любую ширину, которую вы хотите. Работает как в vim & gvim. У меня есть мой в IF, так что это зависит от типа файлов, которые я редактирую.

Вы также можете использовать + x / -x для базовой позиции столбца +/- из & textwidth.

set textwidth=80
set colorcolumn=-2

будет эффективно рисовать цветную полосу в позиции символа 78. Конечно, вы можете или не можете установить ширину текста самостоятельно, так что это может быть 0 (по умолчанию). Я использую форму абсолютной позиции.

Вы также можете изменить используемый цвет, если хотите:

highlight ColorColumn ctermbg=green guibg=orange

(Я не рекомендую эти цвета, хотя)

Эта опция была добавлена ​​в (g) vim 7.3.


В какой версии Vim это поддерживается? Это не работает для меня в gvim 7.2.
— Herms

Я бегу 7.3. Я просто извлек исходный код и посмотрел, эта команда была введена в 7.3.
— lornix

У меня работает на Ubuntu 12.04 с vim 7.3. gvim 7.3 для windows доступен по крайней мере с октября 2010 года. @ Herms, можете ли вы сделать это ответом?
— poindexter

Было бы неплохо, если бы это работало при одновременном использовании нескольких окон. Мой монитор достаточно широк, чтобы показывать несколько окон подряд, каждое из которых> 80 символов, но colorColumn работает только в первом (крайнем левом) окне.
— Ино

3

В Google Code есть фрагмент, который вы можете попробовать:

augroup vimrc_autocmds
au!
    autocmd BufRead * highlight OverLength ctermbg=red ctermfg=white guibg=#592929 
    autocmd BufRead * match OverLength /\%81v.*/
augroup END

Хм, этот поток предполагает, что Windows gvim уже поддерживает его, но я не могу понять, как его включить.
— Herms

Есть некоторый код, который нужно добавить к вашему файлу gvimrc далее в потоке.
— EBGreen

Похоже, что это просто меняет фон для символов, которые выходят за рамки. Я предпочел бы иметь всегда видимое руководство, как и другие редакторы.
— Herms

Из-за характера графического интерфейса я не уверен, что в настоящее время это возможно.
— EBGreen

Это не адаптируется к ширине текста, как это было запрошено в вопросе.
— Стивен Руз

2

За ответ StackOverflow :

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

Отрегулируйте по своему вкусу.


Хм, не совсем то, что я ищу (отображается только когда символы проходят за чертой), но это лучше, чем ничего.
— Herms

Это не адаптируется к ширине текста, как это было запрошено в вопросе.
— Стивен Руз,

1

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

показывает столбец, когда строки слишком длинные

Вот как я делаю это для моих файлов на Haskell:

augroup HaskellCommands
autocmd!
  " When a Haskell file is read or the text changes in normal or insert mode,
  " draw a column marking the maximum line length if a line exceeds this length
  autocmd BufRead,TextChanged,TextChangedI *.hs call ShowColumnIfLineTooLong(80)
augroup END

" Color the column marking the lengthLimit when the longest line in the file
" exceeds the lengthLimit
function! ShowColumnIfLineTooLong(lengthLimit)
  " See /programming/2075276/longest-line-in-vim#2982789
  let maxLineLength = max(map(getline(1,'$'), 'len(v:val)'))

  if maxLineLength > a:lengthLimit
    highlight ColorColumn ctermbg=red guibg=red
    " Draw the vertical line at the first letter that exceeds the limit
    execute "set colorcolumn=" . (a:lengthLimit + 1)
  else
    set colorcolumn=""
  endif
endfunction

0

Об этом часто говорили на #vim и на некоторых форумах. Насколько сейчас обстоят дела, это невозможно. Таким образом, упомянутое решение - ваш единственный выбор, афаик.

Дело в том, что vim может делать что угодно с местами, где есть символы (это буквы, цифры или просто пробелы). Но он не может нарисовать фон другим цветом (как вам хотелось бы), если там ничего нет. И прежде чем что-то вводить, там ничего нет, поэтому он не может нарисовать линию / поле.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.