删除vim中的列

时间:2014-02-20 14:55:41

标签: vim

我想使用vim删除文本文件的第一列。 我读了这些使用视觉模式的SO answers,但是他们只删除了第一个字符(对于使用模式的答案,我不理解它们,所以我很难适应我的情况)。

我的文件包含很多数字,我想删除第一列中的数字,而不仅仅是第一个元素。

例如

12 34 43143 1
131234 1 
1 3443 132

我想

34 43143 1
1 
3443 132

但是目前,我得到

2 34 43143 1
31234 1 
 3443 132

如果重要,则数字由制表符分隔

5 个答案:

答案 0 :(得分:4)

(整数)数字在正则表达式语法中由[0-9]表示,您也可以编写\d;由于有许多数字,因此附加量词\+。标签为\t,或通常为空格为\s。现在,您想要在行的开头(:substitute)替换/ ^数字。

:%s/^\d\+\t//

%将此值应用于整个缓冲区,请参阅:help :range

以及

很快,您将要删除不同的列;您可以断言某些匹配(例如^\d\+\t\zs\d\+\t将选择第二列),或使用捕获组(您甚至可以使用它重新排序列!)但它会更加乏味。

当您意识到您的文件格式以名称​​制表符分隔值逗号分隔值(CSV)的变体)众所周知时,就会发生突破。有一个很棒的插件(csv.vim - A Filetype plugin for csv files,它有一个:DeleteColumn命令 - 正是你需要的!(还有更多...)

答案 1 :(得分:3)

测试此:%s/\v^\d*\s//g,如果\s是制表符分隔符,则可以将\t替换为<{p}},

\v代表非常神奇,它没有打开,所以基本上它不是默认的,它用于避免掩盖括号(&#34;(&#34;),大括号(&#34) ; {&#34;)等带有斜杠,\d代表数字,*代表0或更多次匹配,\s代表空格,%代表当前文件,{{1代表搜索当前文件,%s代表全局替代,顺便说一下carret(g)代表行的开头,在这种情况下你不必使用{ {1}}和^,但我仍然使用它。

修改 所以这非常好:\v感谢Jeff

您可以使用vim帮助,例如

g

e.t.c获取正式定义

答案 2 :(得分:2)

另一种选择是使用宏:

qq0dawjq

然后你必须使用以下宏: @q 3 @ q 任意数字+ @q

说明:

q: Start Recording a Macro
q: Save the macro in register q
0: Go to the beginning of the line
daw: Delete A Word
j: Move down to the next line
q: Finish the recording

答案 3 :(得分:2)

这是cut的工作!

:%!cut -f 2-

答案 4 :(得分:1)

你必须输入

:%s/\d\+\t//