有没有办法在 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...