仅为一个命令设置选项

时间:2016-07-08 08:05:40

标签: vim

我正在寻找一种方法来设置virtualedit=block,然后再使用附加绑定g<C-v>执行视觉块选择,之后将其关闭。

我的工作流程中很少有东西需要这种行为。经过一些研究,我没有找到任何东西。所以目前我在我的vimrc中有这个。

nnoremap g<C-v> :setl virtualedit=block<CR><C-v>
nnoremap <C-v> :setl virtualedit=<CR><C-v>

另一个例子是禁用incsearch自定义命令

nnoremap <silent> K :setl nois<CR>:grep! "\b<C-R><C-W>\b"<CR>:setl is<CR> 

所以我的问题是,是否正确或仅仅比我想出的方法更好地为一个命令设置选项并在命令完成后将其切换回来?

更新 以下是@Kent建议

的代码示例
function! Example()
  let &l:virtualedit="block"
  exe "normal \<C-v>"
  let &l:virtualedit=""
endfunction

但这种方式不适用于第一个例子中的情况

1 个答案:

答案 0 :(得分:3)

一种方法是包装函数,并使映射调用函数:

function! Example()
  let &option="whatever"
  logic ...
  let &option="whatever else"
endfunction

或者您可以连接命令:setlocal .. | command | setlocal ...