前回は、さまざまなプラグインをまとめたメタパッケージである「vim-polyglot」を紹介した。同パッケージには、各種プログラミング言語やファイル形式のシンタックスハイライト、特化機能を提供するプラグインがまとめられており、とりあえず入れておけば使い勝手が良くなるプラグインパッケージだ。それほど害があるプラグインではないので、入れておいて損はないと思う。
本稿執筆時点で、vim-polyglotがインストールするプラグインの数は152個ある。プログラミング言語関係のプラグインが多いが、ファイル形式関係のプラグインもいくつか含まれている。前回はこのプラグインの効果を示すサンプルとして、CSV(Comma Separated Values:カンマ切りデータ)を編集する際の表示が変わることを紹介した。
CSVの表示が変わったのは、実際にはvim-polyglot経由でインストールされた「chrisbra/csv.vim」というプラグインの効果によるものだ。前回は、vim-polyglotの導入効果の一例として紹介したが、実はこのプラグインはほかにも多くの便利な機能を備えている。そこで、今回からは数回に分けて、chrisbra/csv.vimの活用方法を紹介しよう。
CSVファイル
CSVは、テキストデータ形式の一つであり、セルとセルの間を「,(カンマ)」で区切るかたちで構成されている。スプレッドシートのデータなどを想像するとわかりやすいだろう。
例えば、次のデータは「読み仮名データの促音・拗音を小書きで表記するもの - zip圧縮形式 日本郵便」からダウンロードしてきた郵便番号と住所のCSVデータだ。データはカンマで区切られており、文字列に相当するデータは「”“(ダブルクォーテーション)」で囲まれている。
13101,"100 ","1000000","トウキョウト","チヨダク","イカニケイサイガナイバアイ","東京都","千代田区","以下に掲載がない場合",0,0,0,0,0,0
13101,"102 ","1020072","トウキョウト","チヨダク","イイダバシ","東京都","千代田区","飯田橋",0,0,1,0,0,0
13101,"102 ","1020082","トウキョウト","チヨダク","イチバンチョウ","東京都","千代田区","一番町",0,0,0,0,0,0
13101,"101 ","1010032","トウキョウト","チヨダク","イワモトチョウ","東京都","千代田区","岩本町",0,0,1,0,0,0
13101,"101 ","1010047","トウキョウト","チヨダク","ウチカンダ","東京都","千代田区","内神田",0,0,1,0,0,0
13101,"100 ","1000011","トウキョウト","チヨダク","ウチサイワイチョウ","東京都","千代田区","内幸町",0,0,1,0,0,0
13101,"100 ","1000004","トウキョウト","チヨダク","オオテマチ(ツギノビルヲノゾク)","東京都","千代田区","大手町(次のビルを除く)",0,0,1,0,0,0
13101,"100 ","1006890","トウキョウト","チヨダク","オオテマチジェイエイビル(チカイ・カイソウフメイ)","東京都","千代田区","大手町JAビル(地階・階層不明)",0,0,0,0,0,0
13101,"100 ","1006801","トウキョウト","チヨダク","オオテマチジェイエイビル(1カイ)","東京都","千代田区","大手町JAビル(1階)",0,0,0,0,0,0
13101,"100 ","1006802","トウキョウト","チヨダク","オオテマチジェイエイビル(2カイ)","東京都","千代田区","大手町JAビル(2階)",0,0,0,0,0,0
13101,"100 ","1006803","トウキョウト","チヨダク","オオテマチジェイエイビル(3カイ)","東京都","千代田区","大手町JAビル(3階)",0,0,0,0,0,0
13101,"100 ","1006804","トウキョウト","チヨダク","オオテマチジェイエイビル(4カイ)","東京都","千代田区","大手町JAビル(4階)",0,0,0,0,0,0
13101,"100 ","1006805","トウキョウト","チヨダク","オオテマチジェイエイビル(5カイ)","東京都","千代田区","大手町JAビル(5階)",0,0,0,0,0,0
13101,"100 ","1006806","トウキョウト","チヨダク","オオテマチジェイエイビル(6カイ)","東京都","千代田区","大手町JAビル(6階)",0,0,0,0,0,0
13101,"100 ","1006807","トウキョウト","チヨダク","オオテマチジェイエイビル(7カイ)","東京都","千代田区","大手町JAビル(7階)",0,0,0,0,0,0
13101,"100 ","1006808","トウキョウト","チヨダク","オオテマチジェイエイビル(8カイ)","東京都","千代田区","大手町JAビル(8階)",0,0,0,0,0,0
13101,"100 ","1006809","トウキョウト","チヨダク","オオテマチジェイエイビル(9カイ)","東京都","千代田区","大手町JAビル(9階)",0,0,0,0,0,0
13101,"100 ","1006810","トウキョウト","チヨダク","オオテマチジェイエイビル(10カイ)","東京都","千代田区","大手町JAビル(10階)",0,0,0,0,0,0
13101,"100 ","1006811","トウキョウト","チヨダク","オオテマチジェイエイビル(11カイ)","東京都","千代田区","大手町JAビル(11階)",0,0,0,0,0,0
13101,"100 ","1006812","トウキョウト","チヨダク","オオテマチジェイエイビル(12カイ)","東京都","千代田区","大手町JAビル(12階)",0,0,0,0,0,0
13101,"100 ","1006813","トウキョウト","チヨダク","オオテマチジェイエイビル(13カイ)","東京都","千代田区","大手町JAビル(13階)",0,0,0,0,0,0
13101,"100 ","1006814","トウキョウト","チヨダク","オオテマチジェイエイビル(14カイ)","東京都","千代田区","大手町JAビル(14階)",0,0,0,0,0,0
13101,"100 ","1006815","トウキョウト","チヨダク","オオテマチジェイエイビル(15カイ)","東京都","千代田区","大手町JAビル(15階)",0,0,0,0,0,0
13101,"100 ","1006816","トウキョウト","チヨダク","オオテマチジェイエイビル(16カイ)","東京都","千代田区","大手町JAビル(16階)",0,0,0,0,0,0
13101,"100 ","1006817","トウキョウト","チヨダク","オオテマチジェイエイビル(17カイ)","東京都","千代田区","大手町JAビル(17階)",0,0,0,0,0,0
CSVはシンプルなルールのテキスト形式データだ。一応標準と言える規約も存在している。実際にはアプリケーションごとにCSVデータの解釈が多少異なる部分もあるのだが、問題なく使えることが多い。
CSVはカンマ区切りのファイルだと説明したが、区切りはカンマではないこともある。「;(セミコロン)」区切りだったり、スペース区切りやタブ区切りだったりすることもある。スペース区切りのデータは「SSV (Space Separated Values)」、タブ区切りのデータは「TSV (Tab Separated Values)」といった名称で呼ばれることもあり、拡張子として「csv」ではなく「ssv」や「tsv」が使われることもある。
ただし、多くのケースでカンマ以外の区切りデータであっても、まとめてCSVとして扱われることが多いようだ。そのため、アプリケーションの多くは区切り文字を指定できるようになっており、カンマ以外のデータの読み込み/保存ができるようになっていることが多い。
CSVは使われているシーンが多い
CSVは、データ交換用のフォーマットとしてよく使われる。スプレッドシートアプリケーションのデファクトスタンダードであるMicrosoft Excelのファイルがそのまま使われることも多いのだが、Excelのデータは当然ながら対応したアプリケーションでなければ編集することができない。対応アプリケーションであっても、バージョンが古いと問題が出ることもある。
だが、CSVであれば大抵のスプレッドシートアプリケーションで扱うことができるし、エディタで開いて編集することも可能だ。データベースにおいても、データベースのデータをそのまま交換用データとして使うのには無理があるため、SQL形式のデータにするか、またはCSVのようなデータ形式でエクスポートされた上で交換に使われることが多い。とにかくシンプルなデータ形式であるCSVは、多くのソフトウエアで扱えることが利点なのだ。
産業用デバイスなどにおいても同様だ。POSシステムから上がってくる売上データや、産業用機械から出力される計測データなどもCSV形式でやり取りされることが多い。例えば、Linuxサーバに売上データや計測データがCSVデータとして送られてくるケースを考える(こういった使い方は結構多い)。送られてきたデータは、何らかの加工をして使うことになる。業務システムが構築されている場合は、自動的に業務システムが読み込むことになるだろう。
最も簡単な加工方法は、CSVファイルを一旦Windows PCにコピーし、Microsoft ExcelまたはOffice 365で編集するというものだ。小規模の事業所や部門では、こうしたかたちでデータを加工していることが少なくない。
CSVデータはエディタで編集できるものの、その編集作業はやりやすいものとは言えない。しかし、Microsoft Excelで行う簡単な編集作業くらいであれば、実はVimでもできる。先ほど紹介した「chrisbra/csv.vim」にはCSVファイルを操作するための数々の機能が用意されている。見た目を整えるだけではなく、スプレッドシートアプリケーションのように操作することが可能だ。こちらで事が済むのであれば、わざわざダウンロードしてMicrosoft Excelで開いて編集する必要はない。Windows TerminalからLinuxサーバにログインして、そこでちょっとVimを使えば作業完了、とできる。
むしろ、CSVに関して、Microsoft ExcelよりもVimのほうが役立つケースもある。データの差分を比較するケースでは、Vimのほうが便利だ。計測データなどは、前日とのデータ比較などを行う必要があることも多いが、Vimを使うとこれが実に簡単に実施できる。適材適所ではあるのだが、こうしたことからもVimのスキルを引き上げておいて損がないことはおわかりいただけるだろう。
chrisbra/csv.vimのシンプルな使用サンプル
詳しくは次回以降で説明するとして、今回はchrisbra/csv.vimの利用例のいくつかを簡単に取り上げておく。まず、次のスクリーンショットは先ほどのCSVファイルをchrisbra/csv.vimがインストールされたVimで開いたものだ。シンタックスハイライトされているほか、カンマ部分が縦線で表示され、さらに折返し表示が無効になっている。これだけでもCSVファイルを閲覧/編集するに際して、扱いやすいはずだ。
次のスクリーンショットは、テーブルのように前後左右の表示形式をそろえ、さらにカーソルのある列をハイライト表示させたものだ。こちらのほうが、さらに人間が読みやすいだろう。
編集画面は最初のスクリーンショットのままで、テーブル表示はプレビューとして表示させるだけといった使い方もできる。次のような具合だ。
chrisbra/csv.vimはCSVデータをさまざまな形式で見せることができるのだが、最も強力な機能の一つが「フィルタ」だ。この機能を使用すると、「特定の列の値がある値であるものだけを表示する」とか、「ある値ではないものだけを表示する」といったことができる。フィルタは重ねることが可能で、複数のフィルタを重ねて表示内容を絞り込んでいくことができる。
フィルタによるデータの絞り込みはMicrosoft Excelでもできる機能だが、Vimでこれができると、人間がインタラクティブにCSVデータの解析をできるようになる。ぜひとも使い方を習得してもらいたい機能の一つだ。
chrisbra/csv.vimが提供する代表的な機能
chrisbra/csv.vimが提供する代表的な機能を次にまとめておく。一気に全てを覚えることはできないので、次回以降、トピックを分けながら操作方法を取り上げていこうと思う。最後にはカスタマイズする方法を紹介し、特に自分がよく使う機能をもっと便利に利用できる方法を紹介しよう。
コマンド | 内容 |
---|---|
CSVWhatColumn | カーソルが何列目にあるか |
CSVWhatColumn! | 同列1行目の内容を表示 |
CSVNrColumns | 最大列数を表示(先頭から10行で判断) |
CSVSearchInColumn /パターン/ | 現在の列をパターンで検索 |
CSVSearchInColumn 列番号 /パターン/ | 指定した列をパターンで検索 |
CSVHiColumn | 現在の列を強調表示 |
CSVHiColumn 列番号 | 指定した列を強調表示 |
CSVHiColumn! | 列の強調表示を解除 |
CSVArrangeColumn | テーブル形式での表示へ切り替え(実験的機能) |
CSVTabularize | テーブル形式でのプレビュー表示 |
CSVDeleteColumn | 現在の列を削除 |
CSVDeleteColumn 列番号 | 指定した列を削除 |
CSVHeader | 1行目を別ウィンドウで表示 |
CSVHeader 行数 | 先頭から指定行数分を別ウィンドウで表示 |
CSVHeader! | 開いた行ヘッダウィンドウを閉じる |
CSVVHeader | 1列目を別ウィンドウで表示 |
CSVVHeader 列番号 | 行頭から指定列数分を別ウィンドウで表示 |
CSVVHeader | 開いた列ヘッダウィンドウを閉じる |
CSVSort | 現在の列でファイルをソート |
CSVSort 列番号 | 現在の列でファイルをソート |
CSVSort! | 現在の列でファイルを逆順にソート |
CSVSort! 列番号 | 現在の列でファイルを逆順にソート |
CSVColumn | 現在の列をコピー |
列番号CSVColumn | 指定した列をコピー |
CSVMoveColumnor | 現在の列を最後の列の右側へ移動 |
CSVMoveColumn 列番号 列番号 | 最初に指定した列を、2つ目に指定した列の右側へ移動 |
CSVSumCol | 現在の列の合計を出力 |
CSVSumCol 列番号 | 指定した列の合計を出力 |
CSVSumRow | 行の合計を出力 |
CSVNewRecord | 新しい行を作成 |
CSVNewDelimiter デリミタ | 区切り文字を変更 |
CSVConvertData | データをほかの形式に変換 |
CSVDuplicates 列番号 | 指定した列で重複している行を出力 |
CSVAnalyze | 現在の列を分析する(値とその数、割合など) |
CSVAnalyze 列番号 | 指定した列を分析する(値とその数、割合など) |
CSVVertFold | 1列目から現在の列を折りたたむ |
CSVVertFold 列番号 | 1列目から指定した列までを折りたたむ |
CSVVertFold! | 列の折りたたみを解除する |
CSVTranspose | 列と行を入れ替える(転置) |
CSVAddColumn | 現在の列の右側に新しい列を追加 |
CSVAddColumn 列番号 | 指定した列の右側に新しい列を追加 |
CSVDupColumn | 現在の列を右側に複製 |
CSVDupColumn 列番号 | 指定した列を右側に複製 |
CSVSubstitute 列番号/パターン/文字列/ | 指定した列で置換 |
CSVColumnWidth | 列ごとの最大文字数を出力 |
CSVCountCol | 現在の列内の値の数を出力 |
CSVCountCol 列番号 | 指定した列内の値の数を出力 |
CSVMaxCol | 現在の列内の最大値を出力 |
CSVMaxCol 列番号 | 指定した列内の最大値を出力 |
CSVMaxMin | 現在の列内の最小値を出力 |
CSVMaxMin 列番号 | 指定した列内の最小値を出力 |
CSVAvgCol | 現在の列内のデータの平均値を出力 |
CSVAvgCol 列番号 | 指定した列内のデータの平均値を出力 |
PopVarCol | 現在の列の母集団分散を出力 |
PopVarCol 列番号 | 指定した列の母集団分散を出力 |
SmplVarCol | 現在の列の標本分散を出力 |
SmplVarCol 列番号 | 指定した列の標本分散を出力 |
PopStdCol | 現在の列の母標準偏差を出力 |
PopStdCol 列番号 | 指定した列の母標準偏差を出力 |
SmplStdCol | 現在の列の標本標準偏差を出力 |
SmplStdCol 列番号 | 指定した列の標本標準偏差を出力 |
キー | 内容 |
---|---|
「Ctrl」+「→」 | 次の列へ移動 |
L | 次の列へ移動 |
W | 次の列へ移動 |
「Ctrl」+「←」 | 前の列へ移動 |
E | 前の列へ移動 |
H | 前の列へ移動 |
↑ | 列を上へ移動 |
K | 列を上へ移動 |
↓ | 列を下へ移動 |
J | 列を下へ移動 |
キー | 内容 |
---|---|
↩️ | 現在の列と一致しないすべての行を動的に折りたたむ |
Space | 現在の列と一致するすべての行を動的に折りたたむ |
BS | 動的フィルタから最後のアイテムを削除 |
設定項目 | 内容 |
---|---|
g:csv_delim | デフォルトのデリミタ |
g:csv_no_conceal | 1に設定するとデリミタ部分を|で視覚的に表示(デフォルトは設定されていない) |
g:csv_highlight_column | ‘y’に設定するとカーソルがある列を自動でハイライト |
b:csv_headerline | ヘッダの行数を指定。0を指定するとヘッダとしてのハイライトが行われなくなる |
Vimプラグイン沼
本連載では、これまで人気の高いプラグインを紹介してきたが、それぞれのプラグインについては簡単に代表的な機能を解説するに留まっている。各プラグインを深堀りすれば、もっと便利な活用方法もあるだろう。
Vimは使い方を調べれば調べるほど、そして設定ファイルを整理すればするほど、作業の効率を引き上げることが可能となる。それがゆえに、Vimは”沼”なのだ。使い込むほど、Vimから離れられなくなっていく。しかし、それに応えてくれるエディタであることも間違いのないところだ。