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 numeroassolutorelativorelativo con assoluto sulla linea del cursore :

    :exe 'set nu!' &nu ? 'rnu!' : ''
    
  • Alterna tra nessun numeroassolutorelativo :

    :let [&nu, &rnu] = [&nu+&rnu==0, &nu]
    
  • Alterna tra nessun numeroassolutorelativo 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.