gpt4 book ai didi

vim - vimscript 中函数被多次调用

转载 作者:行者123 更新时间:2023-12-03 09:17:09 26 4
gpt4 key购买 nike

我想在可视模式下按qq时调用一个函数,所以我编写了以下代码:

function! FindSelectionMeaning()
echo "FindSelectionMeaning"
endfunction

vnoremap <silent> qq :call FindSelectionMeaning()<CR>

该函数已被调用,但我有以下问题:

  • 为什么FindSelectionMeaning 会为每个选定的行调用一次?我认为它应该只被调用一次
  • 有没有办法通过vnoremap调用脚本相关的函数(在本例中是s:FindSelectionMeaning而不是FindSelectionMeaning)?<

最佳答案

你的命令被调用了几次(实际上是所选行的数量),因为,当你按:时在可视模式下,vim 会自动添加范围 '<,'> ,它会导致每个选定的行执行稍后输入的命令。如果您的函数只想被调用一次,您可以更改映射,如下所示:

vnoremap <silent> qq :<c-u>call FindSelectionMeaning()<CR>

<c-u>将删除 : 之后的范围信息

其实可以通过这种方式获取选中的文本,我觉得比较简单,保留<c-u>映射,并更改您的功能:

function! FindSelectionMeaning ()
try
let v_save = @v
normal! gv"vy
return @v
finally
let @v = v_save
endtry
endfunction

此函数返回选定的文本。

关于vim - vimscript 中函数被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36406366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com