você pode introduzir variáveis globais com let g:use_rel_numbers
ou let g:use_rel_numbers=1
. variáveis locais seriam melhores, eu acho - let b:use_rel_numbers
por exemplo e setlocal relativenumber
.
Existe alguma maneira de ter uma variável de estado no VIM? Considere:
" Relative line numbers in Normal mode, absolute in Insert mode. Ctrl-N to toggle
set relativenumber
autocmd InsertEnter * :set number
autocmd InsertLeave * :set relativenumber
inoremap <C-n> <C-o>:call NumberToggle()<cr>
nnoremap <C-n> :call NumberToggle()<cr>
function! NumberToggle()
if(useRelNums != 1)
let useRelNums=1
set number
else
let useRelNums=0
set relativenumber
endif
endfunc
Claro, useRelNums
é indefinido. Gostaria de manter essa variável definida entre as chamadas para a função NumberToogle()
, ou seja, uma variável de estado. Como isso é feito? Tenho certeza de que poderia redirecionar alguma outra variável do VIM como solução alternativa (como o estado de paste
para um mau exemplo), mas eu preferiria uma solução real.
Obrigado.
Você pode usar as próprias configurações como variáveis de estado desejadas ... elas são booleanas e exclusivas. ativando 'number', desativa 'relativenumber' e vice-versa.
Então você poderia fazer:
function! ToggleNumbers()
if &number
set relativenumber " was number, now relanum
elseif &relativenumber
set norelativenumber " was relanum, now nothing
else
set number " was nothing, now number
endif
endfunction
Uma boa alternância de três estados. (triggle?) (troggle?) {shrug} sua chamada ...
E ... isso faz uma interface perfeita com os autocmds desejados, pois eles afetam o número / número de relatividades booleanas também ... taa daa!
I like triggle...
Tags vim