【问题标题】:In Vim, how do I delete everything but keep what is in double quotes?在 Vim 中,如何删除所有内容但保留双引号中的内容?
【发布时间】:2019-02-13 07:17:24
【问题描述】:

我有多行纯文本,每一行都混合了带/不带双引号的短语。我想删除包括引号在内的所有内容,但保留双引号中的内容。 示例:

this is some test = "key.properties";
properties = "value.properties";

结果应该是:

key.properties
value.properties

【问题讨论】:

标签: vim


【解决方案1】:

:%s/.*\"\(.*\)\".*/\1

解释

REPLACE, ANY_STRING, QUOTES, CAPTURE_ANY_STRING,   QUOTES,  ANY_STRING WITH
  :%s/     .*        \"      \(     .*     \)       \"         .* .    /\1

【讨论】:

    【解决方案2】:

    如果你的光标在行首,你可以这样做:

    f"lyi"Vp
    

    f"l将光标移到第一个“然后再留一个空格

    yi" 将 "s 中的所有内容拉到匿名寄存器中

    Vp在可视模式下选择整行并将匿名寄存器粘贴到上面

    要应用于多行,请使用normal 命令。

    :%normal 0f"lyi"Vp
    

    :进入命令模式

    %设置范围为整个文件

    normal 执行以下击键,就像在正常模式下输入一样

    0移动光标到行首

    f"lyi"Vp见上文

    【讨论】:

    • 它确实适用于单行。有没有办法(如搜索和替换)为多行执行此操作而无需为每一行重复。
    • @yantaq 已编辑。如果您需要对多个文件执行此操作,那么有资源可以执行此操作,但我个人建议使用 Vim 以外的其他工具。
    猜你喜欢
    • 1970-01-01
    • 2011-06-08
    • 2022-07-02
    • 1970-01-01
    • 2020-03-17
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多