如何使用VIM从表格文本中创建列表

时间:2014-10-17 02:32:00

标签: vim

我有一些这样的文字:

UUU F      CUU L      AUU I      GUU V
UUC F      CUC L      AUC I      GUC V
UUA L      CUA L      AUA I      GUA V
UUG L      CUG L      AUG M      GUG V

我想让它看起来像这样:

'UUU': 'F',
'CUU': 'L',
'AUU': 'I',
'GUU': 'V',
'UUC': 'F',
'CUC': 'L',
'AUC': 'I',
'GUC': 'V',
'UUA': 'L',
'CUA': 'L',
'AUA': 'I',
'GUA': 'V',
'UUG': 'L',
'CUG': 'L',
'AUG': 'M',
'GUG': 'V',

使用VIM进行此操作的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

在vim中有很多方法可以做到这一点。一种方法是使用替代。

:%s/\(\w\w\w\) \(\w\)\_s*/'\1': '\2',\r/g

这会查找三个字母后跟一个空格后跟另一个字母,并将前三个字母放在第一个捕获组(\1)中,将单个字母放入第二个捕获组(\2) 。我们还使用所有尾随空格(包括带有\_s*的换行符)。

然后将其替换为'\1': '\2',\r,其中\r是换行符。

答案 1 :(得分:1)

如果将其分解为块,则转换不那么令人生畏(并且更容易排除故障)。首先,通过用换行符替换多个空格,将列合并为一个列:

:%s/ \{2,}/\r/g

UUU F
CUU L
AUU I

然后用单引号括起字符串:

:%s/\w\+/'&'/g

'UUU' 'F'
'CUU' 'L'
'AUU' 'I'

在最后添加逗号:

:%s/$/,

'UUU' 'F',
'CUU' 'L',
'AUU' 'I',

添加冒号:

%s/' /': /

'UUU': 'F',
'CUU': 'L',
'AUU': 'I',

......而且你已经确定了。