連載 本記事は複数記事の連載記事の1つです。 プラグイン プラグインは必ず入れる必要はありませんが、何か困ったとき「プラグインってどんな物があって何が出来るようになるのか」を大体知っていないと困ります…
連載
本記事は複数記事の連載記事の1つです。
ファイルエクスプローラーとは
ディレクトリツリーからファイルを開くアレです。
Neovimには標準でファイルエクスプローラーが付いていて :e
で開くことが出来ます。
ただし使いやすいとは言えず、サーバーなどのまっさらなVimを触る時に使う程度でしょう。
ファイルエクスプローラープラグインは色々あり、今回は多機能で導入も簡単な Fern
を紹介します。
Fernは操作性に拘っているので使いやすく、非同期で処理されるので待ちもなく快適でオススメです。
Fernをインストールする
deinを使ってインストールします。
[[plugins]] repo = 'lambdalisue/fern.vim'
二つのスタイル
Neovimのファイルエクスプローラーは大きく Split Window
と Project Drawer
の二種類があります。
Split Window
現在カーソルがあるウィンドウ全体でファイルエクスプローラーを開きます。
選択したファイルは同ウィンドウで開かれ、最終的にファイルエクスプローラーは消えます。
つまり、 常にファイルエクスプローラーは表示せずに必要なときだけ表示する
方式です。
コーディングするためのウィンドウ領域を広く取れるので、常に表示されていなくても良い方やノートPCなどディスプレイが小さい場合などに有効です。
欠点は、ファイルエクスプローラーを開いたときに前回の状態が保存されたりせず、現在のカレントディレクトリかウィンドウで開いているファイルパスのツリーが開いた状態で開きます。
主にfzfなどファイル名で検索するファジーファインダー系のプラグインで開く場合は問題ではないですが、ファイルエクスプローラーで点々としたファイルを開くやり方の人は手間に感じるでしょう。
コマンドラインモードに入力して試してみましょう。
ドットは相対パスの現在の位置を表しています。
起点となるパスはカレントディレクトリで確認するにはコマンドラインモードに :pwd
で確認できます。
カレントディレクトリのツリーが開きます。
:Fern .
現在のウィンドウで開いているファイルの一つ上のディレクトリ以下のツリーが開きます。
%
は現在のファイルパス、 :h
は一つ上を表します。
:Fern %:h
カレントディレクトリのツリーを開きつつ、
現在のウィンドウで開いているファイルまでのツリーを開き、
現在のウィンドウで開いているファイルにカーソルが当たった状態で開きます。
大半の方が使うのがこれでしょう。
:Fern . -reveal=%
Project Drawer
画面上に常にファイルエクスプローラーを表示され続けます。
IDEでは標準のスタイルなので見覚えのある方も多いでしょう。
ウィンドウ領域を取りますが、開いたツリーの状態はずっとそのままです。
コマンドに -drawer
オプションを付けることでドロワーモードとなり、ファイルエクスプローラーはファイルを開いたあとも消えません。
:Fern . -reveal=% -drawer
キーマップ設定例
nnoremap <leader>e <cmd>Fern . -reveal=% -drawer<cr>
キーマップを確認する
実行可能なアクション・割り当てられているキー設定は、Fernから確認できます。
Fernウィンドウ内で a
キーを押して action:
入力状態にし、 help
と入れることで実行可能なアクションと、その割り当てキーが確認できます。
キーマップをカスタマイズする
Fern実行時だけキーマップを有効にするために、autocmdでFernEvent時に設定するようにします。
また、一部のキーだけを変更することは出来ず、 g:fern#disable_default_mappings
を 1
にセットしてデフォルトマッピングを無効にする必要があります。
hook_add = ''' function! FernInit() abort nmap <buffer> v <Plug>(fern-action-open:side) nmap <buffer> M <Plug>(fern-action-new-dir) nmap <buffer> ! <Plug>(fern-action-hidden:toggle) nmap <buffer> - <Plug>(fern-action-mark:toggle) vmap <buffer> - <Plug>(fern-action-mark:toggle) nmap <buffer> C <Plug>(fern-action-clipboard-copy) nmap <buffer> X <Plug>(fern-action-clipboard-move) nmap <buffer> P <Plug>(fern-action-clipboard-paste) nmap <buffer> h <Plug>(fern-action-collapse) nmap <buffer> c <Plug>(fern-action-copy) nmap <buffer> <leader>h <Plug>(fern-action-leave) nmap <buffer> m <Plug>(fern-action-move) nmap <buffer> N <Plug>(fern-action-new-file) nmap <buffer> <cr> <Plug>(fern-action-open-or-enter) nmap <buffer> l <Plug>(fern-action-open-or-expand) nmap <buffer> s <Plug>(fern-action-open:select) nmap <buffer> t <Plug>(fern-action-open:tabedit) nmap <buffer> <C-l> <Plug>(fern-action-reload) nmap <buffer> r <Plug>(fern-action-rename) nmap <buffer> i <Plug>(fern-action-reveal) nmap <buffer> D <Plug>(fern-action-trash) nmap <buffer> y <Plug>(fern-action-yank) nmap <buffer> gr <Plug>(fern-action-grep) nmap <buffer> d <Plug>(fern-action-remove) nmap <buffer> B <Plug>(fern-action-save-as-bookmark) nmap <buffer> cd <Plug>(fern-action-tcd) nmap <buffer> <C-h> <C-w>h nmap <buffer> <C-l> <C-w>l endfunction augroup FernEvents autocmd! autocmd FileType fern call FernInit() augroup END let g:fern#disable_default_mappings = 1 ```
Fernを拡張する
Fernは別途Fern用のプラグインをインストールすることで、アイコン表示やブックマークなどの機能を追加することが出来ます。
アイコンを表示する
ディレクトリやファイルの拡張子に応じたアイコンを表示するためのプラグインです。
入れるとこのように表示されて見やすくなります。
Nerdフォントというアイコンを含むフォントを使用する必要があります。
おすすめは白源です。
[[plugins]] repo = 'lambdalisue/nerdfont.vim' [[plugins]] repo = 'lambdalisue/fern-renderer-nerdfont.vim' hook_add = ''' let g:fern#renderer = 'nerdfont' ''' [[plugins]] repo = 'lambdalisue/glyph-palette.vim' hook_add = ''' augroup my-glyph-palette autocmd! * autocmd FileType fern call glyph_palette#apply() autocmd FileType nerdtree,startify call glyph_palette#apply() augroup END '''
Gitのステータスを表示する
lambdalisue/fern-git-status.vimを入れるだけでファイルごとにGitの状態を表示できます。
[[plugins]] repo = 'lambdalisue/fern-git-status.vim'
ブックマーク機能を追加する
lambdalisue/fern-bookmark.vimを追加することでプロジェクトごとのディレクトリや任意のファイルをブックマークできるようになります。
ブックマークはディレクトリを作ってツリー構造で管理できるので、数が多くても整理できます。
その他
fern-vim-pluginに全ての拡張プラグインがリストされています。
SSH経由でリモート接続できるプラグインなど、人によってはハマるプラグインが多くあるので目を通してみましょう。
コメントを書く