Toggle
在前面的章节中,我们介绍过设置Vim的一种方式。使用叹号可以快速将布尔变量设置为相反的值(set someoption!)。把常用的设置映射成快捷键会非常实用。
1 |
:nnoremap <leader>N :setlocal number!<cr> |
但是这只对布尔类型的设置有用。对于需要提供参数来设置的项目,就不能用这种方法进行快速设置了。
Toggle选项
在这种情况下,我们可以定义一个函数,然后将某个函数map到这个快捷键。这里用foldcolumn举例,这个设置是在左边打开/关闭代码折叠的层级的。
下面的代码可以快速设置foldcolumn为0或4切换。将代码复制到~/.vimrc中然后source一下。
1 2 3 4 5 6 7 8 9 |
nnoremap <leader>f :call FoldColumnToggle()<cr> function! FoldColumnToggle() if &foldcolumn setlocal foldcolumn=0 else setlocal foldcolumn=4 endif endfunction |
再举一个例子,下面的代码可以快速开关quickfix窗口。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
nnoremap <leader>q :call QuickfixToggle()<cr> let g:quickfix_is_open = 0 function! QuickfixToggle() if g:quickfix_is_open cclose let g:quickfix_is_open = 0 else copen let g:quickfix_is_open = 1 endif endfunction |
但问题是,关闭窗口的时候会跳到最后一个窗口,我们关闭的时候跳到之前打开的窗口。可以在打开quickfix的时候记录一下是哪个窗口。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
nnoremap <leader>q :call QuickfixToggle()<cr> let g:quickfix_is_open = 0 function! QuickfixToggle() if g:quickfix_is_open cclose let g:quickfix_is_open = 0 execute g:quickfix_return_to_window . "wincmd w" else let g:quickfix_return_to_window = winnr() copen let g:quickfix_is_open = 1 endif endfunction |
看完了.
还有吗
谢谢哦。以后也会更新,发在博客上,不保证更新频率……