如何 enable/disable "function" (if ... else)

How to enable/disable "function" (if ... els)

我有以下键盘映射:

nnoremap <silent> <leader>vn :call Number()<CR>

function! Number()
  set number relativenumber
  augroup numbertoggle
    autocmd!
    autocmd BufEnter,FocusGained,InsertLeave * set relativenumber
    autocmd BufLeave,FocusLost,InsertEnter   * set norelativenumber
  augroup END
endfunction

nnoremap <silent> <leader>vN :call NoNumber()<CR>

function! NoNumber()
  set number! norelativenumber
  augroup numbertoggle
    autocmd!
    autocmd BufEnter,FocusGained,InsertLeave * set norelativenumber
    autocmd BufLeave,FocusLost,InsertEnter   * set norelativenumber
  augroup END
endfunction

但我只想使用一个 <leader>vn 快捷方式;即如果 Number 已经被调用,则调用 NoNumber。这样做的正确方法是什么? 好像我可以在 Number 函数中使用 if ... else,但我不确定如何正确实现它。或者有其他方法吗?

只需检查选项 number 是否已设置:

if &number
    set nonumber
else
    set number
endif

请参阅 docs 使用 &option

您可以将 if 与映射结合使用:

:nnoremap <silent> <leader>vn :if &number | call NoNumber() | else | call Number() | endif<CR>