Variáveis de estado no VIM

1

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.

    
por dotancohen 01.07.2012 / 11:41

2 respostas

2

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 .

    
por 01.07.2012 / 16:12
1

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...

    
por 01.07.2012 / 16:11

Tags