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

如何使用VIM从表格文本创建列表,vim,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'

我有一些这样的文字:

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',
我想让它看起来像这样:

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的最佳方法是什么?

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

:%s/\(\w\w\w\) \(\w\)\_s*/'\1': '\2',\r/g
这将查找三个字母,后跟一个空格和另一个字母,并将前三个字母放入第一个捕获组(
\1
),将单个字母放入第二个捕获组(
\2
)。我们还使用所有尾随空格(包括带有
\\u s*
的换行符)


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

如果将转换分解为多个块,则转换的威胁更小(更容易排除故障)。首先,通过使用换行符替换多个空格将列合并为一列:

:%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',

。。。你准备好了。

你试过什么?我也不知道你是怎么从开始到结束的。我是Vim的新手。实际上我是在gedit中手动完成的,但这一定是一种更好的方法。有一种更好的方法,但输入文本与输出文本不匹配。例如,输入中有16个组,但输出中只有8个组。输出的第一行是UUC,输入是UUU。这是我在问这个问题时犯的错误。我会编辑它,它成功了!我将学习更多关于常规表达式和Vim的知识。谢谢