这是我在某些文档中使用的表的一部分(部分):

+---------------+------------------------+---------------------------------------+
| TASK NAME     | WHEN                   | DESCRIPTION                           |
+---------------+------------------------+---------------------------------------+
| db:seed       | On every update        | Data required for the application to  |
|               |                        | run; you should always be able to     |
|               |                        | safely execute this multiple times    |
|               |                        | for an update.                        |
| db:truncate   | Manually (dangerous!)  | TRUNCATE all tables but postal_codes  |
| postal_codes  | Once                   | Load the postal_codes table           |
+---------------+------------------------+---------------------------------------+


问题是这很难编辑。如果我改变一件事,我需要
(手动)重新排列所有内容,这是PITA。

是否有更简单的方法来管理此问题?我不在乎上面这样的确切布局,但我想保留第3列的包装...

评论

顺便说一句,如果这是reStructuredText,则可以考虑查看列表表(最近我将许多表都转换为该表,因为ascii表很难维护且很难比较)

#1 楼

我是插件
vim-table-mode的作者。
我花了很多时间来构建和改进它,尤其是
社区反馈,它恰好适合这种使用案例。
快速入门:使用:TableModeEnable命令进入“表模式”,然后您只需键入:
||
| MOVIE | QUOTE|
||
| Blade Runner | Like tears in the rain |
| Monty Python's quest for the holy grail | Are you suggesting that coconuts migrate? |
||

,vim-table-mode会自动处理为您调整对齐方式
,以便它看起来像:
|-----------------------------------------+-------------------------------------------|
| MOVIE                                   | QUOTE                                     |
|-----------------------------------------+-------------------------------------------|
| Blade Runner                            | Like tears in the rain                    |
| Monty Python's quest for the holy grail | Are you suggesting that coconuts migrate? |
|-----------------------------------------+-------------------------------------------|

以后编辑表时,vim-table-mode还将照顾
/>为您对齐。
使用Tableize命令将现有文本转换为表,例如,%Tableize/,会将,作为分隔符,将任何表转换为整个文件中的文本。
您可以保留'table :TableModeDisable模式。

它的核心是轻松创建表格,这些表格将在您键入时自动格式化。它提供了许多映射,还可以移动和操作表
(一个特别有用的映射是<Leader>tdc,用于删除整个列)。所有
要做的就是启用表格模式,它们就会启动,您可以直接输入
而不必担心格式化。
它具有比此处显示的功能更多的功能,例如功能向右
将列对齐,并在标题上添加一些提示。它还具有一个整洁的电子表格
公式引擎,使您可以像常规电子表格那样定义公式并执行计算。
它具有极高的灵活性和可配置性,因此您可以更改多个
/>关于创建的表格和边框的方面。
我还创建了一些截屏视频,试图展示其功能。
此截屏视频是最新的,但请注意,已经做了很多改进因为。

评论


谢谢;我已经对您的答案进行了一些编辑,以添加一些实际的用法信息(它读起来有点像以前的广告)...我无法用vim-table-mode做的一件事是包装第三列就像我问题中的例子一样。这可能吗?

–马丁·图尔诺伊(Martin Tournoij)
2015年2月7日下午0:46

@Carpetsmoker感谢您的编辑。好吧,您可以手动包装它,没有办法自动完成。

–德鲁瓦·萨加尔(Dhruva Sagar)
2015年2月7日,下午5:47

#2 楼

如果可以使用sedcolumn,那么接近的命令行解决方案是:

缺点:


使用'<,'>sed。 Vim是偶然的。
可以将column命令更改为vim sed命令,但是:substitute至关重要。
行分隔符(column)被填充,但是我对其可靠性有所怀疑。我不知道---...-的可移植性如何。

来源:


$'\x01'这样的命令可将分隔符保留在输出中
Vim:管道选定文本封装cmd并在vim信息/命令行上接收输出


评论


除了小故障(可能可以解决)外,这看起来很有希望...我无法解决的一件事是尽管第三列的包装:-/

–马丁·图尔诺伊(Martin Tournoij)
2015年2月7日,0:19

#3 楼

如果您不想安装任何插件,并且想要编辑表格以保持对齐:

-使用内置的VREPLACE模式,该模式由gR激活。

(确保您具有vim最新版本,并检查其是否具有+vreplace功能进行编译,并在终端上键入vim --version)。


(我的状态行设置为在REPLACE和VREPLACE模式下均显示REPLACE) )

如果您想了解有关REPLACE和VREPLACE模式的更多信息,请查看本文。

#4 楼

为此,我创建了命令行工具tablign。它也可以在vim内部运行。只需安装

[sudo -H] pip3 install tablign


在vim中标记该表并调用

:'<,'>:!tablign


(vim填写第一个

它还不能固定列宽,但是可以在需要时添加。