假设你有这样的文本:
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) 选择virtual-vode中的文本,
(2)执行:'<,'>:norm ^3f r^M
***,
但它不能正常工作;它只分割一半的行,因为在每行被断开后,该命令的下一次重复将应用于断行的其余部分,而不是下一行!
- 这可以使用宏来实现,但我正在寻找更优雅的解决方案。
*** 顺序解释:
-norm
用于在正常模式下执行以下命令
-^
用于将光标移动到行首
-3f<space>
用于将光标移动到该行的第三个空格
-r^M
用换行符替换该空格
要对整个文件进行操作,请使用以下命令:
:%s/; /;\r/
进行操作only在选定的文本上,使用以下命令:
:'<,'>s/; /\r/
英文翻译:
"替换所有出现的 分号后跟一个空格 with 分号后跟换行符."
解释:
% - 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
文件的每一行都会首先被分割;
symbol.
为了澄清起见,您将使用以下 5 个按键:
/ ; ENTER S S
这对于快速格式化 XML、HTML 等非常方便......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)