gpt4 book ai didi

vim - 在等号周围交换文本

转载 作者:行者123 更新时间:2023-12-04 01:18:38 28 4
gpt4 key购买 nike

有没有一种简单的方法可以在 vi/vim 中围绕等号翻转代码?

例如:我想把这个:

value._1 = return_val.delta_clear_flags;
value._2._1 = return_val.delta_inactive_time_ts.tv_sec;
value._2._2 = return_val.delta_inactive_time_ts.tv_nsec;
value._3 = return_val.delta_inactive_distance_km;
(...)

进入这个:
return_val.delta_clear_flags = value._1;
return_val.delta_inactive_time_ts.tv_sec = value._2._1;
return_val.delta_inactive_time_ts.tv_nsec = value._2._2;
return_val.delta_inactive_distance_km = value._3;
(...)

在文件中的很多行上。

我知道这看起来有点微不足道,但我在编码时遇到了很多情况,我过去需要这样做,而且我从来没有一个好的主意/方法来做到这一点需要大量输入 vim 或编写 awk 脚本。我认为这可以通过 vi 中的单衬线实现。

单行的解释非常受欢迎,当我选择我接受的答案时,会受到高度评价。 :)

最佳答案

像这样的东西:

:%s/\([^=]*\)\s\+=\s\+\([^;]*\)/\2 = \1

如果您的代码比示例中显示的更复杂,您可能需要稍微处理一下。

编辑:解释

我们使用 s/查找 /替换命令。 find 部分让我们知道:
  • 由除等号以外的任何字符组成的最长可能字符串,表示为 [^=]* ...
  • ... 后跟一个或多个空格,\s\+ (在 \ 前面的额外 + 是 vim 的奇怪之处)
  • ... 其次是 =和任意数量的空格,=\s\+
  • ... 后跟尽可能长的非分号字符串,[^;]*

  • 然后我们放入几个捕获括号来保存我们需要构造替换字符串的内容,那就是 \(东西 \)语法

    最后,我们在 s/ 的替换部分使用捕获的字符串。查找 /替换命令:即 \1\2 .

    关于vim - 在等号周围交换文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1374105/

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