vim 如何保留指定字符

2019-12-14 21:27:26 +08:00
 station
# 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 ?
4070 次点击
所在节点    Linux
7 条回复
jdhao
2019-12-14 22:18:30 +08:00
第一个问题,直接用 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
2019-12-14 22:48:49 +08:00
用正则替换不行么……
KentY
2019-12-14 23:17:43 +08:00
vim 的太多种办法了

%norm! df(f)D

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

%norm! %di(Vp

如果是玩 vimgolf 的, 应该用 macro 来解决, 通常比 ex 命令按键少.
jingcoco
2019-12-15 10:02:15 +08:00
录制宏,大概思路是第一行手动编辑,然后其他行都用 g@宏命名。。。不过比不上前面的大神说的。。。
Samuelcc
2019-12-15 20:41:22 +08:00
我的话就用宏,但是很大量文本的话会很慢。
用楼上正则可能会快
yianbin
2019-12-15 21:07:31 +08:00
正则 +1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/629096

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX