函数在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