vim - 替换到文本对象的结尾

标签 vim

在 Vim 中,我一直发现自己需要一个按键来重写一些参数列表的其余部分。例如,在以下 Python 函数中:

def myfun(a, b=12, c=(1,2,3), d=15):
    pass

我想更换c=(1,2,3), d=15e=12 .按键ci(允许我替换整个参数列表中的所有内容,但我发现我经常想要保留 Vim 文本对象的一些前缀。一般来说,我认为我正在搜索的这个击键在替换函数调用的最终参数和定义的上下文中很有用。

这个问题的理想答案将适用于带引号的字符串,[]块和其他文本对象。请注意,我理解“How to select between brackets (or quotes or ...) in Vim?”中回答的所有关于文本对象的内容。

@pb2q 和 @romainl 都提供了很好的搜索快捷方式,但它们要求我在视觉上找到封闭块的末尾,以设计一个搜索,该搜索对于块中的任何其他垃圾是明确的(例如,考虑嵌套函数调用)。特别是,当我在要操作的括号集中嵌套括号时,我经常发现自己想要这个。我真正想要的答案类似于ci)ca)这在概念上完全基于最近的封闭括号 )并完全优雅地处理其他嵌套 )块。

最佳答案

有一堆以 ] 开头的命令到某种结构的末尾,并尊重嵌套。 ]) 转到带括号的块的末尾, ]} 转到带括号的块的末尾, ]/转到 C 注释的末尾( /*...*/ 样式)。使用 [ 代替 ] 转到开头而不是结尾。

所以要做更换你的c=(1,2,3), d=15键入 c])。

这些命令的完整列表在 :help various-motions 下列出。 .不幸的是,没有一个用于由方括号分隔的块,因为 [[ 和 ]] 在经典 vi 中已经具有不同的含义,而 vim 已经定义了 ][ 和 [] 以很好地适应这些含义。

关于vim - 替换到文本对象的结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11673938/

相关文章:

Vim:如何为光标下的文件打开新的垂直拆分

VIM 自动调整聚焦窗口的大小

vim - 设置Vim括号高亮颜色

search - 如何从 Vim 搜索列表跳转到某个事件

linux - 关于计算 gvim 中的列数

vim - 在 Vim 中为 :make, :grep, 等的输出着色

vim - 在 VIM 中删除此左列

vim - 应用 vimrc 更改而不重新启动

vim - 关闭 Vim 中的拆分窗口而不调整其他窗口的大小

vim 乱码