Зробіть так, щоб Vim відображав рядок на краю заданої ширини тексту


26

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

Чи є спосіб змусити Vim зробити це, бажано, використовуючи вже визначене textwidthзначення? Рядки автоматично згортаються в цей момент, але я дуже хотів би бачити, де це також.

У випадку, якщо це має значення, я в основному використовую gVim у Windows, але мені б хотілося, якщо рішення працює в усіх версіях Vim.

Відповіді:


41

для (g) vim, використовуйте наступне:

set colorcolumn=80

або будь-яку ширину ви хочете. Працює як vim & gvim. У мене є IF в межах IF, тому це залежить від типу файлів, які я редагую.

Ви також можете використовувати + x / -x для базового положення стовпця +/- від & textwidth.

set textwidth=80
set colorcolumn=-2

було б ефективно намалювати кольорову смугу в позиції char. Звичайно, ви можете або не можете самі встановити ширину тексту, тому це може бути 0 (за замовчуванням). Я використовую форму абсолютної позиції.

Ви також можете змінити колір, який використовується, якщо бажаєте:

highlight ColorColumn ctermbg=green guibg=orange

(Я не рекомендую ЦІ кольори)

Цей параметр додано у (g) vim 7.3.


У якій версії Vim це підтримується? Це не працює для мене в gvim 7.2.
Герм

Я бігаю 7,3. Я просто витягнув вихідний код і подивився, ця команда була введена в 7.3.
lornix

Працює для мене на Ubuntu 12.04 з vim 7.3. gvim 7.3 для Windows доступний принаймні з жовтня 2010 року. @Гермс, чи можете ви зробити це відповіддю?
poindexter

Було б добре, якби це спрацювало при використанні декількох вікон поруч. Мій монітор досить широкий, щоб відображати кілька вікон підряд, кожне з яких> 80 символів, але colorColumn працює лише на першому (лівому) вікні.
Ено

3

У коді Google є фрагмент, який ви можете спробувати:

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

Гм, цей потік говорить про те, що gvim Windows вже підтримує його, але я не можу зрозуміти, як його ввімкнути.
Гермс

Існує якийсь код, який слід додати до файлу gvimrc далі в потоці.
EBGreen

Схоже, що це просто змінює фон для персонажів, які виходять за межі цієї лінії. Я вважаю за краще мати завжди помітний посібник, як у інших редакторів.
Гермс

Через характер гуї я не впевнений, що наразі це можливо.
EBGreen

Це не адаптується до ширини тексту, як вимагається в запитанні.
Стівен Руз

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 /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 та на деяких форумах. Наскільки зараз речі стоять, це неможливо. Тож згадане рішення - ваш єдиний варіант, afaik.

Справа в тому, що vim може робити що завгодно з місцями, де є символи (це букви, цифри або просто пробіл). Але він не може пофарбувати фон в інший колір (як хотілося б), якщо там нічого немає. І перш ніж щось набрати, нічого там немає, тому воно не може намалювати лінію / поле.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.