在 vim 中,如何进行自定义单词边界运动?

Posted

技术标签:

【中文标题】在 vim 中,如何进行自定义单词边界运动?【英文标题】:In vim, how do I make a custom word boundary motion? 【发布时间】:2012-03-21 09:37:06 【问题描述】:

据我了解,w 通过将文本分成 3 组来识别单词边界:

1) 在iskeyword 设置中指定的字符(字母、数字和下划线)

2) 其他不可打印的字符(符号)

3) 空白字符

每次按 w 时,它都会转到下一个组 1 或组 2。我想对其进行自定义,使其仅转到下一个组 1,跳过“符号词”。

几乎可行的是:

nnoremap w /\k\+<CR>

它使用iskeyword 字符类\k。但它很丑,因为它模拟了我执行搜索,这改变了我的突出显示,弄乱了我的搜索历史,谁知道还有什么。有没有办法像w 命令一样“干净”地完成这项工作?

【问题讨论】:

我不太符合您的要求。 W 有帮助吗?它有两组字符:空白和非空白,所以它总是在下一个空白之后的第一个字符。 不,它不太有效:W 将符号字符与字母字符混为一谈。我想要的是有效地将符号与空格合并,以便在创建单词边界的同时跳过符号。 【参考方案1】:

我认为您正在寻找operator pending mode,又名xmap, smap 和家人。

我已经做了一些in other answers on SO的例子:

最相关的例子可能是

vim: select inside dots

您还会发现一些类似的技术,可能对您有用

【讨论】:

我记得那个。很好的答案。 让它成为操作员的正确动作很棒,而且这个答案教会了我一些新东西。但真正让我不开心的是模拟“我执行搜索”来移动,我必须这样做来定义我对应的xmapomap @Nuno:为了记录,文档说从 vimscript(函数)内部搜索不会影响您的“当前”搜索模式、搜索历史等。(无论如何,任何其他副作用都可以简单地在同一个函数中恢复) 如何定义将光标移动到下一个/\k\+ 搜索结果的函数? :search('\m\k\+', 'W') 会将光标移动到下一个 /\k\+ 搜索结果。作为奖励,它不会弄乱您的搜索历史或突出显示。有关更多选项,请参阅:h search()【参考方案2】:

我在这里可能帮不上什么忙..我什至不知道\k 在这种情况下是什么意思,但是您可以解决您提出的两个直接问题:

nnoremap w /\k\+<CR>:nohl<CR>:call histdel("search", -1)<CR>

它很难看,突出显示可能会闪烁,但也许这会为您指明正确的方向。

【讨论】:

以上是关于在 vim 中,如何进行自定义单词边界运动?的主要内容,如果未能解决你的问题,请参考以下文章

vim自定义设置-配置文件

如何在我的 VS 代码扩展中获取自定义单词的范围?

ES自定义分词器

如何为我的字典应用程序构建自定义查找

自定义 UICollectionViewFlowLayout 问题

当我导航到其他路由器页面时,如何清除由错误边界创建的自定义消息