【问题标题】:VIM, Run a command on multiple filesVIM,在多个文件上运行命令
【发布时间】:2011-08-19 20:02:17
【问题描述】:

我有一堆 sass 文件,而我的设计师使用了错误的语法。我想要:margin-top 1px,但他做到了margin-top: 1px

于是我轻松地写了一个子命令:

:rubydo sub! /([\w-]+):/,':\1'

这样可以修复所有冒号并将它们移动到我想要的位置。我在stylesheets 目录中有大约 50 个 sass 文件。如何一次性对所有文件运行此命令?我不确定如何在vim 中解决这个问题。也许与grep 有关?我不能告诉你。

【问题讨论】:

    标签: vim batch-file substitution


    【解决方案1】:

    看到这个:http://vimdoc.sourceforge.net/htmldoc/editing.html#:argdo

    我现在学会了这个命令,但是帮助很清楚。

    去:

    :args *.css
    :argdo %s/\([[:alpha:]-]\+\):/:\1/ge | update
    

    【讨论】:

    • +1 for argdo, bufdo 太笼统了。如果您不想更改全局参数列表,也可以使用 :argl 在窗口本地创建参数列表。
    • 我发现这篇关于这个主题的文章非常有帮助:ibrahim-ahmed.com/2008/01/…
    【解决方案2】:

    这是一个例子

    :bufdo %s/oldStuff/newStuff/ge | update
    

    只需更改您的正则表达式以满足您的需求

    【讨论】:

      【解决方案3】:

      我认为这种情况下最好的工具是 sed,流编辑器。

      sed -i.old 's/:\([-a-z]*\)/\1:/' *.css
      

      这将编辑您的所有 .css 文件,保留带有 .old 扩展名的原始文件。

      sed 使用的正则表达式集有点不同,取决于您的版本或多或少受到限制。我使用的表达式显然适用于您的情况 - 使用 BSD 工具。

      【讨论】:

        【解决方案4】:

        几个步骤。

        :vimgrep /^[^:]\w+/ %:p:h/*    " find all of the lines that don't start with a colon
        

        这会将所有匹配项放入您的快速修复列表中。

        然后是一个宏来做你想做的事情。

        qa
        I:<esc>
        f:x
        :w|cn<enter>
        q
        

        然后测试该宏几次(使用@a)。 然后另一个宏一遍又一遍地运行该宏......

        qbq   " this clears out b before starting, very important!
        qb@a@bq
        @b    " watch in amazement.  :)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多