簡體   English   中英

如何使用Vim基於模式將文本拆分成多行?

[英]How to split text into multiple lines based on a pattern using Vim?

假設你有這個文字:

name1 = "John"; age1 = 41;
name2 = "Jane"; age2 = 32;
name3 = "Mike"; age3 = 36;
...

並且您希望將每一行拆分為兩行以得到如下結果:

name1 = "John";
age1 = 41;
name2 = "Jane";
age2 = 32;
name3 = "Mike";
age3 = 36;
...

你會如何自動化這個操作?

一些說明:

  1. 我已經嘗試過以下方法:
    (1)在虛擬視頻中選擇文本,
    (2)執行:'<,'>:norm ^3f r^M ***,
    但它不能正常工作; 它只分割了一半的行,因為在每一行被打破之后,該命令的下一次重復將應用於其余的虛線而不是下一行!
  2. 這可以通過宏實現,但我正在尋找更優雅的解決方案。


*** 序列說明:

- norm為在正常模式下執行以下命令
- ^用於將光標移動到行的開頭
- 3f<space>用於將光標移動到行中的第3個空格
- r^M用新線替換該空間

要對整個文件進行操作,請使用以下命令:

:%s/; /;\r/

僅對選定的文本進行操作,請使用:

:'<,'>s/; /\r/

英文翻譯:

替換每次出現的 分號,然后用分號 替換 一個空格 然后換行 。”

說明:

%    -    operate on the entire file
s    -    substitute
/    -    symbol that separates search/replace terms
;    -    the character you're searching for (notice I added a space)
;\r  -    the replacement text (semi-colon followed by newline)

這與Vi中的替換基本相同。


為了更加熱心:

我實際上在我的.vimrc文件中映射了以下這樣的情況:

"
" add a newline after each occurrence of the last search term
"
nnoremap SS :%s//&\r/<CR>

此命令在最后一次搜索模式的第一次出現時拆分文件的每一行。

因此,對於您的用例,您可以這樣做:

  1. 尋找; (你可能想要也可能不想要一個空間...由你決定)
  2. 在正常模式下鍵入以下命令: SS

你文件的每一行都會在第一行被拆分; 符號。

為了澄清,您將使用以下5個擊鍵:

/ ; ENTERšš

這對於快速格式化XML,HTML等非常方便...

暫無
暫無

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

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