函数在vimscript中被多次调用
我想在用户在可视模式下按函数在vimscript中被多次调用,vim,vim-plugin,Vim,Vim Plugin,我想在用户在可视模式下按qq时调用一个函数,因此我编写了以下代码: function! FindSelectionMeaning() echo "FindSelectionMeaning" endfunction vnoremap <silent> qq :call FindSelectionMeaning()<CR> 函数!FindSelectionMeaning() 回声“FindSelectionMeans” 端功能 vnoremap qq:调用FindSe
qq
时调用一个函数,因此我编写了以下代码:
function! FindSelectionMeaning()
echo "FindSelectionMeaning"
endfunction
vnoremap <silent> qq :call FindSelectionMeaning()<CR>
函数!FindSelectionMeaning()
回声“FindSelectionMeans”
端功能
vnoremap qq:调用FindSelectionMeans()
函数已调用,但我有以下问题:
- 为什么
会为每个选定行调用一次?我想应该只叫一次findselectionmeans
- 有没有办法通过
调用脚本相关函数(在本例中,vnoremap
而不是s:findselectionmeans
)findselectionmeans
- 您的命令被调用了好几次(实际上是所选行的数量),因为当您在视觉模式下按
:
时,vim会自动添加range'Ah,对于第一个问题,我似乎需要将range
关键字放在函数之后!FindSelectionMeaning()
我发现,在函数之后添加范围
关键字可以避免这个问题!FindSelectionMeansion()
@FrozenHeart它也可以工作。这取决于你想在函数中做什么。如果如您在问题中所述,打印某物,无论用户选择了什么,只要确保必须在视觉模式下调用该函数,您就可以使用范围,来处理函数中的范围。否,我需要在这个函数中获取视觉上选定的文本。那么第二个问题呢?@Frozenhart添加了我的函数来获取选定的文本
vnoremap <silent> qq :<c-u>call FindSelectionMeaning()<CR>
function! FindSelectionMeaning ()
try
let v_save = @v
normal! gv"vy
return @v
finally
let @v = v_save
endtry
endfunction