Neovimで変更履歴をツリー表示(undotree.vim) @Windows10
※この記事は、dein.vimによりプラグイン管理を行うことを前提で説明します。
まだdein.vimを入れてない人はいつぞやの記事などを参考に入れて下さいまし。
確認環境
Spec / Version | |
---|---|
PC | mouse LB-J770X-SH2 |
OS | Windows10 Home (ver 1607 build 14393.693) |
neovim | v0.2.0-621-ge901868f |
neovim-qt | v0.2.4 |
変更履歴をツリー表示 undotree.vim
vimは変更履歴をundotreeとして保存しています。もちろんNeovimでも。
それを見やすい形でウィンドウに表示してくれるのが、undotree.vimというプラグインです。
そのウィンドウから任意の変更ポイントを選択してUndo/Redoが出来るようになります。
変更して、undoして、そこからまた変更すると、変更履歴が枝分かれします。
そういう枝分かれしたパラレルワールドを行き来したい場合は便利です。
一本道の履歴であれば、undotreeは表示せずに普通にuとC-rでUndo/Redoすれば良いかと。
もし今後、任意の変更ポイントにコメントが残せる機能が追加されれば、簡易的なバージョン管理システムとしても使えちゃいそうな勢いです。
とまぁそんな妄想は置いといて、どんなプラグインかご紹介します。
使用イメージ
undotree起動時の画面はこちらです。
左側のウィンドウがundotreeです。
上の方はヘルプを表示中でして、通常は表示されません。
下の方の枝っぽいのが実際のundotreeの表示になります。
赤字でs
と表示されているのはファイルのセーブポイントです。大文字のS
は最新のセーブポイントです。
下側のウィンドウに一つ前の変更履歴とのdiffが表示されます。設定で非表示にも出来ます。
ウィンドウのレイアウト(undotreeを表示位置とdiffウィンドウの幅)は4パターン用意されています。
右側のウィンドウで紫にハイライトされている箇所は、直前のUndo/Redoによって変更された箇所です。
undotreeを表示している間はハイライトされます。ハイライトの無効設定も可能です。
dein(*.tomlファイル)の設定
参考までに私の設定サンプルです。
[[plugins]] repo = 'mbbill/undotree' hook_add = ''' if has("persistent_undo") " ファイルを閉じてもUndo記録を残す set undodir=$XDG_CACHE_HOME/undodir/ set undofile endif let g:undotree_WindowLayout = 2 " undotreeは左側/diffは下にウィンドウ幅で表示 let g:undotree_ShortIndicators = 1 " 時間単位は短く表示 let g:undotree_SplitWidth = 30 " undotreeのウィンドウ幅 let g:undotree_SetFocusWhenToggle = 1 " undotreeを開いたらフォーカスする "let g:undotree_DiffAutoOpen = 0 " diffウィンドウは起動時無効 let g:undotree_DiffpanelHeight = 8 " diffウィンドウの行数 "let g:undotree_HighlightChangedText = 0 " 変更箇所のハイライト無効 " undotreeをトグル表示 noremap <Leader>u :UndotreeToggle<CR> " undotreeバッファ内でのキーバインド設定 function! g:Undotree_CustomMap() map <silent> <buffer> <Esc> q map <silent> <buffer> h ? endfunction '''
ウィンドウのレイアウトはg:undotree_WindowLayout
に1〜4を指定してお好きなものを選んで下さいな。
備考
操作キーは使用イメージ画像のundotreeウィンドウにヘルプを表示しているので参考にして下さい。
よく使う操作は下あたりかなと。
操作キー | 操作内容 |
---|---|
u / C-r | Undo / Redo |
< / > | 1つ前のセーブポイントへ移動 / 1つ次のセーブポイントへ移動 |
j / k | 変更ポイントの移動(カーソル移動) |
CR(Enter) | カーソル位置の履歴まで戻る |
C | 変更履歴のクリア ※取扱注意 |
q | undotreeを閉じる |
<
キーと>
キーでセーブポイントへワープ出来ちゃいます。
出来ちゃうはずなのですが、私の環境では<
キーが効きませんでした。なして。。。
ついでにC
キーを押した後、何も画面表示に変化がなく固まったような状態になりました。
ソースを見た感じだとYes/Noでホントにクリアするか聞いているみたいです。
こちらはy
キーを続けて押せば無事履歴がクリアできました。
まとめ
今回はNeovimの変更履歴をundotreeウィンドウから自由に辿れるようになりました。
これで数秒~数分前へタイムスリップし、パラレルワールドを行き来することが出来ます。
gitなど使うのも躊躇しちゃうような、ちょっとしたお試し修正などでは活躍するかもですね。
おしまい。