【问题标题】:How do I swap the left hand and right hand sides of a C/C++ assignment statement in gvim?如何在 gvim 中交换 C/C++ 赋值语句的左侧和右侧?
【发布时间】:2011-05-27 05:08:39
【问题描述】:

老实说,我实际上对此有一个解决方案,但是 Google 搜索从这个网站上为我找到了很多很棒的提示,所以我不得不回馈一些东西。这是我想出的。对于单行:

s/^\(\s\+\)\(.*\) = \(.*\);/\1\3 = \2;/

对于从当前行开始的多行,添加.,.+<line count>。例如:

.,.+28s/^\(\s\+\)\(.*\) = \(.*\);/\1\3 = \2;/

将替换当前行和接下来的 28 行。这也应该适用于 Java 和 Perl。对于 Python,请从模式和替换中省略结束分号(除非您是使用可选分号的那类人)。

在输入所有内容后,我发现我确实有一个问题。有没有办法简化它,所以我没有那么多转义字符?

【问题讨论】:

  • 我不认为我曾经交换过作业的左手和右手...
  • 我正在为一些(非常不优雅的)C 代码编写一些单元测试,并且需要保留和恢复全局变量。写完preserve函数后,把lhs和rhs互换,restore函数写起来就容易多了。

标签: java c++ python vim variable-assignment


【解决方案1】:

使用“非常神奇”:将\v 添加到表达式中。见:help magic。基本上,这意味着所有非字母数字字符都有特殊的(即正则表达式运算符含义)除非转义,这意味着它们在您上面的用法中不需要转义。

【讨论】:

    【解决方案2】:

    在正则表达式的开头使用 \v 有助于使其更具可读性。 \v 表示“非常神奇”,除了 '0'-'9'、'a'-'z'、'A'-'Z' 和 '_' 集合中的字符外,所有字符都是特殊的。

    所以你的第一个例子可以这样转换:

    s/\v^(\s+)(.*) \= (.*)\;/\1\3 = \2\;/
    

    =; 现在需要转义以将它们识别为文字,但所有其他高位 ASCII 字符都不需要。

    【讨论】:

    • 做什么 = 和 ;在正则表达式中是什么意思?如果我转义 = 而不是 ;,这有效(至少在我的情况下)
    • @HenryLongmore: = 就像?;请参阅:help /\= 或更一般的:help pattern-overview。我认为; 包含在:help //;
    猜你喜欢
    • 2016-06-08
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2023-04-10
    相关资源
    最近更新 更多