从函数内部,如何确定该函数是否是从可视块模式调用的。这涉及从以下两个方面调用该函数:
对于精确的功能,幸运的是它在普通/命令模式或视觉模式下的行为相同,并选择了一行。显然有不止一行 - 来自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>
Run Code Online (Sandbox Code Playgroud)
视觉线模式的输出(注意疯狂的 max-int 输出):
[3, 4]
[[3, 1], [4, 2147483647]]
V
n
Run Code Online (Sandbox Code Playgroud)
我需要“无法完成”或“循序渐进”的各种答案。没有模糊的做这个然后做那个然后完成这个......我厌倦了跳过晦涩的VIM Goldberg-esque漏洞只是为了完成任何内置功能没有提供的简单任务,老实说我的vim-fu是还年轻。
只需像这样调用你的函数:
vnoremap TT :call T(visualmode())<CR>
nnoremap TT :call T('')<CR>
Run Code Online (Sandbox Code Playgroud)
使用空参数时,该函数是从正常模式调用的。否则,传递的字符代表视觉模式(即vvs. Vvs. ^V)。
| 归档时间: |
|
| 查看次数: |
1104 次 |
| 最近记录: |