Заставить 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.