vim: göreceli sayı ile geçiş yap


15

ile

setl nu!

Relativenumber ile benzer şekilde sayıyı değiştirebilirim (açık / kapalı)

setl rnu!

{off, number, relativenumber} aralığını nasıl değiştirebilirim?


5
aw. neden bu soru SU'ya taşındı? Bu bir olan programlama bir ilgili soru prorgramming aracı . Bundan daha fazla SO elde edemez. SO'ya (benim gibi) odaklanan programcılar artık bu cevabı bulamayacaklardı çünkü 5 kişi vimin ne olduğunu bilmiyor. Git şekil. META: meta.stackexchange.com/questions/25925/vim-questions-so-or-su
sehe

@sehe, katılıyorum, bu stackoverflow için bir soru
juanpablo

Yanıtlar:


9
if &nu == 1
   set rnu
elseif &rnu == 1
   set nornu
else
   set nu
endif

teşekkürler Benoit, bir olarak çözüm eklendi özü
JuanPablo

1
@JuanPablo: mmm.
Sürümümü

1
@sehe: Sürümüm için de aynısını söylerdim. :-)

17

Çünkü bir mantık bulmacasını seviyorum ve bir vim komutu özlü tekrarlar için tek bir satıra sığdığında gerçekten seviyorum ( @:kişisel bir favori):

:exec &nu==&rnu? "se nu!" : "se rnu!"

Bu aynı döngüyü sürdürecektir. Bence esas olarak let &nu=1norelativenumber ayarlayacağı için - muhtemelen belgelerde bulunan nedenlerden dolayı :)


3
+ nmap <F3> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR>3'ü F3 kullanarak üç seçenek arasında geçiş yapmak için bir satır olarak .vimrc dosyama yerleştirebilirim .

3
nnoremap <silent> <F3>görsel dikkat dağılmasını azaltmak ve diğer haritalara müdahale etmek için bunu yapabilirsiniz .
sehe

Sorusunu okuduğumda hemen hemen aynı (ama daha kısa :-) hattı ile geldi: exe'se'&nu+&rnu?'rnu!':'nu'.

Bu arada, numberve relativenumberseçenekler arasındaki bağlantıdan emin olmak için bkz :helpg When setting this option.

@ib: paylaştığınız için teşekkürler. Vim kod golflerinizi gerçekten çok seviyorum - orada günlük işlerimi hızlandıran taşlar var; Ancak bu durumda, okunabilir olduğu için özellikle sürümümü seçtim (net 3 karakter daha uzun - whtiespace krampının yanı sıra). Benim düşünceme göre, daha fazla yoğunlaştırmanın herhangi bir kazancı yoktur : hafızadan yazmak zorunda kalsanız bile yazmak zor ve hatırlanması çok zorlaşır . Bu bir haritalamada olacak. Bu yüzden Benoit'in versiyonu gayet iyi, tek bir hatta iyi
uymama

8

Vim 7.3.1115 itibariyle bu biraz daha karmaşık hale gelmiştir.

Bunun nedeni, "satır numarası yok" ve "mutlak satır numaraları" nın yanı sıra, göreli satır numaraları için artık iki ayar vardır : sıradan "göreli satır numaraları" ve "imleç satırında mutlak numaralı göreli satır numaraları".

Daha teknik olarak konuşursak, dört kombinasyonun hepsi 'number've 'relativenumber'şimdi mümkündür.

Geçiş yapmak için:

  • Dört ayarın tümünü değiştirin, sayı yokmutlakgöreliimleç satırındaki mutlak ile göreli :

    :exe 'set nu!' &nu ? 'rnu!' : ''
    
  • Sayı yokmutlakgöreli arasında geçiş yapın :

    :let [&nu, &rnu] = [&nu+&rnu==0, &nu]
    
  • Sayı yokmutlakbağıl ile imleç satırındaki mutlak arasında geçiş yapın :

    :let [&nu, &rnu] = [!&rnu, &nu+&rnu==1]
    

7

Daha okunabilir bir çözüm isteyenler için, .vimrc dosyamda olan şu

" Relative or absolute number lines
function! NumberToggle()
    if(&nu == 1)
        set nu!
        set rnu
    else
        set nornu
        set nu
    endif
endfunction

nnoremap <C-n> :call NumberToggle()<CR>

Bunun en güzel yanı, göreli ve mutlak sayı modları arasında geçiş yapmak için ctrl+ ntuşuna basabilmenizdir!


0

Yukarıdaki Eric Anderson gibi başka bir alternatif :

"Relative with start point or with line number or absolute number lines
function! NumberToggle()
    if(&number == 1)
        set number!
        set relativenumber!
      elseif(&relativenumber==1)
        set relativenumber
        set number
      else
        set norelativenumber
        set number                                                  
    endif
endfunction

nnoremap <C-n> :call NumberToggle()<CR>

0
" put this in your .vimrc or source it from your .vimrc


  function! ToggleRelativeNumber()

      if &relativenumber

           set norelativenumber

      else

           set relativenumber

      endif

  endfunction

  nmap ;r :call ToggleRelativeNumber()<CR>
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.