【问题标题】:Vim object-select with syntax-aware text-objects带有语法感知文本对象的 Vim 对象选择
【发布时间】:2023-03-09 23:29:01
【问题描述】:

我刚刚了解了 vim 真正令人敬畏的 object-select 功能。将光标放在某个“文本对象”中,一组简单的动词可以选择或操作整个对象。例如,将光标放在下面引号内的任意位置(例如,在 'o' 上):

print "Hello, world"
           ^

命令vi" 将选择引号内的整个短语。相同的功能适用于 vim 定义的许多“text objects”,包括单词、句子、段落和用引号、括号和大括号括起来的字符。

但现在我希望“文本对象”这个概念能够了解我正在编写的语言。例如,考虑以下 python:

re.sub("[^A-Z ]", " ", string)

我希望能够将光标放在上面的某个位置,然后选择整个内容。函数调用是一个定义明确的句法结构,但它不是“单词”、“句子”、“段落”,也不是用引号或大括号括起来的。

是否有任何插件或 vimrc hacks 可以定义这些依赖于语言的“文本对象”?

【问题讨论】:

    标签: vim select text syntax


    【解决方案1】:

    This script 使用缩进定义文本对象。如果您根据通用标准进行格式化,它将适用于多种语言,并保证适用于 python。

    【讨论】:

    • 我刚刚对这个旧回复投了几票。但是,如果你还在市场上寻找这样的东西,python-mode 包括用于类和方法的实际 python 文本对象(它非常全面,但你可以禁用其中的大部分):github.com/klen/python-mode
    【解决方案2】:

    虽然可以构建select an entire syntax region 的映射,但由于没有“函数调用”语法区域,因此不适用于您的给定场景。

    一种选择是选择括号表达式,然后将其向后扩展以包含函数调用。

    va)oB
    
    • va) 选择括号表达式
    • o 切换光标在视觉选择的哪一端以及您正在扩展的方向。
    • B 将光标向后移动一个 WORD。也就是光标之前的空白字符之后的字符。

    【讨论】:

    • 好答案,但有一个问题:这仅在光标位于括号内时有效,但如果光标位于“re.sub”部分上方则无效。
    • 当然,但这很容易用领先的f( 解决。由于没有本地方法来执行所要求的操作,因此对于如何实现操作显然会受到限制。
    【解决方案3】:

    有一个plugin 用于创建用户定义的文本对象。评分不高,但值得一试。

    【讨论】:

      【解决方案4】:

      我对此事的看法:https://github.com/ngn/vim-select-by-syntax

      我并不想让它成为一个文本对象,但无论如何,它解决了同样的问题。

      【讨论】:

        【解决方案5】:

        My SameSyntaxMotion plugin 提供映射以跳转到边界和下一个 [count] 次出现的文本,以与光标下相同的方式突出显示。 ayiy 文本对象将选择 属于同一语法组或以相同方式突出显示的周围文本。

        【讨论】:

        • 在 GitHub 上吗?我想要 Vundle 安装 =)
        • 它应该被vim-scripts.org 镜像,但我在那里找不到它。请向网站所有者投​​诉;似乎他们的机器人错过了它。
        猜你喜欢
        • 1970-01-01
        • 2016-10-26
        • 2011-05-02
        • 2016-05-30
        • 2011-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多