什么是检查vimscript哪种可视模式当前处于活动状态(视觉或视觉模块)的最佳方法?检查可视模式
我已阅读约mode()
,但我不能让它工作。
echo mode()
对我不起作用
if mode() == "v"
对我不起作用。
什么是检查vimscript哪种可视模式当前处于活动状态(视觉或视觉模块)的最佳方法?检查可视模式
我已阅读约mode()
,但我不能让它工作。
echo mode()
对我不起作用
if mode() == "v"
对我不起作用。
看看mode()
的帮助。相关部分:
v Visual by character V Visual by line CTRL-V Visual blockwise
你必须检查mode() == "\<C-V>"
(文字^V
字符),不mode() == "v"
,检查块可视模式。
@Remonn已经在评论中说过了,但对我而言并不是很清楚。这是我设法看到的结果:
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
请记住,要在可视模式下进行映射,您可以使用v [no] remap而不是'n [no] remap',而你如果选择非常重要,那么你不希望'
如果Visual Block Mode处于活动状态,您希望做什么? – 2012-04-09 12:53:29
'@Pavan,如果Visual Block Mode处于活动状态,我想计算开始结束块(行+列)的结尾。如果可视模式处于活动状态,我只想计算视觉选择的开始和结束行,但不计算列。 – Reman 2012-04-09 12:57:31
检查':help visualmode()'。 – Raimondi 2012-04-09 15:23:34