我想当用户qq
在可视模式下按下时调用一个函数,所以我编写了以下代码:
function! FindSelectionMeaning()
echo "FindSelectionMeaning"
endfunction
vnoremap <silent> qq :call FindSelectionMeaning()<CR>
Run Code Online (Sandbox Code Playgroud)
该函数已被调用,但我有以下问题:
FindSelectionMeaning
每个选定的线路都会被调用一次?我认为它应该只被调用一次vnoremap
(在本例中s:FindSelectionMeaning
而不是FindSelectionMeaning
)调用脚本相关的函数?你的命令被调用了几次(实际上是所选行的数量),因为,当你:
在可视模式下按下时,vim会自动添加范围'<,'>
,这导致为每个所选行执行后面输入的命令。如果您的函数只想被调用一次,您可以更改映射,如下所示:
vnoremap <silent> qq :<c-u>call FindSelectionMeaning()<CR>
Run Code Online (Sandbox Code Playgroud)
将<c-u>
在之后删除范围信息:
事实上,你可以通过这种方式获取选定的文本,我认为它更容易,保留映射<c-u>
,并更改你的功能:
function! FindSelectionMeaning ()
try
let v_save = @v
normal! gv"vy
return @v
finally
let @v = v_save
endtry
endfunction
Run Code Online (Sandbox Code Playgroud)
该函数返回选定的文本。