İsteğe bağlı genişlikteki pencerede Vim'de 80 karakterde yumuşak sarma


127

Gerçek pencere genişliğimden bağımsız olarak, bazı kodları 80 karakterde kaydırmak için Vim'in yumuşak sarma özelliğini ( :set wrap) kullanmak istiyorum .

Henüz bunu yapmanın bir yolunu bulamadım - tüm yumuşak kaplama pencerenin genişliğine bağlı görünüyor

  • textwidthve wrapmarginher ikisi de sert sarma içindir (dosyaya yeni satır karakterleri eklerler)
  • dikey bölme birden çok pencereye bölünme ve bunlardan birinde :vertical resize 80(muhtemelen :set breakat=herhangi bir karakterde kesintilere izin vermek için) kullanma ( biraz hile olsa da), ancak :set numbersatır numaraları değişken sayıda sütun alırken (bağlı olarak dosya uzunluğunda) ve bunlar 80'in bir parçasıdır.

Bunu vim'de yapmanın bir yolu var mı? Diğer kaynaklara göre umut verici görünmüyor .

Şu anda benim yaklaşımım, /^.\{80}\zs.\+varsayılan aramam olması ve böylece en azından vurgulanması yönünde. Onun için bir :syntaxöğe eklemeyi düşündüm , ancak diğer sözdizimi öğeleriyle örtüştüğünde bu durum bozuldu, bu yüzden bu fikri bıraktım.


Aslında, varsayılan bir aramayı nasıl ayarladınız?
thethinman

Yanıtlar:


37

Yapabilirdiniz

  • :set numberwidth=6ve üzerinden satır numaraları sütunu için büyük bir minimum genişlik ayarlayın
  • daha sonra pencerenizi :set columns=86(veya fare ile) uygun boyuta yeniden boyutlandırabilirsiniz .

İçinde milyon satır olan bir dosyayı düzenlerseniz sorun yaşayabilirsiniz, ancak bu pek olası değildir. Bu şekilde de 6 sütun ekran mülkü boşa harcıyorsunuz. Yani hala her türlü sorun var.

Burada ve burada:match yazdığı gibi 80. sütunu geçerek vurgulayabilirsiniz .

Bunun ötesinde bunu yapmanın bir yolunu göremiyorum. Yine de güzel bir özellik olacak gibi görünüyor.


Ne yazık ki vim, pencere yeniden boyutlandırılırsa sütun ayarını korumaz. Bu, pencere çok genişse 80 sütuna yumuşak sarmanın iyi bir yolunun olmadığı döşeme pencere yöneticilerinde talihsiz bir duruma yol açar.
yerçekimi

Bu işe yarıyor, ancak yapışkan değil. Sanırım sonraki adım, istediğiniz dosya türleri için sütunları istenen yeni boyutta tutmak için bir autocmd kurmaktır.
xer0x

1
Bunu yapamayacağınızı onaylaması açısından doğru cevap budur. Ve eminim sadece bunun için terminal penceremi yeniden boyutlandırmak istemeyen tek kişi ben değilim. Vim dışı kullanımlar için çok daha fazla genişlik istiyorum.
Sridhar Sarnobat

20

Bunu dene:

set columns=80
autocmd VimResized * if (&columns > 80) | set columns=80 | endif
set wrap
set linebreak
set showbreak=+++

Sen kaldırabilirsiniz if (&columns > 80) |eğer hep 80 sütun istiyorum.


İTerm terminalimde bu, pencereyi küçültür. Bunun ortamımla ilgili bir sorun olup olmadığından emin değilim (otomatik yeniden boyutlandırma ile bir şey yaptığınızı görüyorum), ancak aksi takdirde bu arzu edilmez. Yine de öneri için teşekkürler.
Sridhar Sarnobat

Autocmd benim için mükemmel çalıştı (guake terminali kullanarak).
mzcarlos

Alacritty'de Tmux + NeoVim ile sihir gibi çalışır.
meh

16

Yumuşak sargı için bir çözümüm yok, ancak bir sütunu işaretlemeye gelince, Vim 7.3'ten itibaren (2010-08-15 piyasaya sürüldü) :set colorcolumn=80sütun 80'i vurgulayacaktır. Renk sözdizimi dosyanıza bağlı olacaktır.

Bkz Vim 80 sütun endişeleri düzeni , :h colorcolumn.


Alıntılar geçerli URL değildir, bu yüzden mantıklıdır. Çapa adı geçersiz URL karakterleri içermemelidir, SO diğer site geliştiricilerinin hatalarını düzeltmemelidir.
Gölge Sihirbazı Sizin İçin Kulak

1
Gölge Sihirbazı, Markdown kullanarak URL'lere nasıl tek tırnak işareti koyacağımı merak ettiğim yanıtımın önceki bir revizyonuna atıfta bulunuyor. Sonra ib , işe yarayan% 27'nin kullanılmasını önerdi . Teşekkürler ib.
ftvs

Yakın zamanda yalnızca 80 ~ geçen sütunların nasıl vurgulanacağını keşfetti:let w:eighty_column_match = matchadd('ColorColumn', '\%81v.\+', 100)
rampion

Bu colorwidthşey başka nedenlerden dolayı yararlı, bu yüzden bunu göndermenize sevindim.
Sridhar Sarnobat

2

Denedin 'linebreak'mi

        *'linebreak'* *'lbr'* *'nolinebreak'* *'nolbr'*
  'linebreak' 'lbr' boolean (default off)
        local to window
        {not in Vi}
        {not available when compiled without the  |+linebreak|
        feature}
If on Vim will wrap long lines at a character in 'breakat' rather
than at the last character that fits on the screen.  Unlike
'wrapmargin' and 'textwidth', this does not insert <EOL>s in the file,
it only affects the way the file is displayed, not its contents.  The
value of 'showbreak' is used to put in front of wrapped lines.
This option is not used when the 'wrap' option is off or 'list' is on.
Note that <Tab> characters after an <EOL> are mostly not displayed
with the right amount of white space.

3
Hmm ... ama breakatsadece bir kalıp (uzunluk değil), bu yüzden bunu 80'de yumuşak sarmayı zorlamak için nasıl kullanabileceğimi
anlamıyorum

Hmmm, toplam uzunluğu (artı aradaki boşluklar) n karakterden küçük veya ona eşit olan kelimelerle eşleşecek bir normal ifade yapmanın mümkün olup olmadığını merak ediyorum.
Shane Creighton-Young

@ ShaneCreighton-Young: ^.{,80}\bYumuşak / genişleyen sekmeler kullanan insanlar için yapardı. Bunun perl regex olduğunu, vim regex olmadığını unutmayın.
Mark K Cowan

0

Bunu yapmanın iyi bir yolu yok. Biz sarıp kesmek setlocal softwrapile autocmdbiz @eborisch cevap değiştirirseniz. Bir tampona her girdiğimizde yeniden boyutlandırırsak ve yerel değişken softwrapayarlandığında belirli bir uzunluğa yeniden boyutlandırırsak , istenen davranışı elde ederiz.

Diyelim ki 80 sütuna yumuşak sarmak istediğimizi, içine aşağıdakini yazabiliriz .vimrc.

augroup softwrap
    autocmd VimResized * if (exists('b:softwrap') && &columns > 80) | set columns=80 | endif
    autocmd BufEnter * set columns=999
augroup END

Belirli bir arabellek için modu açmak için aşağıdaki komutları kullanın:

let b:softwrap=1
set columns=80

Bu sadece dosyalarımı anlamsız hale getiriyor.
Suuuehgi
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.