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
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 :)
+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
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 Zahlen → absolut → relativ → relativ mit absolut in der Cursorzeile :
:exe 'set nu!' &nu ? 'rnu!' : ''
Umschalten zwischen ohne Zahlen → absolute → relativ :
:let [&nu, &rnu] = [&nu+&rnu==0, &nu]
Umschalten zwischen ohne Zahlen → absolute → relativ absolut auf Cursor - Linie :
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!
"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>
" 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>
Antworten:
quelle
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):
Dies wird den gleichen Zyklus beibehalten. Ich denke, es liegt hauptsächlich daran,
let &nu=1
dass implizit norelativenumber gesetzt wird - aus Gründen, die wahrscheinlich in der Dokumentation zu finden sind :)quelle
nmap <F3> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR>
, um mit F3 zwischen drei Optionen umzuschalten .nnoremap <silent> <F3>
um die visuelle Ablenkung zu verringern und andere Zuordnungen zu stören.exe'se'&nu+&rnu?'rnu!':'nu'
.number
undrelativenumber
Optionen zu überzeugen, siehe:helpg When setting this option
.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 Zahlen → absolut → relativ → relativ mit absolut in der Cursorzeile :
Umschalten zwischen ohne Zahlen → absolute → relativ :
Umschalten zwischen ohne Zahlen → absolute → relativ absolut auf Cursor - Linie :
quelle
Für diejenigen, die eine besser lesbare Lösung wünschen, ist das Folgende, was ich in meinem .vimrc habe
Das Coole daran ist, dass Sie ctrl+ ndrücken können, um zwischen dem relativen und dem absoluten Zahlenmodus zu wechseln!
quelle
Eine andere Alternative wie Eric Anderson oben:
quelle
quelle