2012-01-11 33 views
1

实例分离特定的列:右对齐用空格

Monte Bianco 4.807 France/Italy 
Monte Rosa 4.634 Italy/Switzerland 
Dom 4.545 Switzerland/Italy 
Weisshorn 4.505 Switzerland 
Cervino (Matterhorn) 4.478 Italy/Switzerland 
Suphan Dagi 4.434 Turkey 

我试图创建2个新的菜单选项(在menu.vim里):

  • 对齐右一列
  • 对齐最后一列

我无法找出如何仅将第一列,仅列出最后一列或特定列我的桌子中间。

Monte Bianco 4.807    France/Italy 
Monte Rosa 4.634   Italy/Switzerland 
Dom 4.545     Switzerland/Italy 
Weisshorn 4.505     Switzerland 
Cervino (Matterhorn) 4.478 Italy/Switzerland 
Suphan Dagi 4.434      Turkey 

我知道我可以用它来右对齐的最新列

Tabular /^\(.\{-}\s\{1,}\)\{1,}/l0l0r0 

但我想了解的是如何行
(PE结束前找到最新的对齐参数在上面的例子“Spaces”中)并在此之后对齐所有文本(不包括列数)。

这可能吗?

而且我不知道如何只对齐第一列或特定列。

+1

你如何定义列?如果他们是空间分开的,那么“Monte Bianco”跨越两列? – Benoit 2012-01-11 09:35:23

+0

@Benoit,monte bianco必须是2个不同的列“monte”和“bianco”我的想法是添加spcaces我需要的列,然后做上面。 – Reman 2012-01-11 10:52:07

回答

1

为了右对齐第一个空格分隔栏留下他们的休息 左对齐,请使用以下:Tabular命令,

:Tab/^\S*\s\+\zs/r1l0l0 

同样,右对齐的最后一列,运行

:Tab/\s\@<!\ze\s\+\S*$/l1l0r0 

如果列分隔符必须包含至少两个空格字符,请按如下所示修改 命令。

:Tab/\(\s\{2,}.*\)\@<!\s\{2,}\zs/r1l0l0 

:Tab/\s\@<!\ze\s\{2,}\(.*\s\{2,}\)\@!/l1l0r0 
+0

非常感谢你。如果我不想在第一个空格分隔符处对齐,但是在前两个空格分隔符处对齐,那么公式会是什么? (跳过只有1个空格的分隔符) – Reman 2012-01-11 14:15:37

+0

@Remonn:我添加了对应于这种情况的命令。要更改列分隔符必须具有的最小空格数,请用适当的数字替换“2”。 – 2012-01-11 15:09:34