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