結束每一行的我在它與列表的文本文件:添加軟墊遞增編號在VIM
dateformatfile.ext
dateformatfile.ext
dateformatfile.ext
...
我需要一個軟墊號碼添加到每個月底,像這樣:
dateformatfile.ext 00001
dateformatfile.ext 00002
dateformatfile.ext 00003
...
有很多,所以我需要有一個命令來做到這一點。
在此先感謝。
結束每一行的我在它與列表的文本文件:添加軟墊遞增編號在VIM
dateformatfile.ext
dateformatfile.ext
dateformatfile.ext
...
我需要一個軟墊號碼添加到每個月底,像這樣:
dateformatfile.ext 00001
dateformatfile.ext 00002
dateformatfile.ext 00003
...
有很多,所以我需要有一個命令來做到這一點。
在此先感謝。
假設你想在你的文件中的每一行做到這一點,你可以用這樣的行號:
:execute "% normal A \<C-R>=printf(\"%05d\", line(\".\"))\<CR>"
其中
execute(...)
運行字符串命令% normal
在文件的每一行上運行正常命令A
附加到行<C-R>=
插入一個命令printf("%05d", ...)
格式化所述第二參數作爲五位數字line(".")
的結果獲取當前行的<CR>
數完成<C-R>=
插入人們可以使用awk很容易做到這一點。 NR variable gives you the record number,並記錄映射到行,除非重新定義RS變量。所以如下:
awk -e '{ print $0 NR }' filename
應該做的伎倆。填充它們是留給讀者的練習。
我會這樣做使用宏(我喜歡宏:D)。
首先,讓我們來處理這些數字(我們稍後再填充它們)。 手動添加第一行末尾的數字1。 然後在第一線記錄本宏:
qq - record the macro q
$ - go at the end of the line
F<space> - go backward to the last space
"ay$ - copy till the end of the line in the buffer a
j$ - go at the end of the line below
"ap - copy the buffer content
<ctrl+A> - increment the number
q - stop recording the macro
現在你可以用1000 @ q應用它一堆倍(將在該文件的末尾停止)。
這不是很漂亮,但它的工作。
對於填充,我會使用另一個醜陋的技巧。首先,使用正則表達式匹配3位數字並在之前添加0,然後使用2位數字(此時添加兩個0)來執行相同的操作,依次類推...
vim宏很醜,但它們很有用對我來說,當我厭倦寫一個指紋時(我應該學習awk)。此外,它們可以幫助您記住一些晦澀難懂的vim快捷方式。
如果您的文本塊位於文件的開頭。這意味着要追加「00001」該行是文件的第一行,試試這個命令,我只是簡單地檢查與ext
結束行了,你可以把它是否需要將其更改爲正確的正則表達式:
:%s/ext$/\="ext ".printf("%05d", line("."))/g
如果文本塊不在文件的開頭。你剛纔檢查第一線的塊,並得到行號(要追加00001行),例如,行數5:
:let b=5|%s/ext$/\="ext ".printf("%05d", line(".")-b+1)/g
這是我服用。
將光標定位在要添加第一個數字的第一行上。
:let i=0
定義一個變量來保存計數。
qm
開始將宏記錄到寄存器m。
A <C-R>=printf("%05d", i)<CR><ESC>
添加一個空格和printf的輸出。
:let i+=1
遞增下一次宏執行的計數。
q
結束宏的記錄。
jVG
可視化選擇我們想要添加數字的文檔的其餘部分。
:normal @m
執行宏以將數字添加到選定的行。
我認爲這種做法有一定的優勢:
:g/ext$/ normal @m
執行宏存儲在在分機結束行寄存器米。
如果您的環境中有PERL,則可以在VIM會話中單行運行PERL。
:%! perl -pe " $count++ ; s/$/$count/"
需要注意的是,您可能必須在perl腳本週圍使用雙引號。在我的PC上,如果我使用單引號,PERL將運行。但我無法用美元符號來解決變數。
謝謝馬修,完美的工作。我希望我能拿出那樣的東西。也感謝其他答案,我相信他們都可以工作。 – j0nr
太棒了,我很高興它爲你工作。我一直在使用Vim每天使用15年,我仍然在學習如何使用它:-) –