vim: przełącz liczbę z relatywnym numerem

15

z

setl nu!

Mogę przełączać numer (on / off), podobnie z relatywnym numerem

setl rnu!

jak mogę przełączyć {off, number, relativenumber}?

juanpablo
źródło
5
aw. dlaczego, do cholery, to pytanie zostało przeniesione do SU? Jest to pytanie programistyczne związane z narzędziem prorgramming . Nie ma więcej SO. Programiści skupiający się na SO (jak ja) nie byliby teraz w stanie znaleźć tej odpowiedzi, ponieważ 5 osób nie wie, co to jest vim. Domyśl. META: meta.stackexchange.com/questions/25925/vim-questions-so-or-su
sehe
@hehe, zgadzam się, to jest pytanie do stackoverflow
juanpablo

Odpowiedzi:

9
if &nu == 1
   set rnu
elseif &rnu == 1
   set nornu
else
   set nu
endif
Benoit
źródło
dzięki Benoit, dodałem twoje rozwiązanie jako sedno
juanpablo
1
@JuanPablo: mmm.
Bardziej
1
@sehe: Powiedziałbym to samo o mojej wersji. :-)
17

Ponieważ uwielbiam łamigłówkę logiczną i naprawdę ją uwielbiam, gdy polecenie vim pasuje do pojedynczego wiersza dla zwięzłych powtórzeń ( @:jest osobistym ulubionym):

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

To utrzyma ten sam cykl. Myślę, że let &nu=1dzieje się tak głównie dlatego, że domyślnie ustawimy norelativenumber - z powodów prawdopodobnie znalezionych w dokumentacji :)

sehe
źródło
3
+1, ponieważ mogę umieścić go w moim pliku .vimrc jako jeden wiersz nmap <F3> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR>przełączania trzech opcji za pomocą F3.
3
możesz to zrobić nnoremap <silent> <F3>... aby zmniejszyć rozproszenie wzroku i zakłócanie innych mapowań.
patrz
Wpadłem na prawie tym samym (ale krótszy :-) linii podczas odczytu na pytanie exe'se'&nu+&rnu?'rnu!':'nu'.
Nawiasem mówiąc, aby upewnić się o połączeniu między numberi relativenumberopcjami, zobacz :helpg When setting this option.
@ib: dzięki za udostępnienie. Naprawdę uwielbiam twoje gry w vim code - są tam klejnoty, które naprawdę przyspieszają moją codzienną pracę; W tym przypadku wybrałem jednak konkretnie moją wersję (3 znaki netto dłużej - oprócz skurczu w przestrzeni kosmicznej), ponieważ jest ona czytelna. Moim zdaniem, dalsze zagęszczanie nie przynosi żadnych korzyści: trudniej jest pisać i trudniej je zapamiętać, nawet jeśli kiedykolwiek musiałeś pisać z pamięci. To będzie mapowanie. Więc wersja Benoit jest w porządku, z wyjątkiem, że nie pasują ładnie w jednej linii
sehe
8

Od wersji Vima 7.3.1115 stało się to trochę bardziej skomplikowane.

Powodem jest to, że oprócz „bez numerów linii” i „bezwzględnych numerów linii” istnieją teraz dwa ustawienia względnych numerów linii: zwykłe „względne numery linii” i „względne numery linii z liczbą bezwzględną na linii kursora”.

Mówiąc bardziej technicznie, wszystkie cztery kombinacje 'number'i 'relativenumber'są teraz możliwe.

Oto jak przełączyć:

  • Przełącz wszystkie cztery ustawienia, bez liczbabsolutnewzględnewzględne z absolutnym na linii kursora :

    :exe 'set nu!' &nu ? 'rnu!' : ''
    
  • Przełącz między brakiemabsolutemwzględnym :

    :let [&nu, &rnu] = [&nu+&rnu==0, &nu]
    
  • Przełącz między brakiemabsolutemwzględnym z absolutem na linii kursora :

    :let [&nu, &rnu] = [!&rnu, &nu+&rnu==1]
    
glts
źródło
7

Dla tych, którzy chcieliby bardziej czytelnego rozwiązania, oto, co mam w moim .vimrc

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

Fajną rzeczą jest to, że możesz nacisnąć ctrl+, naby przełączać się między trybami liczb względnych i bezwzględnych!

Eric Anderson
źródło
0

Kolejna alternatywa, taka jak Eric Anderson powyżej:

"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
źródło
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
źródło