25

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

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

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

5 ответов5

38

для (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.

3

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

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

За ответ StackOverflow:

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

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

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 https://stackoverflow.com/questions/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 может делать что угодно с местами, где есть символы (это буквы, цифры или просто пробелы). Но он не может закрасить фон другим цветом (как вам хотелось бы), если там ничего нет. И до того, как вы что-то напечатаете, там ничего нет, поэтому он не может нарисовать линию / поле.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .