簡體   English   中英

在vim中編輯文件的第3行

[英]Editing every 3rd line of file in vim

我在vim中為python項目制作了方法的模板列表。 我在每個方法之間添加了行,並希望現在為每個方法添加一個pass ,直到實現該方法為止,這仍然是可解釋的python代碼。 在vim中,我知道如何使用:10,17s/<search regex>/<substitute>/編輯文件的空間連續行,但是在進行編輯以在方法之間添加空行之后,我需要在每第三行插入一個pass 我發現這樣做的方法是使用管道和&通過: :10s/<search regex>/<substitute>|13&|16&等。我大概有15個與符號鏈接在一起以使它起作用。 有沒有更簡潔的方法來在Vim中獲得這種行為?

為了發表評論,這是一個最小的示例,我在文件myfile.py中擁有:

def _fun1(self):


def _fun2(self):


def _fun3(self):


def _fun4(self):

...etc

在第二行,第五行,第八行等上。我想插入pass (在保持一致間距之前w / 4個空格),/ i最多達到_fun15(self):所以想得到這種行為w / o 14 |lineNo&鏈接在一起。 也許帶有行號變量的遞增功能或其他創建行為的代碼。

這是一種可能的方法:

:g/def _fun/normal! opass
  • 在與def _fun匹配的每一行上……
  • 在下面打開新行…
  • 並插入pass

如果您希望每個存根之間只有一行:

:g/def _fun/normal! opass^OJ^Ox
  • 在與def _fun匹配的每一行上……
  • 在下面打開新行…
  • 插入pass
  • 為單個命令保留插入模式…
  • 將下面的行與當前行合並...
  • 為單個命令保留插入模式…
  • 並刪除該討厭的<Space>

錄制宏

qajopass<Esc>jq

現在,通過運行@a執行它(下次您可以使用@@ )。


正如@midor所說,它可以與:g命令一起使用,形式為:

:g/def _fun\d\+/norm @a

在所有匹配的行上執行此宏。

要將縮進的“通過”放在每個函數定義的下方,我將使用:

:g/^def/put ='    pass'

^ ........... begining of each line
put ......... puts contents bellow

擠壓空白行:

:g/^$/,/./-1j 

a global command the gets from each empty line ^$
until next non-empty line minus one, performs a join command

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM