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) |
2
zhzy 2019-12-14 22:48:49 +08:00 via iPhone
用正则替换不行么……
|
3
KentY 2019-12-14 23:17:43 +08:00
vim 的太多种办法了
%norm! df(f)D 即可. 前提是每行只一对括号 |
4
KentY 2019-12-14 23:20:21 +08:00
(怎么发出去了.....)
才可以. 如果多对, 要看具体情况了, 有没有嵌套等. 这个也行: %norm! %di(Vp 如果是玩 vimgolf 的, 应该用 macro 来解决, 通常比 ex 命令按键少. |
5
jingcoco 2019-12-15 10:02:15 +08:00
录制宏,大概思路是第一行手动编辑,然后其他行都用 g@宏命名。。。不过比不上前面的大神说的。。。
|
6
Samuelcc 2019-12-15 20:41:22 +08:00 via Android
我的话就用宏,但是很大量文本的话会很慢。
用楼上正则可能会快 |
7
yianbin 2019-12-15 21:07:31 +08:00
正则 +1
|