如何使用制表符对文本进行列化(在 vim 中或在 shell 中)

kin*_*ine 8 vim shell text-editors

我经常需要手动操作制表符分隔的文本以进行数据输入和其他目的。当我这样做时,如果文本正确对齐到列中会有所帮助。例如(假设有 4 个空格的制表符):

# original format
abcdefghijklmnop    field2
abcdefgh    field2
abcdefghijkl    field2

# ideal format
abcdefghijklmnop    field2
abcdefgh            field2
abcdefghijkl        field2
Run Code Online (Sandbox Code Playgroud)

我非常熟悉使用该column实用程序以这种方式对文本进行列化,但问题在于它使用空格来对齐列,而我特别需要制表符。这一要求似乎也排除了 Tabularize 插件。

有什么方法可以vim在 shell内或在 shell 中专门使用选项卡对文本进行列化?看起来我可以用groff/做到这一点tbl,但老实说,我宁愿手工将它列成列而不是把它弄乱......

Che*_*ter 9

将选项卡显示大小设置为仅大于最长字段。

# original format
abcdefghijklmnop<Tab>field2
abcdefgh<Tab>field2
abcdefghijkl<Tab>field2
I have spaces!<Tab>field2
Run Code Online (Sandbox Code Playgroud)

在 Vim 中,

:echo len("abcdefghijklmnop") " Reports 16
:set noexpandtab tabstop=17
Run Code Online (Sandbox Code Playgroud)

您可能可以将其压缩为一个命令,但我不知道如何。如果您运行的是现代 Vim,:set list则会用花哨的字符(您也可以配置)指示硬标签。否则他们只会显示为^I(不是你想要的)或空格。

# displays like this
abcdefghijklmnop>field2
abcdefgh>        field2
abcdefghijkl>    field2
I have spaces!>  field2
Run Code Online (Sandbox Code Playgroud)

编辑:来自真实运行的 vim 的示例!


Ing*_*kat 6

csv.vim -一个插件的CSV文件,还支持制表符分隔的文件,并具有:ArrangeColumn:UnArrangeColumn命令为。