通常 Vim や neovim の起動直後は、直接ファイルを開かない限り Vim のロゴとヘルプ、寄付を募るメッセージを表示してから、無題のファイルを開くことになります。
しかし、Vim / neovim を開いて最初に作業する場合、0から何かを書くよりも、前回開いていたファイルやセッションを開くことの方が圧倒的に多いはずです。たぶん。
そうすると、コマンドモードで履歴を辿るか、:e コマンドでファイルを探すことになります。(Netrw/NERDtree/VimFiler/Defxなどのファイラを利用したり、MRUなどを利用するかもしれませんが)
いずれにせよ、作業開始にひと手間取られる問題が発生します。
この記事では、そんな手間を減らしてくれる Vim / neovim にスタート画面を追加するプラグイン「Startify」をご紹介します。
vim-startify
このプラグインを使えば、良い感じにVimでの作業を開始できるようになります。
単純にプラグインを導入するだけでもこんな感じになります。
ダッシュボードというよりは、あくまで作業の開始をサポートしてくれる仕組みと理解した方が良いでしょう。
楽にファイルを開く
ちょっとした上下操作、あるいは番号だけで以前に開いていたファイルが開いて作業ができるのは素敵です。また、セッションなども選択できます。
ヘッダー/フッターのカスタマイズ
vim-statifyを使うと、ヘッダー/フッターに好きなテキストを入れることができます。
これで、オリジナリティが出せるのも魅力の一つです。シンプルが好きな筆者の場合は、こんな感じです。
こちらは次のように設定ファイルに記載します。(罫線は文字数を省略しています。)
let g:startify_custom_header = [ \ '============================================', \ ' VIM - Vi IMproved \ '============================================', \]
配列になっていて、1行1値で記載して表現します。
なお、ググってみるとわかりますが、こちらにはアスキーアートを入れている人も多いようです。
次のサイトでアスキーアートを作成して、ぜひ自分だけのスタートページを作ると良いでしょう。
キーバインド
少ないですが、一応いくつかキーバインドが用意されています。
キー操作 | 実行内容 |
---|---|
e | 空のバッファーを開く(Normal mode) |
i | 空のバッファーを開く(Insert mode) |
q | バッファを閉じる(他にバッファーがなければ Vimを終了する) |
数字 | 表示されている行のファイルを開く |
Enter | 選択したファイルを開く |
b | バッファに開くファイルを選択する(Enter実行時) |
s | 上下分割で開くファイルを選択する(Enter実行時) |
v | 左右分割で開くファイルを選択する(Enter実行時) |
t | タブで開くファイルを選択する(Enter実行時) |
B | バッチモード(バッファに開くファイルを一括選択)のOn/Off |
S | バッチモード(上下分割に開くファイルを一括選択)のOn/Off |
V | バッチモード(左右分割に開くファイルを一括選択)のOn/Off |
T | バッチモード(タブで:開くファイルを一括選択)のOn/Off |
上記のうち、b/s/v/t は表示されたファイルを選択して、Enterを押した時点でそれぞれ開く複数選択の機能となります。
また、それらの大文字でバッチモードに入ることで、より簡単にファイル選択ができるようになります。例えば、1 と 3 と 5 のファイルを水平分割で開く場合のキー操作は次のようになります。
S135 Enter
スタート画面の再表示
作業中にスタート画面を再度表示する方が都合が良いこともあります。その時には、次のコマンドを実行しましょう。
:Startify
カーソルがあるカレントウインドウに、スタート画面が再表示されます。
もちろん、作業中の他のバッファは維持されます。
セッション管理
このプラグインを利用すると、セッション管理も簡単かつ細やかに扱うことが可能になります。
:SLoad | セッションを読み込みます。 |
:SSave :SSave! | セッションを保存します。 |
:SDelete :SDelete! | セッションを削除します。 |
:SClose | セッションを閉じます。 |
:SSave と :SDelete は ! を付与して実行すると、確認なく実行します。
セッションは、Vimであれば $HOME/.vim/session ディレクトリに保存されます。($HOME/.vim/sessionディレクトリは作成しておく必要があります。)
なお、Vim終了時にセッションを自動保存するには、次のように設定しておきます。
let g:startify_session_persistence = 1
設定値
こちらのプラグインでは、下記を設定値として変更できます。
設定値 | データ型 | 内容 |
---|---|---|
g:startify_bookmarks | 配列 | 表示するブックマークを指定します。 |
g:startify_change_to_dir | 1 / 0 | ファイルまたはブックマークを開いたときに、そのディレクトリへ移動します。 |
g:startify_change_to_vcs_root | 1 / 0 | ファイルまたはブックマークを開いたときに、gitなどVCSのルートディレクトリを探して移動します。 |
g:startify_commands | 配列 | 選択時に実行するコマンドのリスト。 |
g:startify_custom_footer | 配列 | スタート画面の下部に表示する内容を設定します。 |
g:startify_custom_header | 配列 | スタート画面の下部に表示する内容を設定します。 |
g:startify_custom_header_quotes | 配列 | 事前定義された引用符が必要な場合に使用します |
g:startify_custom_indices | 配列 | 数字を増やす代わりに、指定した文字列のリストをインデックスとして使用します。 |
g:startify_disable_at_vimenter | 0 / 1 | Vimの起動時に Startify (スタート画面)を実行しません。:Startifyコマンドで呼び出すだけになります。 |
g:startify_enable_special | 0 / 1 | <empty buffer>および<quit>を表示します |
g:startify_enable_unsafe | 0 / 1 | Vimの起動が遅いと感じる場合にのみ、オプションを有効にします。 |
g:startify_files_number | 整数 | リストアップするファイル数 |
g:startify_fortune_use_unicode | 0 / 1 | このオプションを1に設定し、かつ ‘encoding’ が ‘utf-8’ の場合、The fortune header はASCII文字ではなく、代わりにUnicode のBox-drawing character を使用されます。 |
g:startify_list_order | – | このオプションは非推奨です。g:startify_listsを使いましょう。 |
g:startify_lists | 配列 | Startifyが表示するリストの構成をDictionary形式で指定します。 |
g:startify_padding_left | 整数 | 左のパディング(余白)に使用されるスペースの数。 |
g:startify_relative_path | 0 / 1 | ファイルが現在の作業ディレクトリ以下にある場合、相対パスを使用します。それ以外の場合、絶対パスが使用します。 |
g:startify_session_autoload | 0 / 1 | このオプションが有効で、かつ Session.vim を含むディレクトリで Vim を起動した場合、そのセッションを自動的にロードします。それ以外の場合は Startifyバッファの一番上のエントリとして表示します。 |
g:startify_session_before_save | 配列 | セッションを保存する前に実行するコマンドのリストです。 |
g:startify_session_delete_buffers | 0 / 1 | セッションをロードするとき、または閉じるときに全バッファを削除します。 |
g:startify_session_dir | 文字列 | セッションを保存するディレクトリを指定する |
g:startify_session_number | 整数 | 表示するセッションの最大数。 |
g:startify_session_persistence | 0 / 1 | Vim終了時もしくは新しいセッションを読み込む場合、今のセッションを自動保存する |
g:startify_session_remove_lines | 配列 | このリストのパターンのいずれかに合致する行は、 セッションファイルから取り除きます。 |
g:startify_session_savecmds | 配列 | セッションのロード時に実行するコマンドを指定します。 |
g:startify_session_savevars | 配列 | 通常保存するものに加えて、セッションファイルに保存する変数を指定します。 |
g:startify_session_sort | 0 / 1 | セッションをアルファベット順ではなく、変更時刻で並べ替えます。 (セッションファイルが書き込まれた時刻) |
g:startify_skiplist | 配列 | 最近使用したファイルのうち、表示しないファイルのフィルタリングルール。Vim正規表現のリストとして表記します。 |
g:startify_skiplist_server | 配列 | このリストに含まれる名前の Vimサーバーインスタンスである場合、startify バッファを作成しない。 |
g:startify_update_oldfiles | 0 / 1 | :Startifyで表示するよう、ファイル利用履歴を常時更新します。 |
g:startify_use_env | 0 / 1 | パスが長い場合、環境変数を使って表示します。 |
各値の詳しい設置値はこちらを確認しましょう。
設定例
" Most used options
let g:startify_bookmarks = [ {'c': '~/.vimrc'}, '~/.vim/startify.vim']
let g:startify_change_to_dir = 1
let g:startify_change_to_vcs_root = 1
let g:ascii = [
\ ' __',
\ '.--.--.|__|.--------.',
\ '| | || || |',
\ ' \___/ |__||__|__|__|',
\ ''
\]
let g:startify_custom_header = g:ascii + startify#fortune#boxed()
let g:startify_enable_special = 1
let g:startify_lists = [
\ { 'type': 'files', 'header': [' MRU'] },
\ { 'type': 'dir', 'header': [' MRU '. getcwd()] },
\ { 'type': 'sessions', 'header': [' Sessions'] },
\ { 'type': 'bookmarks', 'header': [' Bookmarks'] }
\ ]
let g:startify_skiplist = [
\ '^/tmp',
\ '.swap$',
\ '.tmp$',
\ ]
let g:startify_update_oldfiles = 1
" For Misc options
let g:startify_commands = []
let g:startify_custom_footer = ['-------------------------------------------------------']
let g:startify_disable_at_vimenter = 0
let g:startify_enable_unsafe = 0
let g:startify_files_number = 5
let g:startify_fortune_use_unicode = 0
let g:startify_padding_left = 4
let g:startify_relative_path = 1
let g:startify_use_env = 1
" For Sessions
let g:startify_session_autoload = 1
let g:startify_session_before_save = ['echo "Saving this session ..."']
let g:startify_session_delete_buffers = 0
let g:startify_session_dir = '~/.vim/session'
let g:startify_session_number = 20
let g:startify_session_persistence = 1
let g:startify_session_remove_lines = ['setlocal', 'winheight']
let g:startify_session_savecmds = ['echo "Saved a session."']
let g:startify_session_savevars = [
\ 'g:startify_session_savevars',
\ 'g:startify_session_savecmds',
\ ]
let g:startify_session_sort = 1
このVimプラグインの補足情報
- 利用頻度
- 便利さ
- 導入の簡単さ
関連するVimヘルプ
設定が参考になる記事
Vimの参考書籍
Vimを使うなら、こちらの書籍は一読しておくべきです。もう読みましたか?
Vim/neovim関連の書籍で、もっとも評判が良くてバイブルと呼んでる人もいる一冊です。Vim/neovimのバージョンに依存しない沢山のTips形式で、その表題通りに「思考のスピードで編集」できるようになるノウハウが詰まっています。その高い評価は Amazon のレビューからも分かる通りです。Vimmer なら必ず一度は読んでおいて間違いありません。
こちらもVim関連の書籍で評価が高い書籍の一冊です。vim-jpで見かける上級Vimmer(Vimサポーターズ)の皆様による、Vimを実践で使ったノウハウからプラグイン関連の情報が詰まっています。日本の Vim界隈を知る上でも是非一読しておきたい一冊です。
Vim/neovim の設定ファイルやプラグインなど、Vim script に関するノウハウがいくつも詰まった一冊です。日本で Vim Script をここまで深く解説している唯一の書籍と言えます。Vim力を伸ばしたいと考えるなら、絶対に避けては通れない書籍でしょう。