私は使えるものはなんでも使えという性分なので、Vim (Neovim) でも多くのプラグインを使っています。
普段から使うVimのプラグインの操作は慣れてしまっているが .vimrc (init.vim) を見てもわからず、慣れるまで覚えるのが大変なので特によく使うやつだけ整理しておきます。
今回は下記の操作とプラグインについて。
- Git操作 (vim-fugitive)
- あいまい検索 (fzf.vim)
- ファイラ (NERDTree)
- スニペット (UltiSnips)
Git操作
ステータス画面を開く
:Gstatus
を実行するとステータスウィンドウが開きます。よく使うのでキーバインド設定推奨。
ステータスウィンドウでファイルにカーソルを合わせて下記の操作を行う。
-
- git ステージング切り替え
=
- ウィンドウ内に差分を表示
D
- diffウィンドウを並べて出してくれる
cc
- コミット
(コミットログ書き込みウィンドウが出るので書いたら:wq
とかで保存終了する)
たまに使うやつ
:Gblame
- 行ごとに変更日時とか変更者とかを確認する
:Gread
- 今開いてるファイルを最新のcommitの状態に戻す
あいまい検索
- リポジトリ: junegunn/fzf.vim: fzf vim
よく使うコマンド
:GFiles
- リポジトリ内ファイルパスのあいまい検索
:History
- 履歴からファイルパスあいまい検索
:Buffers
- バッファのあいまい検索
キーバインド設定推奨。
自作コマンド
:Rg
- リポジトリ内でripgrepによる検索(自前で設定)。
検索中に絞り込んでからプレビューウィンドウで周辺コンテキストを見られる。
キーバインド設定推奨。
if executable('rg')
command! -bang -nargs=* Rg
\ call fzf#vim#grep(
\ 'rg --line-number --no-heading '.shellescape(<q-args>), 0,
\ fzf#vim#with_preview({'options': '--exact --reverse --delimiter : --nth 3..'}, 'up:50%:wrap'))
endif
※ripgrepをインストールしておきましょう。
ファイル選択した状態での操作
Ctrl x
- 上下分割で開く
Ctrl v
- 左右分割で開く
Ctrl t
- 新規タブで開く
Enter
- 今のウィンドウで開く
ファイル操作
ファイラを開くコマンドはキーバインド設定推奨
:NERDTreeFind
- 今のファイル選択した状態でファイラを開く
:NERDTreeToggle
- ファイラの開閉切り替え
ファイラのバッファでの操作
m
- 操作メニューを開く
(ファイル追加・削除・移動(リネーム)・コピー、Finderで開く、関連アプリで開く、プレビューで開く、など) o
- 直前のウィンドウで開く
t
T
- 新規タブで開く
i
- 上下分割で開く
s
- 左右分割で開く
I
- ドットファイル表示切り替え
u
U
- 1階層上に移動
C
- カレントディレクトリを切り替え
x
X
- ディレクトリを閉じる
?
- キーバインド表示切り替え
スニペット操作
デフォルトのスニペットとして honza/vim-snippets
あたりも入れておく。
スニペット挿入のキーバインドは設定できる。
" UltiSnips スニペット展開
let g:UltiSnipsExpandTrigger="<c-k>"
" UltiSnips スニペット次の位置に移動
let g:UltiSnipsJumpForwardTrigger="<c-j>"
" UltiSnips スニペット前の位置に戻る
let g:UltiSnipsJumpBackwardTrigger="<c-z>"
自作スニペットの登録方法
~/.vim/snippets
以下に置きたい場合、下記の設定をしておく。
" 自作スニペット
let g:UltiSnipsSnippetsDir = '~/.vim/snippets'
set runtimepath+=~/.vim/snippets
filetypeをファイル名にしたsnippetファイルを作成する。
rubyのスニペットを作る場合、~/.vim/snippets/UltiSnips/ruby.snippets
を作成する。
snippet hello "hello world"
puts 'Hello, ${1:world}'
endsnippet
例としてruby.snippetsにて上記の設定を記述すると、rubyのファイルでhelloと入力し Ctrl k
を押すことでスニペットを展開できる。
おまけ
neovimからプロジェクト間を移動したいという友人のために作った :Ghq
コマンド。
リポジトリをfzfであいまい検索して飛んだ直後にファイル検索が開く。
function! CdFind(dir)
cd `=a:dir`
edit `=a:dir`
GFiles
call feedkeys('i', 'n')
endfunction
if executable('ghq')
command! -bang -nargs=0 Ghq
\ call fzf#run({
\ 'source': 'ghq list --full-path',
\ 'sink': function('CdFind')})
endif