vim系列-文本操作篇

Vim实用技巧:文本编辑与处理

基数行与偶数行分组

使用Vim的替换命令,可以轻松地将基数行和偶数行分组:

1
%s/\(^.*$\)\n\(^.*$\)/\1 \2/g

然后,删除所有的基数行:

1
%s/^.*$\n\(^.*$\)/\1/g

删除重复行

在Vim中删除重复行是一个常见的操作,以下是几种方法:

删除相邻重复行

1
:g/\(.\+\)$\n\1/d

删除不相邻重复行

使用排序命令删除不相邻的重复行:

1
:sort u

删除重复行,结果按照原顺序排列

为了保存原有顺序,首先给每行加上行号和1个{

1
:let i=1|g/^/s//\=i.'{'/|let i+=1

按照行号后面的内容排序:

1
:sort /^\d\{-}/

删除行号后面的内容相同的行保留后面的行:

1
:g/^\d\{-}\{.∗$\n\d\{-}\{1$/d

按照行号恢复顺序:

1
:sort n

删除空白行

删除文件中的空白行:

1
%g/^\s*$/d

添加序号

有多种方法可以为文本添加序号:

通过let变量

1
let i=1 | g/^/s//\=i.' '/ | let i=i+1

直接使用行号

1
:g/^/ s//\=line('.').' '

使用range()函数

1
2
3
:for i in range(1, 31)
: call setline(i, i .' '. getline(i))
:endfor

利用Vim的编程支持

1
2
3
4
5
:python <<EOF
from vim import current
for i in range(len(current.buffer)):
current.buffer[i] = str(i+1) + ' ' + current.buffer[i]
EOF

外部命令

使用外部命令如findstr, sed, diff, perl, python等为文本添加序号:

1
2
3
4
5
:%!findstr /N "^"
:%!sed =|sed "N;s/\n/ /"
:%!diff --line-format=%dn%L % -
:%!perl -pe "print ++$a . ' '"
:%!python -c "import sys,fileinput as f;[sys.stdout.write(str(f.lineno())+a) for a in f.input()]"

查看文件行数、列数、字符数及所占字节大小

查看文件的行数、列数、字符数及所占字节大小:

1
g + <Ctrl-g>