如何使用制表符将文本分栏(在 vim 或 shell 中)

如何使用制表符将文本分栏(在 vim 或 shell 中)

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

# original format
abcdefghijklmnop    field2
abcdefgh    field2
abcdefghijkl    field2

# ideal format
abcdefghijklmnop    field2
abcdefgh            field2
abcdefghijkl        field2

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

有什么方法可以让我专门用制表符来分栏文本吗,无论是在 shell 中vim还是在 shell 上?看起来我可以用groff/来做到这一点tbl,但老实说,我宁愿手动分栏,也不愿弄乱它……

答案1

csv.vim - csv 文件的文件类型插件还支持制表符分隔文件,并具有:ArrangeColumn相关:UnArrangeColumn命令。

答案2

将标签显示大小设置为略大于最长字段的大小。

# original format
abcdefghijklmnop<Tab>field2
abcdefgh<Tab>field2
abcdefghijkl<Tab>field2
I have spaces!<Tab>field2

在 Vim 中,

:echo len("abcdefghijklmnop") " Reports 16
:set noexpandtab tabstop=17

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

# displays like this
abcdefghijklmnop>field2
abcdefgh>        field2
abcdefghijkl>    field2
I have spaces!>  field2

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

答案3

理想情况下,你会希望使用如下命令

column -t -o '\t' file

但这并不奏效,因为column程序不会转义\t以将其解释为Tab。但您仍然可以插入文字制表符。为此,请按下Ctrl-V,然后按下Tab键。因此您的命令应该是这样的:

column -t -o '        ' file

其中,大' '实际上是一个标签。

这很简洁。您也可以在 vim 中运行它。直观地选择要列化的行,然后运行:

:'<,'>!column -t -o '^I'

vim将'<,'>自动写入,而这'^I就是 vim 表示文字制表符的方式,您可以使用上面解释的方法插入它。

答案4

使用godlygeek/表格您可以选择的插件

:%Tabularize /\t.*/

正如所提到的@paul-rougieux在评论中我们可以将上述命令缩写为:

:%Tab /\t.*/

相关内容