if &nu == 1
set rnu
elseif &rnu == 1
set nornu
else
set nu
endif
com
setl nu!
Eu posso alternar o número (ativado / desativado), semelhante a um número de relatividade
setl rnu!
como posso alternar {off, number, relativenumber}?
Porque eu adoro um quebra-cabeça lógico e realmente 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=1
irá implicitamente definir o número norelativista - por razões provavelmente encontradas na documentação:)
A partir do Vim 7.3.1115 isso se tornou um pouco mais complicado de se fazer .
A razão é que, além de "sem números de linha" e "números de linha absoluta", existem agora duas configurações para números de linha relativos: "números de linhas relativas" comuns e "números de linhas relativas com número absoluto na linha do cursor ".
Mais tecnicamente falando, todas as quatro combinações de 'number'
e 'relativenumber'
são agora possíveis.
Veja como alternar:
Alterna as quatro configurações, sem números → absoluto → relativo → relativo com absoluto na linha do cursor :
:exe 'set nu!' &nu ? 'rnu!' : ''
Alterne entre sem números → absoluto → relativo :
:let [&nu, &rnu] = [&nu+&rnu==0, &nu]
Alterna entre sem números → absoluto → relativo com absoluto na linha do cursor :
:let [&nu, &rnu] = [!&rnu, &nu+&rnu==1]
Para aqueles que gostariam de uma solução mais legível, o seguinte é o que eu 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 interessante disso é que você pode pressionar ctrl + n para alternar entre os modos de número relativo e absoluto!
" 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>
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>