【问题标题】:How to ignore Characters while matching in vim如何在vim中匹配时忽略字符
【发布时间】:2013-08-01 16:44:58
【问题描述】:

从过去几天开始,我一直在尝试 Vim(Windows 7 上的 gvim),并且必须说它非常有趣,尽管它确实有一个陡峭的学习曲线。

我现在有一个体面的 _vimrc 文件,感谢这个论坛,但我正在寻找一种特定的模式忽略技术。

假设,在一个文本文件中我有一个这样的字符串:

10000000c9abcdef

在同一个文件中,我有相同的字符串,只是用 : 隔开,就像这样,每 2 个字符,

10:00:00:00:c9:ab:cd:ef

或者,我有一行,例如,

hostname portname switchname

还有

hostname_portname_switchname

如何让 vim 匹配 10000000c9abcdef10:00:00:00:c9:ab:cd:ef 并匹配 hostname portname switchnamehostname_portname_switchname

到目前为止,如果我将光标放在10:00:00:00:c9:ab:cd:ef 下方并点击*,它只会突出显示并匹配10:00:00:00:c9:ab:cd:ef,但我怎样才能让它匹配10000000c9abcdef?或hostname_portname_switchnamehostname portname switchname

基本上,我希望 vim 忽略非单词字符(假设非单词字符是空格、制表符、:、::、逗号、冒号、分号等)

有办法吗?

【问题讨论】:

    标签: vim match


    【解决方案1】:

    选择与* 匹配后,您可以修改搜索模式以更改任何文字非关键字字符(\k\@!.)以匹配任何非关键字,可选(\?):

    :let @/ = substitute(@/, '\k\@!.', '\\%(\\k\\@!.\\)\\?', 'g')
    

    要同时使用_,您必须调整正则表达式或:set iskeyword-=_

    【讨论】:

      【解决方案2】:

      不太容易。您将定义一个函数来提取光标下的单词,删除任何非字母数字,在每个字符之间插入[^a-z0-9]*,然后搜索;然后映射#/ 来调用该函数。然而,它也会匹配hos - tnamep; ort - names - witch - name

      【讨论】:

        猜你喜欢
        • 2017-12-10
        • 2014-05-18
        • 1970-01-01
        • 2020-01-10
        • 2019-02-06
        • 1970-01-01
        • 2018-10-05
        • 1970-01-01
        • 2011-09-28
        相关资源
        最近更新 更多