在vim中跳过用户定义的文本对象

4
我正在使用kana / vim-textobj-user定义一些自定义用户对象,但问题是我无法跳过它们:例如,假设我正在使用相同的缩进文本对象,该对象由aiii映射,我想在正常模式下在文本周围跳转,例如]i[i。目前我正在使用非常笨拙的方法来选择并退出可视化模式。那么是否有一种简单的方法来实现这一点,并为所有其他用户文本对象设计一些映射。类似于]{text-object}
2个回答

2
我正在使用 kana/vim-textobj-user 定义一些自定义对象,比如说,我正在使用相同的缩进文本对象,它被映射为 aiii。我想在正常模式下跳转到文本周围,类似于 ]i[i。Vim 有很多内置命令,比如 ]m[M 等等。所以我认为你是指 ]i/[i 来将光标移动到下一个/上一个文本对象。如果是这样,vim-textobj-user 自第一个版本起就支持选择和移动到文本对象。但这不是自动的。至少你必须声明要用哪些按键(例如 ]i/[i)来执行命令。
但是我对以下句子有疑问:
“currently I am using a very hacky way of selecting and exiting visual mode”
所以你是像这样输入的 vaio<Esc>vai<Esc>?你想做的是将光标移动到光标下文本对象的第一行/最后一行吗?如果是这样,vim-textobj-user目前不提供定义此类命令的API。
在这种情况下,可能可以自动定义键映射,例如nmap ]i vai<Esc>。但它似乎很脆弱,并且覆盖了几个内置命令。

1

文本对象仅用于应用命令(例如gU)或可视选择文本区域。 动作与下一个出现位置高度相关,但是它们是不同的命令。我认为vim-textobj-user插件只提供前者,而不是后者。

我的CountJump插件非常相似,并提供基于正则表达式设置文本对象和跳转的命令。


我明白您的意思,但我想知道是否有类似的插件或隐藏的vim功能已经实现了,因为我们在这里使用许多公司定义的语言,并且我已经为它们定义了用户对象,因此我觉得创建这些动作有点冗余。坦白说,我期望这种功能已经存在,但如果没有,我可能会考虑实现一个(尽管是用Python,我真的不喜欢vim脚本)。 - linusx
好的,正如我所说,我的插件提供了两者,这应该符合您的期望。您仍然需要两个调用来定义两者,但是正则表达式大多可以被重复使用,因此只需定义一次即可。 - Ingo Karkat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接