如何在函数内部确定该函数是从可视块模式调用的?这涉及到从以下两个方面调用函数:
- 正常模式映射
- 命令行模式
对于精确的函数,幸运的是它在普通/命令模式或选择单行的可视模式下表现相同。显然,如果有多行 - 来自 a:firstline/lastline
- 函数不是从普通模式调用的。
现在的问题是我需要知道我是否处于可视块模式、单行模式还是其他模式。
我已经尝试了以下所有方法,但都没有成功:
function! T() range
echo [a:firstline, a:lastline]
echo [getpos("'<")[1:2], getpos("'>")[1:2]]
echo visualmode()
echo mode()
endfun
vnoremap TT :call T()<CR>
nnoremap TT :call T()<CR>
使用visual-line模式的输出(注意疯狂的max-int输出):
[3, 4]
[[3, 1], [4, 2147483647]]
V
n
我需要的答案要么是“无法完成”,要么是“逐步操作”。不要给我含糊不清的这样做,然后那样做,最后用这个完成...我已经厌倦了为了完成任何内置功能都必须跳过晦涩难懂的VIM Goldberg式漏洞,而且说实话,我的vim技能还很菜。
vnoremap TT :call T(1)<CR>
和nnoremap TT :call T(0)<CR>
。 - Michael Anderson