【问题标题】:Right align a specific column separated by spaces右对齐由空格分隔的特定列
【发布时间】:2012-01-11 23:04:24
【问题描述】:

例子:

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 

但我想知道的是如何在行尾之前找到最新的对齐参数
(例如在上面的示例“空格”中)并在此之后对齐所有文本(不计算列数)。

这可能吗?

而且我完全不知道如何仅将第一列或特定列右对齐。

【问题讨论】:

  • 如何定义列?如果它们是空格分隔的,那么“Monte Bianco”是否跨越 2 列?
  • @Benoit,monte bianco 必须是 2 个不同的列“monte”和“bianco”我的想法是在需要列的地方添加空间,然后在上面执行。

标签: vim alignment tabular


【解决方案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

【讨论】:

  • 非常感谢 ib。如果我不想在第一个空格分隔符处而是在前 2 个空格分隔符处右对齐,那么公式是什么? (跳过只有 1 个空格的分隔符)
  • @Remonn:我添加了与该案例对应的命令。要更改列分隔符必须具有的最小空格数,请将2 替换为适当的数字。
猜你喜欢
  • 1970-01-01
  • 2017-03-07
  • 2011-04-09
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 2015-10-31
相关资源
最近更新 更多