
有沒有辦法在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
您可以使用設定本身作為您所需的狀態變數......它們是布林值,並且是排他性的。開啟“number”,關閉“relativenumber”,反之亦然。
所以你可以這樣做:
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!
我喜歡三連...