如何使用Vim基于模式将文本拆分为多行?

pdtvr36n  于 9个月前  发布在  其他
关注(0)|答案(2)|浏览(158)

假设你有这个文本:

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 *,
但是它不能正确工作;它只拆分了一半的行,因为在每一行被断开之后,下一次重复的命令将应用于断开的行的其余部分,而不是下一行!
1.这可以实现使用宏,但我正在寻找更优雅的解决方案。

  • 序列说明:*
  • -norm用于在正常模式下执行以下命令 *
  • -^用于将光标移动到行首 *
  • -3f<space>用于将光标移动到行中的第三个空格 *
  • -r^M用于将该空格替换为新行 *
fbcarpbf

fbcarpbf1#

要对整个文件进行操作,请使用以下命令:

:%s/; /;\r/

字符串
要对所选文本进行only操作,请使用以下命令:

:'<,'>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中替换的基本方法。
更多Geekiness:
实际上,我在.vimrc文件中Map了以下内容,用于这种情况:

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


此命令在最后一个搜索模式的第一个出现处拆分文件的每一行。
所以,对于你的用例,你会这样做:
1.搜索;(你可能想或不想包含一个空格......由你决定)
1.在正常模式下键入以下命令:SS
文件的每一行将在第一个;符号处拆分。
为了澄清,您可以使用以下5个选项:
/; SS
这对于快速格式化XML、HTML等非常方便。

rbl8hiat

rbl8hiat2#

:s/<pattern>/<replacement string>\r/g

字符串
尾随的g使替换在一行中全局化。

:1,$s/<pattern>\<replacement string>\r/g


当我发现这篇文章时,我正在解决的问题是在\n模式处分割行。我的解决方案是

:s/\\n/\r/g

相关问题