vim: alterna o número com o número relativo


15

com

setl nu!

Posso alternar número (ativado / desativado), semelhante ao número relativo

setl rnu!

como posso alternar {off, number, relativenumber}?


5
aw. por que diabos essa pergunta foi migrada para a SU? É uma questão de programação relacionada a uma ferramenta de pré-programação . Não fica mais SO do que isso. Os programadores que se concentram no SO (como eu) agora não seriam capazes de encontrar essa resposta porque 5 pessoas não sabem o que é o vim. Vai saber. META: meta.stackexchange.com/questions/25925/vim-questions-so-or-su
veja

@sehe, eu concordo, isso é uma pergunta para stackoverflow
juanpablo

Respostas:


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

graças Benoit, eu adicionei a sua solução como uma essência
juanpablo

1
@ JuanPablo: mmm. Eu como a minha versão melhor :)
sehe

1
@sehe: Eu diria o mesmo sobre a minha versão. :-)

17

Porque eu amo um quebra-cabeça lógico e adoro quando um comando vim se encaixa em uma única linha para repetições sucintas ( @:é um favorito pessoal):

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

Isso manterá o mesmo ciclo. Eu acho que é principalmente porque let &nu=1irá definir implicitamente o número norelativ - por razões provavelmente encontradas na documentação :)


3
+1, pois eu posso colocá-lo no meu arquivo .vimrc como uma linha nmap <F3> :exec &nu==&rnu? "se nu!" : "se rnu!"<CR>para alternar entre três opções usando F3.

3
você poderia fazer isso nnoremap <silent> <F3>... para reduzir a distração visual e interferir em outros mapeamentos.
sehe

Eu vim com quase o mesmo (mas mais curto :-) linha quando ler a pergunta: exe'se'&nu+&rnu?'rnu!':'nu'.

A propósito, para garantir a conexão entre numbere relativenumberopções, consulte :helpg When setting this option.

@ib: obrigado por compartilhar. Eu realmente amo o seu código vim - há gemas lá que realmente aceleram meu trabalho diário; Nesse caso, no entanto, selecionei especificamente minha versão (uma rede com três caracteres a mais - além da cãibra de espaço em branco) porque é legível. Em minha opinião, não há qualquer ganho de condensação-lo ainda mais: ele faz ficar mais difícil de escrever e muito mais difícil de lembrar, mesmo se você nunca teve que digitá-lo da memória. Isso vai estar em um mapeamento. Portanto, a versão de Benoit é boa, exceto por não se encaixar muito bem em uma única linha
veja

8

A partir do Vim 7.3.1115, isso se tornou um pouco mais complicado.

O motivo é que, além de "sem números de linha" e "números de linha absolutos", agora existem duas configurações para números de linha relativos: "números de linha relativos comuns" e "números de linhas relativos com número absoluto na linha do cursor".

Mais tecnicamente falando, todas as quatro combinações de 'number'e 'relativenumber'agora são possíveis.

Veja como alternar:

  • Alterne entre as quatro configurações, sem númerosabsolutorelativorelativo com absoluto na linha do cursor :

    :exe 'set nu!' &nu ? 'rnu!' : ''
    
  • Alterne entre nenhum númeroabsolutorelativo :

    :let [&nu, &rnu] = [&nu+&rnu==0, &nu]
    
  • Alterne entre nenhum númeroabsolutorelativo com absoluto na linha do cursor :

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

7

Para aqueles que desejam uma solução mais legível, o seguinte é o que tenho no meu .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>

O legal disso é que você pode pressionar ctrl+ npara alternar entre os modos numérico relativo e absoluto!


0

Outra alternativa como Eric Anderson acima:

"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>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.