vim: Zahl mit Relativnummer umschalten

15

mit

setl nu!

Ich kann die Nummer (ein / aus) umschalten, ähnlich wie bei der relativen Nummer

setl rnu!

Wie kann ich {off, number, relativenumber} umschalten?

Juan Pablo
quelle
5
aw. Warum um alles in der Welt wurde diese Frage nach SU migriert? Es ist eine Programmierung Frage zu einem verwandten prorgramming Werkzeug . Mehr SO geht nicht. Die Programmierer, die sich auf SO konzentrieren (wie ich), könnten diese Antwort jetzt nicht finden, da 5 Leute nicht wissen, was vim ist. Stelle dir das vor. META: meta.stackexchange.com/questions/25925/vim-questions-so-or-su
siehe
@sehe, ich stimme zu, dies ist eine Frage für Stackoverflow
Juanpablo

Antworten:

9
if &nu == 1
   set rnu
elseif &rnu == 1
   set nornu
else
   set nu
endif
Benoit
quelle
danke Benoit, ich habe deine Lösung als Zusammenfassung hinzugefügt
juanpablo
1
@ JuanPablo: mmm. Ich mag meine Version besser :)
sehe
1
@sehe: Ich würde dasselbe über meine Version sagen. :-)
17

Weil ich ein logisches Puzzle liebe und es wirklich liebe, wenn ein vim-Befehl für kurze Wiederholungen in eine einzelne Zeile passt ( @:ist ein persönlicher Favorit):

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

Dies wird den gleichen Zyklus beibehalten. Ich denke, es liegt hauptsächlich daran, let &nu=1dass implizit norelativenumber gesetzt wird - aus Gründen, die wahrscheinlich in der Dokumentation zu finden sind :)

sehe
quelle
3
+1, da ich es in meiner .vimrc-Datei als eine Zeile einfügen kann nmap <F3> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR>, um mit F3 zwischen drei Optionen umzuschalten .
3
Sie könnten dies tun, nnoremap <silent> <F3>um die visuelle Ablenkung zu verringern und andere Zuordnungen zu stören.
Siehe
Ich kam mit fast der gleichen (aber kürzer :-) Zeile nach oben , wenn die Frage lauten: exe'se'&nu+&rnu?'rnu!':'nu'.
Übrigens, um sich von der Verbindung zwischen numberund relativenumberOptionen zu überzeugen, siehe :helpg When setting this option.
@ib: danke fürs teilen. Ich liebe deine Vim-Code-Golfer sehr - da sind Juwelen, die meine tägliche Arbeit wirklich beschleunigen. In diesem Fall habe ich jedoch speziell meine Version ausgewählt (netto 3 Zeichen länger - außer Leerzeichen), da sie lesbar ist. Aus meiner Sicht gibt es keinen Gewinn daraus Kondensieren weiter: es schwieriger , viel schwieriger zu geben bekommt und auch daran zu erinnern , wenn Sie jemals hat es aus dem Speicher zu geben. Dies wird in einem Mapping sein. Benoits Version ist also in Ordnung, außer dass sie nicht gut in eine einzelne Zeile
passt
8

Ab Vim 7.3.1115 ist dies etwas komplizierter.

Der Grund ist, dass es neben "keine Zeilennummern" und "absolute Zeilennummern" jetzt zwei Einstellungen für relative Zeilennummern gibt: gewöhnliche "relative Zeilennummern" und "relative Zeilennummern mit absoluter Zahl in der Cursorzeile".

Technisch sind nun alle vier Kombinationen von 'number'und 'relativenumber'möglich.

So schalten Sie um:

  • Alle vier Einstellungen umschalten, keine Zahlenabsolutrelativrelativ mit absolut in der Cursorzeile :

    :exe 'set nu!' &nu ? 'rnu!' : ''
    
  • Umschalten zwischen ohne Zahlenabsoluterelativ :

    :let [&nu, &rnu] = [&nu+&rnu==0, &nu]
    
  • Umschalten zwischen ohne Zahlenabsoluterelativ absolut auf Cursor - Linie :

    :let [&nu, &rnu] = [!&rnu, &nu+&rnu==1]
    
glänzt
quelle
7

Für diejenigen, die eine besser lesbare Lösung wünschen, ist das Folgende, was ich in meinem .vimrc habe

" 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>

Das Coole daran ist, dass Sie ctrl+ ndrücken können, um zwischen dem relativen und dem absoluten Zahlenmodus zu wechseln!

Eric Anderson
quelle
0

Eine andere Alternative wie Eric Anderson oben:

"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>
Clasan
quelle
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>
Heronsrise
quelle