检查视觉模式当前处于活动状态(视觉或视觉阻止)的vimscript的最佳方法是什么?
我读过关于mode()
但我无法使其发挥作用
echo mode()
对我不起作用
if mode() == "v"
对我也不起作用。
答案 0 :(得分:5)
查看mode()
的帮助。相关部分:
v Visual by character V Visual by line CTRL-V Visual blockwise
您需要检查mode() == "\<C-V>"
(文字^V
字符),而不是mode() == "v"
,以检查块状视觉模式。
答案 1 :(得分:1)
function! F()
normal! gv
throw mode()
endfunction
vnoremap <F9> <ESC>:call F()<CR>
进入不同的视觉模式,然后点击F9
查看。
我需要抛出,因为-- VISUAL --
行包含任何回显消息。任何人都可以在VISUAL模式中回显吗?
一般来说,我认为当你需要mode()
时最好的办法是制作两个不同的映射,然后是两个完全不同的函数:
function! Fnorm()
endfunction
function! Fvis()
endfunction
nnoremap <F9> :call Fnorm()<CR>
nnoremap <F9> <ESC>:call Fvis()<CR>gv
或单个函数,并根据映射给出不同的参数:
function! F(param)
endfunction
nnoremap <F9> :call F(1)<CR>
nnoremap <F9> <ESC>:call F(2)<CR>gv
另一个相关的技巧是,如果你想在视觉模式下做某事,比如移动光标,该怎么办。我能做的最好的事情是:
function! Fvis()
normal! gv
cursor(1, 1)
endfunction
nnoremap <F9> <ESC>:call Fvis()<CR>gv
答案 2 :(得分:0)
老问题。通过DDG搜索来到这里。
函数 mode 在 vimscript 中不起作用。
有一个新函数 visualmode 旨在用于 vimscript 函数。它返回上次使用的视觉模式。所以要检查块视觉模式...
if visualmode() == "\<C-V>"
" we are in visual block mode
endif