1

Есть ли способ иметь переменную состояния в 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 для плохого примера), но я бы предпочел реальное решение.

Благодарю.

2 ответа2

2

вы можете ввести глобальные переменные с помощью let g:use_rel_numbers или let g:use_rel_numbers=1 . я думаю, что локальные переменные были бы лучше - let b:use_rel_numbers и setlocal relativenumber .

1

Вы можете использовать сами настройки в качестве желаемых переменных состояния ... они являются логическими и эксклюзивными. включение «число», отключение «относительный номер», и наоборот.

Так что вы могли бы сделать:

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

Хороший три состояния переключения. (Triggle?) (Troggle?) {пожав плечами} твой звонок ...

И ... это легко взаимодействует с желаемыми автоматическими командами, так как они также влияют на логические числа / относительные числа ... даааа!

Мне нравится триггл ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .