在 Vim 中替换列、空格分隔文件中的值

use*_*923 -1 vim

我有一个如下所示的文件:

2067 24311 <hkxhk> {00}
2069 17219 <hkxhk> {00}
2071 20931 <hkxhk> {00}
2073 5557  <hkxhk> {00}
2075 2127  <hkxhk> {00}
2077 20947 <hkxhk> {00}
2081 18088 <hkxhk> {00}
Run Code Online (Sandbox Code Playgroud)

我想替换第一列值,使其看起来像

5 24311 <hkxhk> {00}
5 17219 <hkxhk> {00}
5 20931 <hkxhk> {00}
5 5557  <hkxhk> {00}
5 2127  <hkxhk> {00}
5 20947 <hkxhk> {00}
5 18088 <hkxhk> {00}
Run Code Online (Sandbox Code Playgroud)

其中第一个空格分隔列已替换为新值,在本例中为 5。

Dmi*_*rov 5

使用搜索和替换:

\n\n
:%s/^\\S*/5/\n
Run Code Online (Sandbox Code Playgroud)\n\n

%s\xe2\x80\x93 在整个文件中搜索,\n ^\xe2\x80\x93 行开头,\n \\S\xe2\x80\x93 任何非空格字符,\n \\S*\xe2\x80\x93 任意数量的任何非空格字符- 空格字符,\n5 \xe2\x80\x93 你的新值。

\n\n

使用宏:

\n\n
qq0cw5<Esc>q\n:%norm! @q\n
Run Code Online (Sandbox Code Playgroud)\n\n

qq\xe2\x80\x93 开始录制一个名为 的宏q,\n 0\xe2\x80\x93 将光标置于一行的开头,\n cw5\xe2\x80\x93 将一个单词替换为, \n \ xe2\x80\x93 返回正常模式,\n5<Esc>q \xe2\x80\x93 结束宏录制;

\n\n

%norm!\xe2\x80\x93 将普通模式命令应用于文件的每一行,\n @q\xe2\x80\x93 执行宏q(正常模式命令)。

\n\n

使用视觉选择,假设第一列具有恒定宽度(4 个字符)

\n\n
gg0<C-v>G3lc5<Esc>\n
Run Code Online (Sandbox Code Playgroud)\n\n

gg0\xe2\x80\x93 将光标放在文件开头,\n <C-v>\xe2\x80\x93 启动块选择模式,\n G\xe2\x80\x93 转到最后一行,因此选择单字符宽度列 ( H\xc3\x971 块),\n 3l\xe2\x80\x93 剩下三个字符,因此选择 H\xc3\x974 块,\n c5<Esc>\xe2\x80\x93 将每行中的选择替换为5并返回正常模式。

\n\n

结论

\n\n

您的问题是如此简单,以至于搜索和替换方法在这里被证明是最简单的,而在一般情况下记录宏比发明正则表达式要方便得多。

\n