如何使用vim文本编辑器删除文本换行?

时间:2016-01-06 06:40:15

标签: regex vim

我正在尝试编写一个用于删除文本换行的vim脚本,我正在使用以下代码,但它不能提供准确的输出。例如\ string {this表示换行}如果“this”出现在第一行,“indication”在第二行e.t.c然后我如何删除文本换行。有可能吗?

:%s/\\string{\zs\(\_[^}]*\)\ze}/\1/gec

根据OP的评论进行编辑:

for example (i/p): \string{1 <enterkey> 2 <enterkey> 3 <enterkey> 
4 <enterkey> 5 <enterkey>}. i need (o/p) \string{1 2 3 4 5}. 

我之前:

\string{1
2
3
4
5
}

我想要之后:

\string{1 2 3 4 5}

我之前(新模式):

\string{1 
{2} 
{3} 
4 
5}

我想要之后:

\string{1 {2} {3} 4 5}

2 个答案:

答案 0 :(得分:2)

此行符合您的要求:

%s/\\string{\_[^}]*/\=substitute(submatch(0),"\n",' ','g')/

它改变了:

foobar
\string{1
2
3
4
5
}
foobar

成:

foobar
\string{1 2 3 4 5 }
foobar

答案 1 :(得分:1)

如果您提供更长的文本示例,以及您想要使用它做什么,那么理解您的问题会更容易。如果我理解正确,您可以删除包含\\string{this的行的换行。

您可以使用:%g/\\string{this/j。它在与j模式匹配的每一行上执行\\string{this命令。

输入:

some text
\string{this
indicate}
more text

变成:

some text
\string{this indicate}
more text