データ入力やその他の目的で、タブ区切りのテキストを手動で操作する必要が頻繁にあります。これを行うと、テキストが列に適切に配置されていると役立ちます。例(4スペースタブを想定):
# original format
abcdefghijklmnop field2
abcdefgh field2
abcdefghijkl field2
# ideal format
abcdefghijklmnop field2
abcdefgh field2
abcdefghijkl field2
column
ユーティリティを使用してテキストをこのように列化することはよく知っていますが、問題は、スペースを使用して列を整列することであり、特にタブが必要です。この要件は、Tabularizeプラグインを除外しているようにも見えます。
vim
内またはシェルで、具体的にタブを使用してテキストを列化する方法はありますか? groff
/tbl
でできるように見えますが、正直言って、それを台無しにするよりも手作業で列に並べたいと思います。
csv.vim-csvファイル用のFiletypeプラグイン はタブ区切りファイルもサポートし、:ArrangeColumn
および:UnArrangeColumn
そのためのコマンド。
タブの表示サイズを最長のフィールドより少し大きく設定します。
# 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
これを1つのコマンドに要約することはできますが、方法がわかりません。最新のVimを実行している場合、:set list
は派手な文字(構成も可能)でハードタブを示します。それ以外の場合は、^I
(必要なものではありません)または空白として表示されます。
# displays like this
abcdefghijklmnop>field2
abcdefgh> field2
abcdefghijkl> field2
I have spaces!> field2
テーブルを適切にスペースアラインメントした場合(前述のTabularizeまたは代替のAlignプラグインを使用)、次のコマンドを使用してスペースをタブに変換できます。
:%retab!
:%substitute/ \+/\t/g
最初のコマンドは、幅を変更せずに、可能な場合はインデントをタブに置き換えます(これは、:set noexpandtab
)、2番目は残りのスペースを(より大きな)タブストップに変換します。
godlygeek/tabular プラグインを使用して選択できます
:%Tabularize /\t.*/