
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와 원활하게 인터페이스됩니다... 짜잔!
난 트리글을 좋아하는데..