V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
station
V2EX  ›  Linux

vim 如何保留指定字符

  •  
  •   station · 2019-12-14 21:27:26 +08:00 · 4199 次点击
    这是一个创建于 1825 天前的主题,其中的信息可能已经有所发展或是发生改变。
    # SPDX-License-Identifier: GPL-2.0
    #
    # Makefile for the Linux network Ethernet device drivers.
    #

    obj-$(CONFIG_NET_VENDOR_3COM) += 3com/
    obj-$(CONFIG_NET_VENDOR_8390) += 8390/
    obj-$(CONFIG_NET_VENDOR_ADAPTEC) += adaptec/
    obj-$(CONFIG_GRETH) += aeroflex/
    obj-$(CONFIG_NET_VENDOR_AGERE) += agere/
    obj-$(CONFIG_NET_VENDOR_ALACRITECH) += alacritech/
    obj-$(CONFIG_NET_VENDOR_ALLWINNER) += allwinner/

    例如我需要保留括号中的字符( 括号不保留 ) , 其余删除


    再问一个问题,linux-x.y.z 如何更新为 linux-x.y ( 例如当前 stable 版本为 5.4.3,若 5.5 正式发布 )

    只能先 path -R, 再 patch -p1 < ../pathc-x.y ?
    7 条回复    2019-12-15 21:07:31 +08:00
    jdhao
        1
    jdhao  
       2019-12-14 22:18:30 +08:00   ❤️ 2
    第一个问题,直接用 vim 中的正则表达式即可,在命令模式下,输入一下的命令对你给的文本进行替换:

    %s/\v^.+\((.+)\).+$/\1/g


    简单解释一下以上的正则表达式:

    %: 代表当前 buffer 所有内容
    s: substitute 命令,也就是替换,使用方式为 s/{PATTERN}/{REPLACE}/[FLAG],更多信息 vim 中使用 :h :s 查看
    \v: vim 中的 very magic 模式,在这个模式下,正则表达式的使用类似通常情况下在其他语言中使用的正则表达是,具体可以在 vim 中使用 :h \v 查看更多帮助信息
    ^.+: 匹配左括号前面任意长度字符串
    \(: 匹配左括号
    (.+): 开始一个 capture group,里面的内容就是你想保留的内容
    \): 匹配一个右括号
    .+$: 匹配括号后面任意长度的字符串
    \1: 用来指代之前使用 capture group 捕捉到的内容,因为我们只使用了一个 capture group,所以是 \1
    g: 表示对所有符合的匹配进行替换操作并且不用用户确认 (如果一个一个确认,使用 gc)
    zhzy
        2
    zhzy  
       2019-12-14 22:48:49 +08:00 via iPhone
    用正则替换不行么……
    KentY
        3
    KentY  
       2019-12-14 23:17:43 +08:00
    vim 的太多种办法了

    %norm! df(f)D

    即可. 前提是每行只一对括号
    KentY
        4
    KentY  
       2019-12-14 23:20:21 +08:00
    (怎么发出去了.....)
    才可以. 如果多对, 要看具体情况了, 有没有嵌套等. 这个也行:

    %norm! %di(Vp

    如果是玩 vimgolf 的, 应该用 macro 来解决, 通常比 ex 命令按键少.
    jingcoco
        5
    jingcoco  
       2019-12-15 10:02:15 +08:00
    录制宏,大概思路是第一行手动编辑,然后其他行都用 g@宏命名。。。不过比不上前面的大神说的。。。
    Samuelcc
        6
    Samuelcc  
       2019-12-15 20:41:22 +08:00 via Android
    我的话就用宏,但是很大量文本的话会很慢。
    用楼上正则可能会快
    yianbin
        7
    yianbin  
       2019-12-15 21:07:31 +08:00
    正则 +1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2604 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:01 · PVG 23:01 · LAX 07:01 · JFK 10:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.