V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NK
V2EX  ›  Vim

请教个 vim 的问题

  •  
  •   NK · 2016-07-05 22:59:24 +08:00 · 2517 次点击
    这是一个创建于 3061 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以下面文本为例

    start 
        content
    end 
    start 
        content
    end 
    start 
        content
    end 
    start 
        content
    end 
    

    如何同时将所有位于 start 和 end 之间的行缩进?更通用地讲, vim 中如何根据正则表达式匹配批量执行某个特定操作?谢谢。

    5 条回复    2016-07-13 21:27:47 +08:00
    kotomi
        1
    kotomi  
       2016-07-06 00:44:38 +08:00
    try this command:
    :g /^start/+1,/^end/-1 <

    general commands for block operation:
    :g /pattern operation
    :g /pattern1,/pattern2 operation
    wwulfric
        2
    wwulfric  
       2016-07-06 10:02:50 +08:00
    :%s/\(start\)\s\n\s\+/\1\r/g

    标准语法 :s/正则匹配 /正则替换 /

    %表示匹配全文, g 表示一行中有几个就匹配几个

    特殊点:

    1. vim 里很多正则的特殊符号需要转义,比如 ()+ 等
    2. 匹配换行用 \n ,替代换行用 \r
    livelazily
        3
    livelazily  
       2016-07-08 22:03:38 +08:00
    NK
        4
    NK  
    OP
       2016-07-13 21:27:07 +08:00
    @kotomi 谢谢
    NK
        5
    NK  
    OP
       2016-07-13 21:27:47 +08:00
    @livelazily 这个插件赞
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5353 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 06:51 · PVG 14:51 · LAX 22:51 · JFK 01:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.