vim系列-文字操作篇

p205發表於2024-08-30

基數行與偶數行分組

使用Vim的替換命令,可以輕鬆地將基數行和偶數行分組:

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

然後,刪除所有的基數行:

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

刪除重複行

在Vim中刪除重複行是一個常見的操作,以下是幾種方法:

刪除相鄰重複行

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

刪除不相鄰重複行

使用排序命令刪除不相鄰的重複行:

:sort u

刪除重複行,結果按照原順序排列

為了儲存原有順序,首先給每行加上行號和1個{

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

按照行號後面的內容排序:

:sort /^\d\{-}/

刪除行號後面的內容相同的行保留後面的行:

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

按照行號恢復順序:

:sort n

刪除空白行

刪除檔案中的空白行:

%g/^\s*$/d

新增序號

有多種方法可以為文字新增序號:

透過let變數

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

直接使用行號

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

使用range()函式

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

利用Vim的程式設計支援

: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等為文字新增序號:

:%!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()]"

檢視檔案行數、列數、字元數及所佔位元組大小

檢視檔案的行數、列數、字元數及所佔位元組大小:

g + <Ctrl-g>

相關文章