vim: basculer le numéro avec le numéro relatif

15

avec

setl nu!

Je peux basculer le nombre (on / off), similaire avec relativenumber

setl rnu!

comment puis-je basculer {off, number, relativenumber}?

Juan Pablo
la source
5
aw. pourquoi diable cette question a-t-elle migré vers SU? Il s'agit d'une question de programmation liée à un outil de pré-programmation . Il n'obtient pas plus de SO que cela. Les programmeurs qui se concentrent sur SO (comme moi) ne pourraient plus trouver cette réponse car 5 personnes ne savent pas ce qu'est vim. Allez comprendre. MÉTA: meta.stackexchange.com/questions/25925/vim-questions-so-or-su
sehe
@sehe, je suis d'accord, c'est une question pour stackoverflow
juanpablo

Réponses:

9
if &nu == 1
   set rnu
elseif &rnu == 1
   set nornu
else
   set nu
endif
Benoit
la source
merci Benoit, j'ajouté votre solution comme essentiel
juanpablo
1
@JuanPablo: mmm. Je préfère ma version :)
sehe
1
@sehe: Je dirais la même chose de ma version. :-)
17

Parce que j'aime un puzzle logique, et je l'aime vraiment quand une commande vim tient sur une seule ligne pour des répétitions succinctes ( @:est un favori personnel):

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

Cela maintiendra le même cycle. Je pense que c'est principalement parce let &nu=1que définira implicitement norelativenumber - pour des raisons probablement trouvées dans la documentation :)

sehe
la source
3
+1 car je peux le placer dans mon fichier .vimrc comme une ligne de nmap <F3> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR>pour basculer entre trois options en utilisant F3.
3
vous pourriez faire ça nnoremap <silent> <F3>... pour réduire la distraction visuelle et interférer avec d'autres mappages.
sehe
Je suis venu avec presque la même (mais plus courte :-) ligne lors de la lecture de la question: exe'se'&nu+&rnu?'rnu!':'nu'.
Soit dit en passant, pour vous assurer de la connexion entre les options numberet relativenumber, consultez :helpg When setting this option.
@ib: merci pour le partage. J'adore vraiment vos golfs vim code - il y a des joyaux qui accélèrent vraiment mon travail quotidien; Dans ce cas, cependant, j'ai spécifiquement sélectionné ma version (un net 3 caractères de plus - en plus de la crampe de l'espace) car elle est lisible. À mon avis, il n'y a aucun avantage à le condenser davantage: il devient plus difficile à taper et beaucoup plus difficile à retenir même si vous avez déjà dû le taper de mémoire. Cela va être dans une cartographie. Ainsi , la version de Benoit est très bien, sauf pour ce qui ne figure bien sur une seule ligne
sehe
8

Depuis Vim 7.3.1115, cela est devenu un peu plus compliqué à faire.

La raison est qu'outre "aucun numéro de ligne" et "numéros de ligne absolus", il existe désormais deux paramètres pour les numéros de ligne relatifs: les "numéros de ligne relatifs" ordinaires et les "numéros de ligne relatifs avec un nombre absolu sur la ligne du curseur".

Plus techniquement parlant, les quatre combinaisons de 'number'et 'relativenumber'sont désormais possibles.

Voici comment basculer:

  • Basculez les quatre paramètres, pas de nombresabsolurelatifrelatif avec absolu sur la ligne du curseur :

    :exe 'set nu!' &nu ? 'rnu!' : ''
    
  • Basculer entre aucun nombreabsolurelatif :

    :let [&nu, &rnu] = [&nu+&rnu==0, &nu]
    
  • Basculer entre aucun nombreabsolurelatif avec absolu sur la ligne du curseur :

    :let [&nu, &rnu] = [!&rnu, &nu+&rnu==1]
    
glts
la source
7

Pour ceux qui souhaitent une solution plus lisible, voici ce que j'ai dans mon .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 chose intéressante à ce sujet est que vous pouvez appuyer sur ctrl+ npour basculer entre les modes de nombre relatif et absolu!

Eric Anderson
la source
0

Une autre alternative comme Eric Anderson ci-dessus:

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