【问题标题】:What is the fastest way to reverse a comma-separated list in vim?在vim中反转逗号分隔列表的最快方法是什么?
【发布时间】:2010-10-19 22:20:32
【问题描述】:

我经常必须更正以下 rails 代码:

assert_equal value, expected

assert_equal 的两个参数是乱序的,应该是:

assert_equal expected, value

在vim中,从第一行到第二行最有效的方法是什么?

【问题讨论】:

    标签: vim


    【解决方案1】:

    通过正则表达式:

    :s/\v([^, ]+)(\s*,\s*)([^, ]+)/\3\2\1/
    

    如果你经常这样做,你可以用它制作地图,例如:

    :nmap <F5> :s/\v([^, ]+)(\s*,\s*)([^, ]+)/\3\2\1/<CR>
    

    将光标放在要翻转的行上并点击F5

    【讨论】:

      【解决方案2】:

      这一个将光标所在的单词与下一个交换 - 只需在命令模式下按 F9:

      :map <F9> "qdiwdwep"qp
      
      • "qdiw: 将光标所在的单词放入缓冲区'q'
      • dw:删除下一个单词开头的所有字符(可能是逗号+空格)
      • e:转到词尾
      • p:粘贴(逗号 + 空格)
      • "qp: 粘贴缓冲区'q'(第一个单词)

      【讨论】:

        【解决方案3】:

        映射一个组合键来执行命令:

        :s/^assert_equal \(.*\), \(.*\)$/assert_equal \2, \1
        

        【讨论】:

          【解决方案4】:

          我一直喜欢正则表达式搜索和替换这些类型的任务:

          :s/\(\w*\), \(\w*\)/\2, \1/
          

          将用逗号分隔列表中的第二个单词交换第一个单词。

          【讨论】:

          • 只需删除范围 (%)。 :s 将在当前行上运行,除非你给它一个范围。
          【解决方案5】:

          嗯...我会说“tdwxx$i, ^[”tp,但这不是很有效或很容易,只是足够快输入...

          【讨论】:

            【解决方案6】:

            对于这么简单的事情,我会做一个小宏

            qadf ea, ^[pxxq
            

            然后@a 离开

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-08-13
              • 2016-08-03
              • 2010-10-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-04-26
              相关资源
              最近更新 更多