首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测VimL脚本中视觉选择的存在性

如何检测VimL脚本中视觉选择的存在性
EN

Stack Overflow用户
提问于 2015-04-08 16:51:17
回答 1查看 281关注 0票数 1

背景

  • vim 7.4
  • VimL脚本问题

问题

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

目标

  • 特雷弗希望在VimL脚本中创建一个只做一件事的函数。
代码语言:javascript
复制
- return `TRUE` if there is currently a visual selection containing one or characters in the currently-active buffer.
- return `FALSE` if there is not currently a visual selection containing one or more characters in the currently-active buffer.

  • 该函数将是其他需要显示不同行为的函数的附件,这取决于当前活动缓冲区中是否存在当前非空的可视选择(行选择或字符选择)。

失败尝试

  • 由于某些原因,这在文档中没有出现,没有现成的解决方案似乎是显而易见的,这似乎是一件非常基本的事情。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-20 10:31:38

因为您的问题是关于投票的,所以严格的回答是mode()轮询只在状态行计算期间或在触发的:autocmd事件处理程序中进行。

如果您含糊地引用的另一个函数是由自定义映射或命令调用的,则mode()对您没有帮助,因为在调用函数时,视觉模式已经被保留。™处理视觉选择的正确方法如下:

  • 自定义命令应该在提供的范围上工作,该范围可以从可视选择中生成;Vim将自动为您添加:'<,'>范围。在很少的情况下,您可能希望创建一个特殊的命令来处理可视选择,例如:Frobnize:FrobnizeVisual,然后只使用:normal! gv来获取和处理所选内容。
  • 可以为正常模式和可视模式定义单独的自定义映射,并将信息作为标志传递给被调用的函数:
代码语言:javascript
复制
:nnoremap <Leader>x :<C-u>call Frobnize(0)<CR>
:xnoremap <Leader>x :<C-u>call Frobnize(1)<CR>
function! Frobnize( isVisualMode )
    ...

TL/DR:你找不到这么方便的功能是有原因的,重新考虑一下你的方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29520714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档