分页: 1 / 2

Vim如何把所有偶数行合并到奇数行上

发表于 : 2010-02-03 10:43
opp
下了英语单词txt文档,默认是奇数行是一个单词,它的下一行是中文,可我放在手机里太长了,没有必要把解释放在下一行,放下一行不仅使文档行数增加,而且看着不爽,甚至还会有可能把第2行的中文看成是第3行的解释,总之就是不爽。
1,3,5,7……是单词,2,4,6,8……对应的是他们的解释,我知道按J可以合并,不过一个一个地这样非常累人,我想知道在Vim里怎么快速实现,我知道sed也能做到,不过不知道怎么写,要用到patternspace吧,不太熟。
望各位指点一下,谢谢您的帮助。

Re: Vim如何把所有偶数行合并到奇数行上

发表于 : 2010-02-03 11:00
poet
qqJjq

定义一个宏

然后999@q 就可以一次修改999行了。

多重复几次就全部改完了。

Re: Vim如何把所有偶数行合并到奇数行上

发表于 : 2010-02-03 11:01
xiooli

代码: 全选

awk '{if(NR%2 != 0){en=$0} else {print en,$0}}' file > new_file

Re: Vim如何把所有偶数行合并到奇数行上

发表于 : 2010-02-03 12:13
opp
Re:2#
定义宏?Vim里怎么定义?

Re:3#
awk不太熟,试一下,就是不知道Win下的GBK在Linux下这样会不会换行符出现异常。

Re: Vim如何把所有偶数行合并到奇数行上

发表于 : 2010-02-03 12:46
风间星魂
默认按q键开始录制,先按q然后在选个键存宏,然后操作完后再按q结束录制。按@然后在按你先前存的键执行宏,前面加数字自然就是执行次数。

vim可以识别win mac unix三种格式,你可以自行设置优先级。我建议无论任何平台文档都用utf-8/unix模式。 :em06

Re: Vim如何把所有偶数行合并到奇数行上

发表于 : 2010-02-03 13:13
adagio
normal模式下按qa就开始宏记录,然后你可以开始操作,比如按J合并,换行等等,可以了之后按q结束
之后你可移到下一行,开始回放这个宏a
如2楼所说,你可以让他重复999次即可,比如999@a,搞定

Re: Vim如何把所有偶数行合并到奇数行上

发表于 : 2010-02-03 13:18
风间星魂
adagio 写了:normal模式下按qa就开始宏记录,然后你可以开始操作,比如按J合并,换行等等,可以了之后按q结束
之后你可移到下一行,开始回放这个宏a
如2楼所说,你可以让他重复999次即可,比如999@a,搞定
楼上1w多帖 :em20

Re: Vim如何把所有偶数行合并到奇数行上

发表于 : 2010-02-03 13:22
adagio
EE出来啊!让人家开开眼 :em05

Re: Vim如何把所有偶数行合并到奇数行上

发表于 : 2010-02-03 13:25
风间星魂
还是看ee大神 :em06

Re: Vim如何把所有偶数行合并到奇数行上

发表于 : 2010-02-03 13:29
poet
opp 写了:Re:2#
定义宏?Vim里怎么定义?
我不是在前面已经把定义的命令都给出来了么!

Re: Vim如何把所有偶数行合并到奇数行上

发表于 : 2010-02-03 13:36
adagio
湿人大哥,你也不给个说明,人家看不懂喔 :em04

Re: Vim如何把所有偶数行合并到奇数行上

发表于 : 2010-02-03 13:53
风间星魂
既然ee不来,我先来一个最简单的,在vim中使用如下命令,保证管用。 :em06

代码: 全选

:%s/\(\w.*\)\n/\1\t

Re: Vim如何把所有偶数行合并到奇数行上

发表于 : 2010-02-03 13:57
adagio
ls这个嘛意思?解释一下好不 :em06

Re: Vim如何把所有偶数行合并到奇数行上

发表于 : 2010-02-03 13:59
风间星魂
adagio 写了:ls这个嘛意思?解释一下好不 :em06
简单地说把所有英文后面的换行符换成tab符 :em06

Re: Vim如何把所有偶数行合并到奇数行上

发表于 : 2010-02-03 14:03
adagio
\1就是tab符号?学习了 :em11