命令J
用于合并行。
命令gJ
用于合并行并删除空格。
是否存在一种命令可以在行之间添加分隔符来合并行?
示例:
输入:
text
other text
more text
text
我想要做的事情:
- 选择这4行
- 如果开头和/或结尾有空格,请删除它们
- 在它们之间添加分隔符“//”以合并这些行
输出:
text//other text//more text//text
:substitute
命令,匹配\n
即可实现该功能。:%s#\s*\n\s*#//#g
然而,这个方法也会在末尾添加一个分隔符(因为范围内的最后一行也有一个换行符)。您可以手动删除它,或者指定c
标志并在最后一个替换前退出,或者将范围减少一个并且代替最后一个使用:join
:
:1,$-1s#\s*\n\s*#//#g|join
https://github.com/sk1418/Join
除了内置的:join
命令提供的所有功能外,“Join”还可以:Join lines with separator (string)
Join lines with or without trimming the leading/trailing whitespaces
Join lines with negative count (backwards join)
Join lines in reverse
Join lines and keep joined lines (without removing joined lines)
Join lines with any combinations of above options
通过以下方式将内容添加到除最后一行之外的所有行:
:1,$-1s#$#//#
):1,$-1norm A//
)然后使用可视化选择(vGgJ
)或其他任何方法进行连接。
除非您经常执行此操作,否则您很可能会忘记任何复杂命令或插件在您的配置中的存在,因此我建议使用通用的、经常使用的子步骤。
:%s:\n\ze.://
每行列出50个项目,用空格分隔:
seq 0 70 | xargs -L 50 | sed 's/ /,/g'
输出结果:
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49
50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70
1,$-1norm A//|join
的东西,但不知何故它不起作用。它会将join附加到哪里?你知道是为什么吗?是因为normal命令吗?(注意:在//和|之间有一个转义字符,但它在注释中丢失了) - Lieven Keersmaekers:norm A
包装在:execute
中;参见:h :bar
。 - Ingo Karkat#
来避免必须将//
替换为\/\/
。 - Ingo Karkat