Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在VimL脚本中检测视觉选择的存在 出身背景 vim 7.4 VimL脚本问题 问题_Vim_Scripting - Fatal编程技术网

如何在VimL脚本中检测视觉选择的存在 出身背景 vim 7.4 VimL脚本问题 问题

如何在VimL脚本中检测视觉选择的存在 出身背景 vim 7.4 VimL脚本问题 问题,vim,scripting,Vim,Scripting,VimL是否有轮询当前视觉选择的方法 球门 Trevor希望在VimL脚本中创建一个只做一件事的函数 如果当前活动缓冲区中存在包含一个或多个字符的可视选择,则返回TRUE 如果当前活动缓冲区中当前没有包含一个或多个字符的可视选择,则返回FALSE 该函数将是需要显示不同行为的其他函数的附加项,具体取决于当前活动缓冲区中是否存在当前非空视觉选择(按行或按字符) 失败的尝试 由于某些原因,文档中没有实现这一点,没有现成的解决方案,这似乎是一件非常基本的事情 我相信mode()函数正是您需要

VimL是否有轮询当前视觉选择的方法

球门
  • Trevor希望在VimL脚本中创建一个只做一件事的函数

    • 如果当前活动缓冲区中存在包含一个或多个字符的可视选择,则返回
      TRUE
    • 如果当前活动缓冲区中当前没有包含一个或多个字符的可视选择,则返回
      FALSE
  • 该函数将是需要显示不同行为的其他函数的附加项,具体取决于当前活动缓冲区中是否存在当前非空视觉选择(按行或按字符)

失败的尝试
  • 由于某些原因,文档中没有实现这一点,没有现成的解决方案,这似乎是一件非常基本的事情
我相信
mode()
函数正是您需要的。(从
:h模式()

如果处于视觉模式,If将返回
v
v
CTRL-v

但是,此函数几乎总是返回
c
n
,因为在运行ex命令时,可视选择立即结束。您可以使用标记
”来确定视觉选择的位置。我相信
mode()
函数就是您要查找的。(从
:h模式()

如果处于视觉模式,If将返回
v
v
CTRL-v

但是,此函数几乎总是返回
c
n
,因为在运行ex命令时,可视选择立即结束。您可以使用标记
“确定视觉选择的位置,因为您的问题是关于轮询的,严格的答案是
mode()
轮询仅在状态行求值期间或在触发的
:autocmd
事件处理程序中发生

如果您模糊地引用的另一个函数是由自定义映射或命令调用的,
mode()
对您没有帮助,因为在调用您的函数时,可视化模式已经离开。正确的方法™ 要处理此项的视觉选择,请执行以下操作:

  • 自定义命令应在提供的范围内工作,该范围可通过视觉选择生成;Vim将自动在
    :'前面加上前缀,因为您的问题是关于轮询的,严格的答案是
    mode()
    轮询仅在状态行求值期间或在触发的
    :autocmd
    事件处理程序中发生

    如果您模糊地引用的另一个函数是由自定义映射或命令调用的,
    mode()
    对您没有帮助,因为在调用您的函数时,可视化模式已经离开。正确的方法™ 要处理此项的视觉选择,请执行以下操作:


    • 自定义命令应在提供的范围内工作,该范围可通过视觉选择生成;Vim将自动在<代码>:'//但是,该函数几乎总是返回c或n,因为在运行ex命令时,可视选择立即结束//这听起来像是第22条军规,因为目标是得到一个只返回“true”或“false”的函数。@dreftymac它几乎总是返回false,(如果您编写了包装器函数)。大多数函数都是在视觉选择结束后执行的。您可能需要为正在执行的操作寻找替代方法,以便澄清。当前的理解是,如果进行了视觉选择(例如使用ggVG)有人立即执行了
      ::调用MyCustomFunction
      您是说MyCustomFunction将终止视觉模式选择?@dreftymac正确。如果您在
      MyCustomFunction
      中调用mode,它将返回
      n
      如果您从映射运行主函数,则
      mode()
      将正常工作:
      xnoremap MyFunction()
      //但是此函数几乎总是返回c或n,因为在运行ex命令时,可视选择立即结束//这听起来像是第22条军规,因为目标是获得只返回“true”或“false”的函数。@dreftymac它几乎总是返回false,(如果您编写了包装器函数)。大多数函数都是在视觉选择结束后执行的。您可能需要为正在执行的操作寻找替代方法,以便澄清。当前的理解是,如果进行了视觉选择(例如使用ggVG)有人立即执行了
      ::调用MyCustomFunction
      您是说MyCustomFunction将终止视觉模式选择?@dreftymac正确。如果您在
      MyCustomFunction
      中调用mode,它将返回
      n
      如果您从映射运行主函数,则
      mode()
      将正常工作:
      xnoremap MyFunction()
      询问您的目标,而不是询问您失败的方法//询问您的目标,而不是询问您失败的方法//目标标题下精确解释了目标。要创建一个函数,如果存在可视选择,则返回
      True
      ,如果不存在可视选择,则返回
      False
      。不,这不是您的目标l、 //不,这不是你的目标。//嗯……是的。明确无条件地。请注意,这是StackOverflow,对本网站的贡献应该是建设性的和高质量的。没有证据表明对主题不熟悉的声明不符合该阈值。询问你的目标,而不是关于你的失败意味着//询问你的目标,而不是你的失败意味着//目标标题下精确地解释了目标。若要创建一个函数,该函数返回
      True
      ,前提是存在一个
                                                              mode()
      mode([expr])    Return a string that indicates the current mode.
                      If [expr] is supplied and it evaluates to a non-zero Number or
                      a non-empty String (non-zero-arg), then the full mode is
                      returned, otherwise only the first letter is returned.  Note
                      that " " and "0" are also non-empty strings.
      
                              n       Normal
                              no      Operator-pending
                              v       Visual by character
                              V       Visual by line
                              CTRL-V  Visual blockwise
                              s       Select by character
                              S       Select by line
                              CTRL-S  Select blockwise
                              i       Insert
                              R       Replace R
                              Rv      Virtual Replace gR
                              c       Command-line
                              cv      Vim Ex mode gQ
                              ce      Normal Ex mode Q
                              r       Hit-enter prompt
                              rm      The -- more -- prompt
                              r?      A :confirm query of some sort
                              !       Shell or external command is executing
                      This is useful in the 'statusline' option or when used
                      with remote_expr() In most other places it always returns
                      "c" or "n".
                      Also see visualmode().
      
      :nnoremap <Leader>x :<C-u>call Frobnize(0)<CR>
      :xnoremap <Leader>x :<C-u>call Frobnize(1)<CR>
      function! Frobnize( isVisualMode )
          ...