Vim'in ayarlanan metin genişliğinin kenarında bir çizgi göstermesini sağlayın


26

Bugünlerde kullandığım metin editörleri ve IDE'lerin çoğu, metin arabelleğinde belirli bir karakter uzunluğunda bir çizgi gösterebilecekleri bir özelliğe sahip. Çizgileri belirli bir uzunlukta bir dosyada tutmak istediğinizde kullanışlıdır.

Bunu yapmak için Vim'i almanın herhangi bir yolu var mı, tercihen önceden tanımlanmış textwidthdeğeri kullanarak ? Çizgiler bu noktada otomatik olarak sarılacak, ancak nerede olduğunu da görmeyi çok isterdim.

Önemli olması durumunda, çoğunlukla Windows'ta gVim kullanıyorum, ancak çözüm Vim sürümlerinde çalışırsa çok isterim.

Yanıtlar:


41

(g) vim için aşağıdakileri kullanın:

set colorcolumn=80

ya da hangi genişlikte istersen. Hem vim'de hem de gvim'de çalışır. Bir IF içinde benimki var, bu yüzden hangi tür dosyaları düzenlediğime bağlı olarak şartlı.

Ayrıca + + / /x sütununu +/- metin genişliğinden itibaren tabanın konumunu da kullanabilirsiniz.

set textwidth=80
set colorcolumn=-2

renkli çubuğu etkin olarak char pozisyonunda çizin. Tabii ki, metin genişliğini kendiniz de ayarlayabilir veya ayarlayamazsınız, bu yüzden 0 olabilir (varsayılan). Mutlak pozisyon formunu kullanıyorum.

İsterseniz kullanılan rengi de değiştirebilirsiniz:

highlight ColorColumn ctermbg=green guibg=orange

(Olsa bu renkler tavsiye etmiyorum)

Bu seçenek, (g) vim 7.3 eklenmiştir.


Bu hangi Vim versiyonunda desteklenmektedir? Benim için gvim 7.2'de çalışmıyor.
Herms,

7.3 koşuyorum. Sadece kaynak kodunu çektim ve baktım, bu komut 7.3'te tanıtıldı.
lornix

Ubuntu 12.04'te vim 7.3 ile benim için çalışıyor. Windows için gvim 7.3, en az 2010 yılının ekim ayından bu yana piyasada mevcut.
poindexter

Yan yana birden fazla pencere kullanırken bu işe yarayacaksa iyi olurdu. Monitörüm arka arkaya birkaç pencere gösterecek kadar geniş, her biri> 80 karakter, ancak colorColumn yalnızca ilk (en soldaki) pencerede çalışıyor.
Eno

3

Google Kodunda deneyebileceğiniz bir pasaj var :

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

Hmm, bu konu, pencerelerin gvim'ini zaten desteklediğini gösteriyor ama nasıl açılacağını çözemiyorum.
Herms,

Gvimrc dosyanıza eklemek için bazı kodlar var.
EBGreen 19

Görünüşe göre bu çizginin ötesine geçen karakterlerin arka planını değiştiriyor. Diğer editörlerde olduğu gibi daima görünür bir rehber olmasını tercih ederim.
Herms,

GUI'nin doğası gereği şu anda mümkün olan pozitif değilim.
EBGreen

Bu, soruda istendiği gibi metin genişliğine uyum sağlamıyor.
Steven Roose

2

Bir StackOverflow yanıtı için :

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

Zevkinize uyacak şekilde ayarlayın.


Hm, tam olarak ne aradığımı değil (sadece karakterleri satırdan geçtiğinde gösterir), ama hiç yoktan iyidir.
Herms,

Bu, soruda istendiği gibi metin genişliğine uyum sağlamıyor.
Steven Roose

1

Ben gibi lornix' cevap çok ama sütununu vurgulamak istemiyorum her zaman , en az bir satır uzunluğu sınırını aştığında:

çizgiler çok uzun olduğunda sütunu gösterme

Haskell dosyalarım için nasıl yaparım:

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

Bu genellikle #vim ve bazı forumlarda tartışıldı. Her şey şimdi olduğu sürece mümkün değil. Yani söz konusu çözüm tek seçeneğiniz, afaik.

Mesele şu ki, vim karakterlerin olduğu yerlerde herhangi bir şey yapabilir (harf, rakam ya da sadece düz boşluk). Fakat orada bir şey yoksa, arka planı farklı bir renkte (istediğiniz gibi) boyayamaz. Ve bir şey yazmadan önce, orada hiçbir şey yoktur, bu yüzden bir çizgi / kenar boşluğu çizemez.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.