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

Viewed 27

I have the following keymaps:

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

But I would like to use only one <leader>vn shortcut for this; i.e. to call NoNumber if Number has already been called. What is the correct way to do this? It seems like I can use if ... else in Number function, but I'm not sure how to implement it correctly. Or is there some other way?

1 Answers

Just check if the option number is set:

if &number
    set nonumber
else
    set number
endif

See the docs on using &option.

You can combine if with the mapping:

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