フィルタで絞り込み
chrisbra/csv.vimには「フィルタ」と呼ばれる機能が用意されている。これはセルの値でデータの表示や非表示を切り替える機能だ。例えば、「1列目の値がAのものだけを表示したい」とか「1列目の値がAのものだけは非表示にしたい」といった操作を行うことができる。
chrisbra/csv.vimのフィルタは重ねていくことが可能で、例えば1列目の値がAのもので絞り込みを行い、さらにそこから3列目の値がCのものに絞り込んでいく、といったことができるようになっている。インタラクティブにデータを調べていくことができるし、例外的なデータだけを持っているレコードを調べたい場合などにもこの機能は便利だ。
chrisbra/csv.vimでは絞り込みのキーとなるセルにカーソルを置いた状態で、次のキーで絞り込みを実施していくことができる。
| フィルタキー | 内容 |
|---|---|
| ↩️ | 現在の列と一致しない全ての行を動的に折り畳む |
| Space | 現在の列と一致する全ての行を動的に折り畳む |
| BS | 動的フィルタから最後のアイテムを削除 |
重ね合わせたフィルタは「BackSpace」キーで削除していくことができる。「Enter」キーと「スペース」キーがフィルタの重ね合わせ、「BackSpace」キーが最も新しいフィルタから削除していくキーだ。
「Enter」キーでセルの値以外の値を持つレコードが非表示となり、「スペース」キーでセルの値を持つレコードが非表示となる。chrisbra/csv.vimを使い出した最初のころは「Enter」キーや「スペース」キーでフィルタが発動するため、誤って押したときにいきなりデータが非表示になって面食らったことがあるのではないだろうか。慣れるとこれは便利な機能なので、ぜひ使ってみていただきたい。
「Enter」キーで絞り込み
例えば次のスクリーンショットでは、カーソルを3列目で「千代田区」の値に置いてある。この状態で「Enter」キーを押す。
これで次のように3列目が「千代田区」以外のレコード(行)が全て非表示になる。
さらにフィルタを重ねていこう。今度は4列目の値が「パシフィックセンチュリーブ」にカーソルを置き、この状態で「Enter」キーを押す。
「パシフィックセンチュリーブ」で絞り込みが行われ、さらに表示が限定されたことを確認できる。
今度は逆にフィルタを解除していく。「BackSpace」キーを押す。
次のように「パシフィックセンチュリーブ」のフィルタが解除され、非表示から表示に戻ったことがわかる。
さらに「BackSpace」キーを押す。
次のように「千代田区」フィルタが解除され、ほかの行も表示されることを確認できる。
このように、「Enter」キーと「BackSpace」キーでフィルタの追加と解除を行っていく、というのが基本的な使い方だ。
「スペース」キーで絞り込み
「スペース」キーでは選択した値を含むレコード(列)が非表示になる。「Enter」キーと「スペース」キーで非表示になる対象が逆というわけだ。例えば次のスクリーンショットでは「千代田区」でスペースキーを押している。
今度は「千代田区」を持つレコード(行)が非表示になったことを確認できる。
「中央区」を選んで「スペース」キーを押せば、さらにそのデータを含むレコードが非表示になる。
「Enter」キーと「スペース」キーでそれぞれ非表示になる対象が異なるので、必要に応じて使い分ける。と言っても、どちらのキーでどちらが非表示になるかを覚えておく必要はなく、その場で実行して期待していないほうが非表示になったら「BackSpace」キーでフィルタを解除してもう一方のキーを押せばよい。
データ探しにとっても便利なフィルタ機能
フィルタはMicrosoft Excelのような主要なスプレッドシートアプリケーションは当然のように提供している機能だ。使っていないユーザーも多いかもしれないが、とても便利なのでぜひ一度試してみていただきたい。
chrisbra/csv.vimの提供する機能はスプレッドシートアプリケーションのように包括的なものではないが、これまで取り上げてきたように必要最低限の機能は提供している。これらの機能を使いこなせば、かなりの作業ができることはわかっていただけたのではないだろうか。CSVデータを扱うことが多いのであれば、ぜひ使ってみてほしい。
本連載で使っている~/.vimrcファイル
本連載で使っている設定ファイル(~/.vimrc)は以下の通りだ。
"dein Scripts=============================
if &compatible
set nocompatible " Be iMproved
endif
" Required:
set runtimepath+=~/.cache/dein/./repos/github.com/Shougo/dein.vim
" Required:
if dein#load_state('~/.cache/dein/.')
call dein#begin('~/.cache/dein/.')
" Let dein manage dein
" Required:
call dein#add('~/.cache/dein/./repos/github.com/Shougo/dein.vim')
" Add or remove your plugins here
call dein#add('junegunn/seoul256.vim')
call dein#add('vim-airline/vim-airline')
call dein#add('vim-airline/vim-airline-themes')
call dein#add('preservim/nerdtree')
call dein#add('tpope/vim-commentary')
call dein#add('tpope/vim-fugitive')
call dein#add('fholgado/minibufexpl.vim')
call dein#add('dense-analysis/ale')
call dein#add('junegunn/fzf', {'build': './install --all'})
call dein#add('junegunn/fzf.vim')
call dein#add('sheerun/vim-polyglot')
" Required:
call dein#end()
call dein#save_state()
endif
" Required:
filetype plugin indent on
syntax enable
" If you want to install not installed plugins on startup.
if dein#check_install()
call dein#install()
endif
" seoul256
let g:seoul256_background = 233
colo seoul256
" vim-airline
let g:airline_powerline_fonts = 1
let g:airline_theme = 'molokai'
" NERDTree
" <C-o> open NERDTree
nnoremap <silent> <C-o> :NERDTreeToggle<CR>
" minibufexpl
nnoremap <silent> bn :<C-u>:bnext<CR>
nnoremap <silent> b1 :<C-u>:b1<CR>
nnoremap <silent> b2 :<C-u>:b2<CR>
nnoremap <silent> b3 :<C-u>:b3<CR>
nnoremap <silent> b4 :<C-u>:b4<CR>
nnoremap <silent> b5 :<C-u>:b5<CR>
nnoremap <silent> b6 :<C-u>:b6<CR>
nnoremap <silent> b7 :<C-u>:b7<CR>
nnoremap <silent> b8 :<C-u>:b8<CR>
nnoremap <silent> b9 :<C-u>:b9<CR>
" fzf
nnoremap <silent> fzf :Files<CR>
nnoremap <silent> ls :Buffers<CR>
"End dein Scripts=========================
set number
syntax on
set whichwrap=b,s,[,],<,>,~,h,l
set cursorline
set incsearch
set hlsearch
set ignorecase
付録 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 列番号 | 指定した列内の最大値を出力 |
| CSVMinCol | 現在の列内の最小値を出力 |
| CSVMinCol 列番号 | 指定した列内の最小値を出力 |
| 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を指定するとヘッダとしてのハイライトが行われなくなる |











