vim: attiva / disattiva il numero con relativo numero


15

con

setl nu!

Posso attivare / disattivare il numero (simile) con il numero relativo

setl rnu!

come posso disattivare {off, number, relativenumber}?


5
aw. perché mai questa domanda è stata migrata in SU? Si tratta di una domanda di programmazione relativa a uno strumento di programmazione . Non c'è più SO di così. I programmatori che si concentrano su SO (come me) ora non sarebbero in grado di trovare questa risposta perché 5 persone non sanno cosa sia VIM. Vai a capire. META: meta.stackexchange.com/questions/25925/vim-questions-so-or-su
— sehe

@sehe, sono d'accordo, questa è una domanda per StackOverflow
— juanpablo,

Risposte:


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

grazie Benoit, ho aggiunto la tua soluzione come sostanza
— juanpablo

1
@JuanPablo: mmm. Mi piace la mia versione migliore :)
— sehe

1
@sehe: direi lo stesso della mia versione. :-)

17

Perché adoro un puzzle di logica e lo adoro davvero quando un comando vim si adatta su una singola riga per ripetizioni succinte ( @:è un preferito personale):

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

Ciò manterrà lo stesso ciclo. Penso che sia principalmente perché let &nu=1imposterà implicitamente il numero norelativen - per motivi probabilmente trovati nella documentazione :)


3
+1 come posso metterlo nel mio file .vimrc come una riga nmap <F3> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR>per alternare tra tre opzioni usando F3.

3
potresti farlo nnoremap <silent> <F3>... per ridurre la distrazione visiva e interferire con altre mappature.
— visto il

Mi si avvicinò con quasi lo stesso (ma più breve :-) linea quando leggere la domanda: exe'se'&nu+&rnu?'rnu!':'nu'.

A proposito, per assicurarti della connessione tra numbere le relativenumberopzioni, vedi :helpg When setting this option.

@ib: grazie per averlo condiviso. Adoro i tuoi golf con codice Vim: ci sono gemme che velocizzano davvero il mio lavoro quotidiano; In questo caso, tuttavia, ho selezionato in modo specifico la mia versione (una rete di 3 caratteri più a lungo - oltre allo spazio vuoto) perché è leggibile. Dal mio punto di vista, non c'è alcun vantaggio nel condensarlo ulteriormente: diventa più difficile da scrivere e molto più difficile da ricordare anche se si è mai dovuto digitarlo dalla memoria. Questo sarà in una mappatura. Quindi la versione di Benoit va bene, tranne per il fatto che non si adatta bene su una sola riga
— vedi

8

A partire da Vim 7.3.1115 questo è diventato un po 'più complicato da fare.

Il motivo è che oltre a "nessun numero di riga" e "numero di riga assoluto", ora esistono due impostazioni per i numeri di riga relativi: i "numeri di riga relativi" ordinari e i "numeri di riga relativi" con il numero assoluto sulla riga del cursore ".

Più tecnicamente parlando, tutte e quattro le combinazioni di 'number'e 'relativenumber'ora sono possibili.

Ecco come attivare:

  • Attiva / disattiva tutte e quattro le impostazioni, nessun numero → assoluto → relativo → relativo con assoluto sulla linea del cursore :

    :exe 'set nu!' &nu ? 'rnu!' : ''
    
  • Alterna tra nessun numero → assoluto → relativo :

    :let [&nu, &rnu] = [&nu+&rnu==0, &nu]
    
  • Alterna tra nessun numero → assoluto → relativo con assoluto sulla linea del cursore :

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

7

Per coloro che desiderano una soluzione più leggibile, quanto segue è quello che ho nel mio .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>

La cosa interessante di questo è che puoi premere ctrl+ nper alternare tra le modalità numeriche relative e assolute!


0

Un'altra alternativa come Eric Anderson sopra:

"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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.