gpt4 book ai didi

vim - 如何让 Vim 向后处理我的命令?

转载 作者:行者123 更新时间:2023-12-02 08:42:00 24 4
gpt4 key购买 nike

假设我有 5 行文本,如果我输入一些命令让 vim 处理每一行,Vim 将逐行处理文本,第一行,第二行,...最后一行。我想要的是让 Vim 以相反的顺序处理我的文本。即先是最后一行,然后是第 4 行,最后是第一行。

为什么我需要这个?我有以下文字

1234567890
abc
123
def
1234567890
123456789

我想从包含 3 个字符的行中删除换行符 (\n)。所以在处理之后,我会得到下面的文字

1234567890
abc123def1234567890
123456789

看起来小菜一碟,我用下面的命令

:%s/\v(^\w{3})\n/\1/

但是我得到的是

1234567890
abc123
def1234567890
1234567890

为什么?我想 vim 首先从第二行删除\n,然后这一行有文本 abc123,现在 vim 不会在 123 之后删除\n,因为它现在不是 3 个字符,所以 vim 处理下一行 def,并从中删除\n ,这就是我得到的结果。

如果vim可以从后往前处理,就不会出现这种情况,我就能得到我想要的结果。

顺便说一句,我可以通过其他方式得到预期的结果,我只是想知道这是否可能。

最佳答案

向后显式循环行范围(例如视觉选择的行),然后在每一行上执行命令。我在这里使用 :join 而不是带换行符的 :substitute :

:for i in range(line("'>"), line("'<"), -1)| silent execute i . 'g/^\w\{3}$/join!' | endfor

关于vim - 如何让 Vim 向后处理我的命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15779836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com