在VIM中如何删除这样两行中的一行

Vim、Emacs配置和使用
回复
flyingtxh
帖子: 8
注册时间: 2007-03-10 22:50

在VIM中如何删除这样两行中的一行

#1

帖子 flyingtxh » 2009-07-07 10:19

我有一个文本,格式是这样的
A B
C D
E F
B A
F E
D C
....
....

对于类似于A B和B A这样的两行,我只想保留其中的一行,请问通过VIM如何能够实现?谢谢!
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 在VIM中如何删除这样两行中的一行

#2

帖子 lilydjwg » 2009-07-07 19:29

看来每行的两项是无序的,那么可以这样(假设这两项以空格分开):
先排序:

代码: 全选

:%s/ /\r/<CR>
ggqqqqqVj:sor<CR>Jj@qq@q<ESC>
再uniq一下:

代码: 全选

:%!sort|uniq<CR>
注意:<>指特殊键,不要原样输入。其它的除换行外请原样输入。当然,开始的时候是在普通模式下。
flyingtxh
帖子: 8
注册时间: 2007-03-10 22:50

Re: 在VIM中如何删除这样两行中的一行

#3

帖子 flyingtxh » 2009-07-07 23:14

刚才试过是可行的,谢谢lilydjwg提供的方法。貌似是递归调用@q,我的理解对吧?
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 在VIM中如何删除这样两行中的一行

#4

帖子 lilydjwg » 2009-07-07 23:49

flyingtxh 写了:刚才试过是可行的,谢谢lilydjwg提供的方法。貌似是递归调用@q,我的理解对吧?
对。从Vim的Wiki上学的,很有用的办法。
头像
xhy
帖子: 3916
注册时间: 2005-12-28 1:16
系统: Ubuntu 12.10 X64
来自: 火星

Re: 在VIM中如何删除这样两行中的一行

#5

帖子 xhy » 2009-07-08 1:29

代码: 全选

ggqxVj:sor<CR>Jj@xq@x<ESC>
写递归宏的那句,这样就可以了
目前负债150多万
flyingtxh
帖子: 8
注册时间: 2007-03-10 22:50

Re: 在VIM中如何删除这样两行中的一行

#6

帖子 flyingtxh » 2009-07-08 8:57

xhy 写了:

代码: 全选

ggqxVj:sor<CR>Jj@xq@x<ESC>
写递归宏的那句,这样就可以了
谢谢xhy,不过我对比了一下你的和 lilydjwg 的方法差别,你的方法在记录宏x的过程中就会运行宏x,而 lilydjwg 的不会,后来发现是刚开始没有清除寄存器的缘故,如果用寄存器x:

代码: 全选

ggqxqqxVj:sor<CR>Jj@xq@x<ESC>
回复