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

您可以使用設定本身作為您所需的狀態變數......它們是布林值,並且是排他性的。開啟“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!

我喜歡三連...

相關內容