VIM 中的状态变量

VIM 中的状态变量

有没有办法在 VIM 中拥有状态变量?考虑一下:

" 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

当然,useRelNums是未定义的。我想在函数调用之间保持这个变量的定义NumberToogle(),即状态变量。怎么做呢?我确信我可以重新利用其他 VIM 变量作为解决方法(例如,paste对于一个不好的例子,状态),但我更喜欢真正的解决方案。

谢谢。

答案1

您可以使用let g:use_rel_numbers或引入全局变量let g:use_rel_numbers=1。我认为局部变量会更好-let b:use_rel_numbers例如和setlocal relativenumber

答案2

您可以将设置本身用作所需的状态变量...它们是布尔值并且是排他性的。打开“数字”,关闭“相对数字”,反之亦然。

所以你可以这样做:

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

一个不错的三态切换。(触发?)(切换?){耸肩} 你的决定......

并且...这与您想要的自动命令无缝接口,因为它们也会影响数字/相对数字布尔值...taa daa!

我喜欢 triggle...

相关内容