【问题标题】:Justify text in visual block在视觉块中对齐文本
【发布时间】:2014-12-16 19:40:38
【问题描述】:

Vim 中有没有一种方法可以在可视块中对齐文本?

p.e.我的文件的部分示例:

text text  |5  sm 23  |
text  text |1274 hc a4|
text text  | 33 rnd bc|
 text text | 28 yz 22 |
text text  |9808 yz 56|

预期输出:

text text   5   sm  23
text  text  1274 hc a4
text text   33  rnd bc
 text text  28  yz  22
text text   9808 yz 56

我启用了虚拟编辑::set virtualedit=all
我添加了一个带空格的列(在我的示例中位于右侧的|),以便在“23”之后创建两个空格,在“22”之后创建一个空格。
然后我选择了可​​视块并执行了命令:'<,'>ce
没有预期的输出。

【问题讨论】:

  • 你必须为它编程。顺便说一句,据我了解,这不是“中心”,您希望您的文本在可视范围内最大程度地填充。并且您想更改文本行内的空格。 :center 不会触及这些空间。所以你必须编写自己的函数
  • 你是对的,我是说正义。我会在我的问题中改变它。

标签: vim alignment block text-alignment


【解决方案1】:

您所描述的通常称为 justify (通过添加内部空白来左右边距);而 center 向左右添加空格以使数量相等。

有两个插件可以证明整行

  • $VIMRUNTIME/macros/justify.vim 随 Vim 提供
  • Justify plugin 提供了一个简单的实现

由于您希望将其应用于 逐块选择,您必须删除逐块选择,将它们放在单独的行/暂存缓冲区中,证明这一点(选择的原始宽度),然后拉回并再次作为块插入。 (对于这些,我的UnconditionalPaste plugin 提供了方便的glpgbp 映射。)根据您需要的频率,可以手动应用它,也可以尝试通过自定义映射实现自动化。

【讨论】:

  • 您好 Ingo,感谢您的回答。我安装了 Justify 插件,但它并不完全符合我的要求。它不会将文本向左扩展,它只会将文本向右扩展。也许我必须像肯特在他的评论中写的那样自己写。计算一行单词之间的空格,将它们放入带有计数器的列表中,然后将它们除以计数器,然后将它们放回文本中,或类似的东西。
  • 你可以通过:left-首先对齐文本(已经在单独的行上)来解决这个问题。我同意,如果您需要一个完全自动化的解决方案来满足您的需求,那么您无法自行实现它,也许可以使用插件来获得灵感。
猜你喜欢
  • 2017-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
相关资源
最近更新 更多