我经常需要手动操作制表符分隔的文本以进行数据输入和其他用途。当我这样做时,如果文本正确对齐到列中会很有帮助。例如(假设有 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
答案3
理想情况下,你会希望使用如下命令
column -t -o '\t' file
但这并不奏效,因为column
程序不会转义\t
以将其解释为Tab
。但您仍然可以插入文字制表符。为此,请按下Ctrl-V
,然后按下Tab
键。因此您的命令应该是这样的:
column -t -o ' ' file
其中,大' '
实际上是一个标签。
这很简洁。您也可以在 vim 中运行它。直观地选择要列化的行,然后运行:
:'<,'>!column -t -o '^I'
vim将'<,'>
自动写入,而这'^I
就是 vim 表示文字制表符的方式,您可以使用上面解释的方法插入它。