【问题标题】:vim put quotes and comma around wordsvim 在单词周围加上引号和逗号
【发布时间】:2014-06-13 16:41:38
【问题描述】:

我有一份缩写和长格式的货币列表:

AED United Arab Emirates dirham
AFN Afghani
ALL Lek
AMD Armenian Dram
ANG Netherlands Antillian Guilder
AOA Kwanza
ARS Argentine Peso
AUD Australian Dollar
AWG Aruban Guilder
AZN Azerbaijanian Manat
BAM Convertible Marks
BBD Barbados Dollar
BDT Bangladeshi Taka
BGN Bulgarian Lev

我实际上有 182 行它们的价值......在记事本 ++ 中,我可以在几秒钟内轻松获得单个单词的引号和每个单词后面的逗号,我想知道是否有办法在 vim 或任何其他方法中做到这一点Linux 中的编辑器。

即使我已经在 notepad++ 中完成了这项工作,但也可以将自己扩展到其他编辑器。

非常感谢您的建议。

【问题讨论】:

  • 您是否要引用单个单词或货币缩写,然后将国家名称也用引号括起来,其中可能包含空格?

标签: vim editor text-editor


【解决方案1】:

在 ex 模式下尝试此命令。

%s/\w\+/"&",/g | $s/,$//

它应该可以解决问题。

说明: %s 替换所有行

在比赛部分:

\w 是“单词字符”,不包含空格

\+ 表示匹配前面的一个或多个字符

在替换部分:

& 指的是整个匹配的字符串

最后,g 表示就行全局替换,而不仅仅是在第一行之后停止替换。

竖线|可用于分隔ex命令并按顺序运行。

$s 指代在最后一行。 竖线后的替换将删除行尾的任何逗号,由$ 锚点指示。这将确保您的列表末尾没有逗号。

【讨论】:

    【解决方案2】:

    可以录制宏:

    gg
    qq
    I"<Esc>
    f<space>
    s","<Esc>
    A",<Esc>
    q
    

    并在每一行执行它:

    :%norm @q<CR>
    

    或者一次性做同样的事情:

    :%norm I"<C-v><Esc>f<space>s","<C-v><Esc>A",<C-v><Esc><CR>
    

    或者,当然可以使用替换:

    :%s/\(\w\+\) \(.\+\)$/"\1","\2",
    

    【讨论】:

      【解决方案3】:

      为了总结以上建议的解决方案,您还可以选择视觉块,并用引号将它们括起来。这可能是与 NP++ 最相似的方法(即使到目前为止我从未使用过记事本!)。使用ctrl-v 选择了一个可视块,所以我的解决方案是:

      • 转到第一行的开头:gg0
      • 选择第一个视觉块:&lt;ctrl-v&gt;Ge
      • 带引号的环绕块:s""&lt;esc&gt;P
      • 跳转到空格并选择它们全部到底部:f&lt;space&gt;&lt;ctrl-v&gt;G
      • 替换选定的空格:s,"

      现在,要完成该过程,请在每行末尾添加引号。您可以录制一个宏(参见 romainl 的上一个答案),或者——我更喜欢——执行快速替换::%s/$/"/g&lt;enter&gt;,你就完成了!

      【讨论】:

        【解决方案4】:

        我知道这是一个老问题,但我想我会给出我的看法。

        这是答案中最长的击键,但我认为这是最简单/自然的快速完成方式,至少对我而言(这真的取决于你更熟悉什么以及你的思维方式)。

        qq
        cw"",<Esc>
        h
        h
        p
        W
        C
        ""<Esc>
        h
        p
        j
        0
        q
        

        然后13@q 在其余行上运行宏。

        这是结果:

        "AED", "United Arab Emirates dirham"
        "AFN", "Afghani"
        "ALL", "Lek"
        "AMD", "Armenian Dram"
        "ANG", "Netherlands Antillian Guilder"
        "AOA", "Kwanza"
        "ARS", "Argentine Peso"
        "AUD", "Australian Dollar"
        "AWG", "Aruban Guilder"
        "AZN", "Azerbaijanian Manat"
        "BAM", "Convertible Marks"
        "BBD", "Barbados Dollar"
        "BDT", "Bangladeshi Taka"
        "BGN", "Bulgarian Lev"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多