gpt4 book ai didi

vim - 使用可视 block 模式删除 VIM/gvim 中的特定列

转载 作者:行者123 更新时间:2023-12-04 06:23:43 25 4
gpt4 key购买 nike

示例输入文件

+--------------------+---------+---------
| Name | S1 | S2
+--------------------+---------+---------
| A | -4.703 | -2.378
| B | -3283.2 | -3204.5
| C | 8779 | 7302
| D | 22078 | 18018
+--------------------+---------+---------

需要移除 S1 列,即

期望输出
+--------------------+---------
| Name | S2
+--------------------+---------
| A | -2.378
| B | -3205.5
| C | 7302
| D | 18018
+--------------------+---------

有人能帮忙吗

谢谢

最佳答案

在命令模式下:

:%s/^\([[+|][^+|]\+\)[+|][^+|]\+/\1/

这使用 vim 的内置 sed 式搜索和替换命令。这是分割:
% - 对于整个文件
s - 搜索
/^ - 行的开始
\([[+|][^+|]\+\) - 其次是 +| ,后跟任意数量( \+ )不是 + 的任何内容或 | .这将得到我们想要保留的第一列,因此将它放在一个捕获组中,用 \( 包围它。和 \) [+|][^+|]\+ - 其次是 +| ,后跟任意数量( \+ )不是 + 的任何内容或 | .这将获得我们不想保留的第二列,因此没有捕获组。
/\1/ - 替换我们与第一个捕获组(包含第一列)匹配的所有内容。这有效地用第一列的内容替换了第一列和第二列。

就像我说的,vim 的正则表达式与 sed 几乎相同,所以如果你查看 this tutorial on sed你可能也会为 vim 挑选很多有用的东西。

编辑

响应 OP 的要求,使其更普遍地能够删除任何列:
:%s/^\(\([[+|][^+|]\+\)\{1\}\)[+|][^+|]\+/\1/
\{\} 里面的索引, 现在删除指示的列。把它想象成一个数组索引(即从零开始)。所以 \{0\}现在删除第一列, \{1\}删除第二个,依此类推。

关于vim - 使用可视 block 模式删除 VIM/gvim 中的特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10514864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com