【问题标题】:Change camelCase to CONSTANT_CASE for the block of code in vim将 vim 中的代码块的 camelCase 更改为 CONSTANT_CASE
【发布时间】:2019-07-26 12:36:03
【问题描述】:

我正在使用 vim 的 abolish 插件使用 cru 将 camelCase 变量更改为 CONSTANT_CASE (UPPER_CASE in abolish lang)

我的问题:

我有一个包含 100 个此类变量的枚举,所以我自然想知道有没有办法在代码块上使用 cru 命令。

例如

MacAddr0High        = 0x000,  // address0 high Register

MacAddr0Low         = 0x004,  // address0 low Register

MacAddr1High        = 0x008,  // address1 high Register

MacAddr1Low         = 0x00C,  // address1 low Register

MacAddr2High        = 0x010,  // address2 high Register

.

.

我只想更改变量名而不是描述

目前我能想到的就是使用cru,然后使用. 重复该命令,这不是最好的方法。

我查看了一些类似的问题,建议进入可视模式并使用~ u / U

但我不能在可视模式下使用cru。也许是因为它是一个插件。

如果有办法的话,我也可以使用 VsCodeVim。

【问题讨论】:

  • 那么 cru 有效吗?全局命令会有帮助吗? :g/MacAddr/norm cru
  • cru 仅适用于光标下的变量。我会尝试全局命令并让你知道
  • :g/MacAddr/norm cru 它以保留方式工作,将 MAC_ADDR0_HIGH 转换为 MacAddr0High
  • 对不起,我没理解你上次评论的意思,还有问题吗?
  • 是的。抱歉不清楚。我使用cru 将变量转换为MAC_ADDR0_HIGH 之后,当我使用:g/MacAddr/norm cru 时,它会将CONSTANT_CASE 转换为camelCase

标签: vim vscodevim


【解决方案1】:

正如评论中所说,您可以使用插件和全局命令来解决它:

:g/MacAddr/norm cru

如果没有插件,搜索和替换可能会有所帮助:

:%s/\v(\L\l+)(\L\l+)(\d+)(\L\l+)/\U\1_\U\2_\3_\U\4/g

递归宏将是第三个要寻找的东西。

【讨论】:

  • 提取要转换的东西然后使用substitute(...., 'g'):s\= 会更通用——这是我的ConvertNames 命令的核心。
  • @Doktor Oswaldo - 你能解释一下:%s/\v(\L\l+)(\L\l+)(\d+)(\L\l+)/\U\1_\U\2_\3_\U\4/g
  • @LucHermitte 绝对!但想指出解决此类问题的三种最常见方法: 1. 在每一行使用g 重复该命令。 2,使用substitute 3. 使用递归宏重复命令 don 每个找到的模式。当然还有更高级的通用解决方案。但我经常发现自己需要一个快速而简单的一次性解决方案来解决这类问题。
  • @HarshaD 这是一种搜索和替换,它通过将术语分成 3 组单词(以字母 \L 开始,后跟一些小写字母 \l)和一组数字来工作(\d)。然后用组的大写版本替换找到的组(\U 将捕获组转换为大写)并用下划线连接它们。
  • @Doktor OSwaldo :感谢您的解释。这确实有效,但它也替换了 cmets 中的字符串匹配。但我可以忍受......
【解决方案2】:

(不是你的问题,但lh-style 你可以使用:%ConvertNames/^\k\+/SCREAMING_SNAKE_CASE

否则,可能是

:g/^MacA/normal cru

应该按预期工作,因为您希望更改的内容位于行首。否则会有点复杂。

【讨论】:

  • :g/^MacA/normal cru 说找不到模式:^MacA.... 会看看 lh-style!谢谢
  • 如果没有找到^MacA,这意味着你的行不是以MacA开头的。这可能会稍微复杂一点,因为您需要将光标移动到要更改的单词。
猜你喜欢
  • 2011-05-31
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多