Vim 80 sütun düzeni endişeleri


417

Ben Vim 80 sütunlu göstergesini yapmak yolu yanlış görünüyor: set columns=80. Bazen de set textwidth, ama set columnsalternatif ile satır taşmasını görmek ve tahmin edebilmek istiyorum .

Bunun bazı talihsiz yan etkileri vardır:

  1. set numberSatır numaraları farklı olan dosyalar arasında bölme korkusu için olamaz ; örneğin, <100 satır dosyaları ve> = 100 satır dosyaları set columns, ek basamak görüntüleme için kullanılan ekstra sütun nedeniyle iki farklı değer gerektirir .
  2. Ayrıca pencereleri dikey olarak bölmek yerine yeni (g) Vim oturumları başlatıyorum. Çünkü her bölmeyi açtığımda veya kapattığımda vsplitbeni zorlar set columns, bu nedenle yeni bir oturum başlatmak daha az zahmetlidir.

set numbersDikey olarak bölmek vb. İstediğinizde 80 karakterlik gösterimi nasıl ele alırsınız ?


60
Birçok çevrede iyi kod stili olarak kabul edilir; örneğin, Python'un Stil Kılavuzu (PEP8) 79 karakter satırı önerir: python.org/dev/peps/pep-0008
cdleary

4
Mutlak bir "80 karakter satırınız olmalıdır", ancak yeniden boyutlandırılabilecek bir GUI konsol penceresinin içinde çalışmayan herhangi bir konsol tabanlı uygulama gibi bazı sistemlerde okumayı daha hoş hale getirir.
Matthew Scharley

47
@davr: İlk olarak, okunması daha kolay. Bazı çalışmalar, kısa satır uzunluğunun (bir satırda 76 karakter) çevrimiçi okunması en uygun ve hızlı olduğunu göstermektedir. Bunu biliyor musunuz: okurken aniden gözleriniz yanlış çizgide mi? Bu nadiren 80 karakterle olur. İkinci olarak, 1600 piksel genişliğindeki monitörümde iki dosyayı yan yana sık sık görsel olarak düzenler veya farklılaştırırım. Bu yalnızca dosyada 80 karakterden fazla satır yoksa işe yarar. Bu yüzden verimli çalışabilmek için genellikle uzun satırları yeniden biçimlendiririm.
nalply

25
@davr, birkaç dosyayı yan yana düzenlemek için inanılmaz derecede faydalıdır.
aehlke

2
Ben 80 char satır genişliği (çekirdek kodlama stilinden) kabul beri C / C ++ ve JS kodunda çok daha az hata yapmak. Bazen bir çift tarafından taştı, ama nadiren ...
Mark K Cowan

Yanıtlar:


586

Bu benim .vimrc içinde kurulmuş:

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

Bu, 80 sütun sınırını aşan metin için ince kırmızı arka planı vurgular (yine de GUI modunda ince - terminal modunda daha az).


3
İyi fikir! Benim ihtiyaçları daha iyi (gvim açık arka plan ve cterm modunda koyu) uyacak şekilde "ctermbg = darkred" ve "guibg = # FFD9D9" olarak değiştirdim.
HS.

10
Ben ince bir düzeltme /\%81v.\+/ olduğunu düşünüyorum - nedense. * Karakterleri olmayan yerler vurgulamaktadır.
cdleary

14
Bence bu satır maç regex için biraz daha iyi: OverLength /\%>80v.\+/ maç Bu 'satır sonu' karakterini vurgulamaz ve aynı zamanda sayıyı istediğiniz gibi ayarladığınızda daha sezgiseldir. satır uzunluğu +1 değil.
David Terei

8
Nedense benim vim sadece benim için ilk açılan tamponda (ilk sekmenin ilk penceresi) çalışır ...
lajarre

3
Check out stackoverflow.com/a/10993757/9822 bu çözüm sadece ilk tamponu içinde çalışıp çalışmadığını.
Jesse Vogt

769

Vim 7.3'ten itibaren set colorcolumn=80( set cc=80kısaca) kullanabilirsiniz.

Önceki sürümler bunu desteklemediğinden, benim .vimrckullanımlarım:

if exists('+colorcolumn')
  set colorcolumn=80
else
  au BufWinEnter * let w:m2=matchadd('ErrorMsg', '\%>80v.\+', -1)
endif

Seçenekle ilgili çevrimiçi belgelerecolorcolumn de bakın .


26
'Colorcolumn' değerini 'textwidth' üzerine otomatik olarak şöyle bir şeyle
dayandırabilirsiniz

1
("colorcolumn") benim için çalışmadı. Bunun yerine var ("& colorcolumn") kullanmak zorunda kaldı.
SpoonMeiser

5
Çok güzel, ancak vim <7.1.40 matchadd'yi desteklemiyor.
Greg Jandl

19
Ayrıca sütunun renginihighlight ColorColumn ctermbg=7
null_radix


54

Daha kısa yol:

match ErrorMsg '\%>80v.\+'

8
Gerçekten çok hoşuma gidiyor çünkü uzun bir dikey çizgi ile tamponumu kirletmiyor! (Y)
Ionică Bizău

ErrorMsgbir highlight-group. Vim'de, bu durum için istediğiniz renk kodlamasına bağlı olarak kullanabileceğiniz birçok varsayılan vurgulama grubu vardır.
crisron

49

Tercih ederim:

highlight ColorColumn ctermbg=gray
set colorcolumn=80

Bunu beğendim. Gri yerine siyah kullandım ve arkaplanım neredeyse siyah olduğu için daha inceydi ama tam olarak değil.
İzopycnal Salınım

30

Simon Howard'ın cevabı harika. Ancak /\%81v.\+/, 81. sütunu aşan sekmeleri vurgulayamaz. Bu yüzden VIM wiki ve HS'nin yukarıdaki renk seçiminde bulduğum şeylere dayanarak küçük bir değişiklik yaptım :

highlight OverLength ctermbg=darkred ctermfg=white guibg=#FFD9D9
match OverLength /\%>80v.\+/

Ve şimdi VIM 80. sütunu aşan her şeyi vurgulayacaktır.


2
guifg=whiteOraya sonuna eklemek isteyebilirsiniz .
Dan Bechard

17

resim açıklamasını buraya girin

Minimalist, en üstte olmayan yaklaşım. Yalnızca çok uzun olan satırların 79. karakteri vurgulanır. Birkaç yaygın sorunun üstesinden gelir: yeni pencerelerde çalışır, taşan kelimeler düzgün bir şekilde vurgulanır.

augroup collumnLimit
  autocmd!
  autocmd BufEnter,WinEnter,FileType scala,java
        \ highlight CollumnLimit ctermbg=DarkGrey guibg=DarkGrey
  let collumnLimit = 79 " feel free to customize
  let pattern =
        \ '\%<' . (collumnLimit+1) . 'v.\%>' . collumnLimit . 'v'
  autocmd BufEnter,WinEnter,FileType scala,java
        \ let w:m1=matchadd('CollumnLimit', pattern, -1)
augroup END

Not: FileType scala,javabunun Scala ve Java kaynak dosyalarıyla sınırlandığına dikkat edin . Muhtemelen bunu özelleştirmek isteyeceksiniz. Bunu atlarsanız, tüm dosya türlerinde çalışır.


Neden ekledin FileType scala,java? (benim için çalışmıyor)
Dorian

1
@Dorian bunu Scala ve Java dosya türleriyle sınırlar, çünkü o zamanlar üzerinde çalıştığım dosya türleri bunlardı. Bundan bahsetmeyi ihmal ettim. Yanıt güncelleniyor.
Dominykas Mostauskis

Ekran görüntüsünde hangi yazı tipini kullanıyorsunuz? Göze çok hoş geliyor.
Kale

@Idigas: Katılıyorum, ve aslında PuTTY'yi kurduğumda Comic Sans'in kötü bir seçim olabileceğini hissediyorum :)
Mark K Cowan

Vim 7.4'te çalışmak için bu cevapta pasajı alamadım. (Ben de FileType filtresini kaldırdım.)
Mnebuerquo

13

Ayrıca 80 sınırı görmek için çizgi çizebilirsiniz:

let &colorcolumn=join(range(81,999),",")
let &colorcolumn="80,".join(range(400,999),",")

Sonuç:

resim açıklamasını buraya girin


13

Belirtilen sınırların dışına çıkan ilk karakteri işaretlemenin güzel bir yolu:

highlight ColorColumn ctermbg=magenta "set to whatever you like
call matchadd('ColorColumn', '\%81v', 100) "set column nr

Damian Conway'in konuşmasından .


7

Vim'in daha yeni sürümleri :set numberwidth=x, satır numarası ekranının genişliğini ayarlayan bir değere izin verir . Gerçekten katlama vs kullanmıyorum, bu yüzden bunu bilmiyordum. İnce bir dikey çizgi çizmek, bir konsol uygulamasının yeteneklerinin ötesindedir. GVim buna izin verebilir (ben kullanmıyorum, bu yüzden orada yorum yapamam).


5

Korkarım ki, sizi boş kümeyle bırakan çözüm kümesine kısıtlamalar koydunuz.

Kullanmak , hat sınırının yaklaştığını kolayca görememeniz dışında:set textwidth=80 bahsettiğiniz tüm sorunları düzeltir . Bunu yaparsanız , hangi sütunda olduğunuzu görmek için kullanabileceğiniz durum çubuğunda x, y konum görüntüsünü etkinleştirirsiniz.:set ruler

Bunun dışında size ne söyleyeceğinden emin değilim. Sayı sütununu kaybetmek, sütunu katlamak ve sadece yapmak zorunda olduğunuz için böler etmek utanç verici :set columns=80.


Evet, bundan korkuyordum ... Daha grafiksel editörlerde olduğu gibi ince bir dikey çizgi çizmenin gizli bir yolu olacağını umuyordum.
cdleary

5

Bunu deneyebilirsiniz:

au BufWinEnter * if &textwidth > 8
\ | let w:m1=matchadd('MatchParen', printf('\%%<%dv.\%%>%dv', &textwidth+1, &textwidth-8), -1)
\ | let w:m2=matchadd('ErrorMsg', printf('\%%>%dv.\+', &textwidth), -1)
\ | endif

Bu, her arabellekte, biri sizin &textwidthayarladığınız her şeyden önce 8 sütundaki karakterler için ve diğeri de bu sütunun dışındaki karakterler için iki vurgu oluşturacaktır. Bu şekilde bir miktar beklentiniz var. Tabii ki, daha fazla veya daha az beklenti istiyorsanız (bu sütunlarda sözdizimi vurgulama kaybı şeklinde ödediğiniz) farklı bir genişlik kullanmak için ayar yapabilirsiniz.


3

Peki, yardım sütunlarına baktığımızda, gerçekten karışıklık yaratmıyor.

Konsolda, genellikle konsol ayarıyla belirlenir (yani otomatik olarak algılanır); GUI'de gvim pencerelerinin genişliğini belirler (ve belirler).

Normalde konsolların ve pencere yöneticilerinin işlerini set columns

"Satır taşmasını gör ve tahmin et" ile ne demek istediğinden emin değilim. EOL'nin kabaca 80 sütununun eklenmesini istiyorsanız, ya set textwidthda set wrapmargin; sadece yumuşak sargı istiyorsanız (yani çizgi sarılır, ancak gerçek EOL yok), set linebreakve ile oynayın set showbreak.


2

Bu sol alanın dışında ama üzerinde çizgi numaraları varsa mevcut bölme 80 karaktere yeniden boyutlandırmak için güzel bir küçük harita:

" make window 80 + some for numbers wide  
noremap <Leader>w :let @w=float2nr(log10(line("$")))+82\|:vertical resize <c-r>w<cr> 

1

Pencere boyutunu 80 gerçek metin karakterine izin verecek şekilde ayarlamak için bunu deneyebilirsiniz. Bu yine de dikey bölünmelerle çalışmaz.

let &co=80 + &foldcolumn + (&number || &relativenumber ? &numberwidth : 0)

Bu, göreli sayı için vim 7+, 7.3 gerektirir.

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.