假设您有此文:
name1 = "John"; age1 = 41;
name2 = "Jane"; age2 = 32;
name3 = "Mike"; age3 = 36;
...
并且您希望将每一行拆分为两行,以得到如下结果:
name1 = "John";
age1 = 41;
name2 = "Jane";
age2 = 32;
name3 = "Mike";
age3 = 36;
...
您如何自动执行此操作?
有些说明:
:'<,'>:norm ^3f r^M
***,*** 对序列的解释:
- norm
用于在正常模式下执行以下命令
- ^
用于将光标移动到行的开头
- 3f<space>
用于将光标移动到行中的第3个空格
- r^M
用新行替换该空格
答案 0 :(得分:29)
要对整个文件进行操作,请使用:
:%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>
此命令在最后一次搜索模式的第一次出现时拆分文件的每一行。
因此,对于您的用例,您可以这样做:
;
(您可能想要也可能不想包含空格......由您决定)SS
文件的每一行都会在第一个;
符号处拆分。
为了澄清,您将使用以下5个击键:
/ ; ENTER S S
这对于快速格式化XML,HTML等非常方便......