vim: alternar número con número relativo


15

con

setl nu!

Puedo alternar el número (activar / desactivar), similar con el número relativo

setl rnu!

¿Cómo puedo alternar {apagado, número, número relativo}?


55
aw ¿Por qué demonios se migró esta pregunta a SU? Es una pregunta de programación relacionada con una herramienta de programación . No hay más SO que eso. Los programadores que se centran en SO (como yo) ahora no podrían encontrar esta respuesta porque 5 personas no saben qué es vim. Imagínate. META: meta.stackexchange.com/questions/25925/vim-questions-so-or-su
sehe

@sehe, estoy de acuerdo, esta es una pregunta para stackoverflow
juanpablo

Respuestas:


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

gracias Benoit, agregué tu solución como una esencia
juanpablo

1
@JuanPablo: mmm. Yo como mi mejor versión :)
sehe

1
@sehe: Yo diría lo mismo sobre mi versión. :-)

17

Porque amo un rompecabezas lógico, y realmente me encanta cuando un comando vim cabe en una sola línea para repeticiones breves ( @:es un favorito personal):

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

Esto mantendrá el mismo ciclo. Creo que se debe principalmente let &nu=1a que establecerá implícitamente un número no relativo, por razones que probablemente se encuentran en la documentación :)


3
+1 ya que puedo colocarlo en mi archivo .vimrc como una línea nmap <F3> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR>para alternar entre tres opciones usando F3.

3
podrías hacer eso nnoremap <silent> <F3>... para reducir la distracción visual e interferir con otras asignaciones.
sehe

Se me ocurrió casi lo mismo (pero más corto :-) línea cuando lee la pregunta: exe'se'&nu+&rnu?'rnu!':'nu'.

Por cierto, para asegurarse de la conexión entre numbery las relativenumberopciones, vea :helpg When setting this option.

@ib: gracias por compartir. Realmente amo sus campos de golf vim code: hay gemas que realmente aceleran mi trabajo diario; En este caso, sin embargo, he seleccionado específicamente mi versión (una red de 3 caracteres más, además de un calambre en el espacio) porque es legible. En mi opinión, no hay ninguna ganancia al condensarlo más: se hace más difícil de escribir y mucho más difícil de recordar, incluso si alguna vez tuvo que escribirlo de memoria. Esto va a estar en un mapeo. Así que la versión de Benoit está bien, excepto que no encaja bien en una sola línea
Sehe

8

A partir de Vim 7.3.1115, esto se ha vuelto un poco más complicado de hacer.

La razón es que, además de "sin números de línea" y "números de línea absolutos", ahora hay dos configuraciones para los números de línea relativos: "números de línea relativos" ordinarios y "números de línea relativos con número absoluto en la línea del cursor".

Más técnicamente hablando, las cuatro combinaciones de 'number'y 'relativenumber'ahora son posibles.

Aquí se explica cómo alternar:

  • Alternar las cuatro configuraciones, sin númerosabsolutorelativorelativo con absoluto en la línea del cursor :

    :exe 'set nu!' &nu ? 'rnu!' : ''
    
  • Alternar entre sin númerosabsolutorelativo :

    :let [&nu, &rnu] = [&nu+&rnu==0, &nu]
    
  • Alternar entre ningún númeroabsolutorelativo con absoluto en la línea del cursor :

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

7

Para aquellos que desean una solución más legible, lo siguiente es lo que tengo en mi .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>

¡Lo bueno de esto es que puedes presionar ctrl+ npara alternar entre los modos de número relativo y absoluto!


0

Otra alternativa como Eric Anderson arriba:

"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>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.