如何使用Vim為每一行自動編號?
原文件:
abcde
...z修改後的文件:1,a2,b3,c4,d...26,z想了半天沒有想通,哪位高手指教一下?
vim內部有內置命令如 line(), 用法可以查看幫助 :h line()常用的參數有:
- 所在行的行號 「.」
- 可視模式下首行的編號 ""&<"
因此
- 每行前面插入行號如下
:%s/^/=line(".")/
- 可視區域插入從1開始的編號
:"&<,"&>s/^/=line(".") - line(""&<") + 1/
當:s 命令的替換字元串以「="開頭時,表示以表達式的計算結果作為替換值。
:%s/^/=line(".").","/
受人之魚不如受人之漁。遇到這樣的問題用 Google,而且最好換成對應的英文搜。例如此例用 Google 這樣搜:vim line number site:http://stackoverflow.com你看看 stackoverflow 上面的回答多好:Add line numbers in vim
好像還沒有人提供過用宏實現的方法,那我就獻個丑吧。
移動游標到字母 a 上,然後依次鍵入以下按鍵序列:
I1,&
以下為分解動作:
1. 添加首行序號「1,」I1,&
qq
按 q 開始宏錄製。選擇 q 寄存器,是因為連續敲兩下 q 比較方便。
3. 複製從行首到逗號(含)的所有內容0yf,
確保當序號由一位數變為兩位數時,複製的內容不多不少,正好是所有的數字加上逗號。
4. 將複製的內容粘貼到下一行行首,並且自增 1,然後退出宏錄製jP0&
使用大寫 P 粘貼,確保粘貼的內容出現在游標之前。
5. 將錄製好的宏執行25次25@q
總共26個字母,已經人工輸入了一個,還剩25個。
Linux的藝術在於,每一個工具獨立做好沒一件事情,對於添加行號這樣的事情,你應該安裝 nl 命令,而不是用 Vim。使用 nl 加文件名加可以給該文件每一行添加行號。
另外,前段時間翻譯了一篇 Vim 相關的教程,詳細介紹了 Vim 的歷史以及以一些使用技巧:
wsdjeg/vim-galore-zh_cn
:%!cat -n 字數最少的方法
:%s/^/=line(".").", "/ 最正規的方法
:let i=0|g/^/s//=i.","/ |let i+=1 不用函數的方法
:g/^/exec "s/^/".strpart(line(".")." ", 0, 4)
:g/^/exec "s/^/".line(".")." "
我一直用的是這個方法:1、列模式在原文件要插入的列前面插入一列 #
2、然後,:let i=1|g/#/s//=i/|let i=i+1
vim /etc/vimrc跳到最底部加入set nuwq退出!永久解決方案。
另一種使用宏實現的方式:
錄製宏:
:let i=1
qa
I&
:let i += 1
q
使用宏
jVG
:"&<,"&>normal @a
恩,雖然我以前也經常用@pw的做法,但總是記不住命令行里調用函數的方法。
所以我的辦法就是。。。:%!cat -n " 加行號
:%s/^ * " 去掉行首空格:%s/&用ue直接列模式啊
推薦閱讀:
※如何使用 Vim 做前端開發?
※在哪裡能看到大牛使用 vim 或者 Emacs 編程的視頻?
※vim中為什麼有那麼多map?nnoremap, vnoremap .....
※Vim 和 Emacs 到底哪個更牛逼一點?
※如何使用Notepad++和GCC搭建Windows下的C語言學習環境?