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()함수 호출 사이에 정의된 이 변수, 즉 상태 변수를 유지하고 싶습니다 . 이것은 어떻게 이루어 집니까? 해결 방법(예: 나쁜 예의 상태 paste)으로 다른 VIM 변수를 다시 사용할 수 있다고 확신하지만 실제 솔루션을 선호합니다.

감사해요.

답변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

멋진 3상태 토글입니다. (트리글?) (트로글?) {어깨를 으쓱} 전화가...

그리고... 이것은 숫자/상대 숫자 부울에도 영향을 주기 때문에 원하는 autocmd와 원활하게 인터페이스됩니다... 짜잔!

난 트리글을 좋아하는데..

관련 정보