Vim:如何获得我目前所处的模式

izh*_*hak 9 vim

我正在编写一个插件,用于以特殊方式对代码进行评论,并且在视觉或普通模式下调用时应该会有所不同.

是否有函数或某种方法来确定调用函数时用户所处的模式?

Geo*_*edy 7

mode([expr])返回表示当前模式的字符串.

http://vimdoc.sourceforge.net/htmldoc/eval.html#mode%28%29

但这可能不起作用,因为你可能会在映射的rhs中启动命令模式.

更健壮的方法是设置稍微不同的映射,例如

nmap <Leader>c :call MyFunc('n')<CR>
vmap <Leader>c :call MyFunc('v')<CR>
Run Code Online (Sandbox Code Playgroud)

并使用参数值来了解用户所处的模式.

  • 你应该在这里使用`nnoremap` /`vnoremap`,它们更稳定(即最终用户意外破坏映射的方法要少得多),因此是插件的唯一选择. (5认同)