vim如何有效處理制式內容?

時間 2021-05-08 10:05:41

1樓:陳浮生

CTRL + n: 使用Multi-cursor外掛程式I:行首插入

繼續1,2兩部操作

A: 行末插入

無外掛程式方法:

ctrl + v :進入Visual Block模式,選中需要操作的內容

I:在行首輸入入並輸入要name=listdir['name']['

ctrl + v:進入 visual Block,選中整塊內容A: 行末輸入']

拖拽至此處上傳

2樓:

用巨集是正確的,對於行數不多的情況可以輕易完成。

但如果行數比較多,那麼巨集就會很慢(就算是開啟了 lazyredraw )。我嘗試過對 10000 行左右的文字進行上述操作,已經有明顯的延遲。

通常情況下,這種任務是建議使用 awk 或者 sed 來完成。如果因為某些原因無法或者不方便用的,選擇 vim 來完成也是推薦使用正規表示式替換,而不是用巨集,試試使用下面的替換命令,你可以看到處理速度的巨大差距,內容越多,差距越明顯:

:%s/.*/&=

listdata['name']['&']

不知道出於什麼原因,題主要求不使用正規表示式來完成,所以%s就無法使用。但是,我們還是有曲線救國的方法——利用 ex 命令和暫存器。

直接使用巨集慢的原因在於所有的鍵入操作都需要不斷被重複,想要加快速度,那麼關鍵就是在於減少鍵入的次數。

在原來的巨集中,我們需要鍵入 27 個按鍵。

ywA=

listdata['name']['0']

重複次數越多的時候,所需要消耗的效能就越多。

所以,我們可以利用暫存器來儲存那些需要重複輸入的部分,讓操作簡化。

:let @a="listdata['name']['"

:let @b="']"

然後利用normal命令來直接執行操作,而不是直接執行暫存器(注意,vim 中的「巨集」就是對記錄在暫存器中的按鍵的執行,所以你可以直接編寫巨集,或者把巨集用到其他命令中,巨集只是暫存器的一種應用。)

:%norm

yw$"ap"

0p"bp

這種方式比使用巨集好的地方在於,你不需要知道應該執行多少次巨集,[range]對於normal命令也適用,這個命令會自動從第一行執行到行末。

儘管你可以看到效能比之前有來明顯的提公升,但是明顯還是比使用%s要慢,因此,在通常情況下,使用替換都會是更好的選擇。

那麼,在不能用正規表示式的情況下,我們真的就無法使用substitute了嗎?

當然不是,我這裡還有乙個解決方案——利用global!命令呼叫substitute,你可以得到和%s接近的執行速度。

在本題中,使用substitute的難點在於:

不能使用正規表示式所以無法構造由於無法構造,所以substitute無法使用,global 也無法直接使用

execute命令只能針對當前行,無法使用[range],所以無法通過execute呼叫substitue配合getline()繞過正規表示式

所以解決之道就是繞過這道坎,我想到的解決方案是這樣:

使用任意乙個不在文件中的字元(我這裡使用了「+」)作為,利用global!反向匹配到所有行

使用execute命令呼叫substitute,這樣就能使用getline()函式獲取每一行的內容,而不需要用到正規表示式:v

/+/exe

"s/".getline

("."

)."/&=listdata['name']['&']"

這樣我們就能繞過正規表示式來使用substitute,得到比使用巨集更快的處理速度。

最後的最後,拋開 vim 本身的方法,如果你的電腦上還裝有 Python,那麼你就可以通過 Python 來處理。注意,我這裡說的是並不是「寫乙個 Python 指令碼來處理」,而是「在 vim 中直接呼叫 Python 來處理」。

首先,確保你的 vim 開啟了 Python 介面支援

:version

"看到 +python

:echo

(has

('python'

))"返回 1

然後直接在命令欄中寫

pyforiin

range

(len

(vim

.current

.buffer

)):vim

.current

.buffer[i

]=vim.

current

.buffer[i

]+"=listdata['name']['"

+vim

.current

.buffer[i

]+"']"

速度比 vim 內建的方法都要高,比%s都要快,而且沒有用到正規表示式,完美符合題主的要求。

暑假如何有效的預習高中內容

dadada 嗯,雖然這個回答有點晚,但是還是想說說我高三黨對你們小高一的肺腑之言 看高中教材,尤其是數理化生,或是 數政史地,具體看你喜歡文科還是理科 然後你應該會對它們產生興趣,一定要對學習有興趣,沒有就裝很有興趣的樣子,讓別人以為你愛學習,裝著裝著就成真的了 要有目標,我高一的時候就選擇了我的...

家長該如何幫助孩子有效率的複習新內容呢?

到底是複習舊內容還是學習新內容,這是兩個概念 你要知道學習是孩子自己的事,很多事情得他自己來。教孩子做計畫!把所有內容,按照需要和能有的複習天數,做出複習計畫,然後按部就班認真複習。生活中哪些型別的父母更容易培養出優秀的孩子 感覺我是不能勝任此工作,如果可以,我可以引導,除非孩子需要我幫忙,我可以費...

管理者如何及時有效的處理職場中的衝突問題?

鹽選推薦 在團隊管理中,觀點的差異和衝突的發生在所難免,駕馭矛盾 保持團隊以適宜的張力和高效的執行力完成協同工作,是對管理者提出的基本要求。但在中國文化背景下成長起來的管理者,長期以來習慣了對衝突進行人為迴避和表面 維穩 職場衝突因此也成為乙個心照不宣的禁忌話題,受到普遍誤解。我親自調解和處理過許多...