Open6
vimからrake aするとディレクトリが削除される現象
-
Shiikaの開発時は、
rake a
というコマンドでexamples/a.skをビルドして実行するのを繰り返す - 実行のためにtmuxウィンドウを切り替えるのは面倒→quickrunでできないか?
- quickrunからrake aを実行するようにしたら大変快適になった
しかし…
- 時々、quickrunでrakeを起動したあと、ファイルが削除される現象が発生
例 (Dが削除されたファイル)
Changes to be committed:
(no files)
Changes not staged for commit:
D lib/shiika_core/src/names/class_name.rs
D lib/shiika_core/src/names/const_name.rs
D lib/shiika_core/src/names/method_name.rs
D lib/shiika_core/src/names/module_name.rs
D lib/shiika_core/src/names/namespace.rs
再現した環境
OS:
macOS 10.15.7
vim:
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Jul 04 2021 13:54:08)
macOS 版 - x86_64
適用済パッチ: 1-3100
Compiled by Homebrew
vim-quickrun:
commit 4f2f5628098efba5db2ae152dc3ac0d9b310659a (HEAD -> master, origin/master, origin/HEAD)
Author: thinca <thinca@gmail.com>
Date: Sun Nov 7 21:15:11 2021 +0900
Improve runner/terminal
Reuse the last window.
他プラグインが干渉している?
-
xolox/vim-session
,907th/vim-auto-save
あたりが干渉しているかもしれないのでオフにして試してみた - 最初は再現していたが、最終的にもとの.vimrcでも再現しなくなった
- →セッション状態に依存?
再現するセッションを保存
- .vimsessionsに保存されたセッションで試してみる(vim -S foo.vim)
"lib/shiika_core/src/names" はディレクトリです
- おや…?
-
edit lib/shiika_core/src/names
という行がある - そういえばnetrwでこのディレクトリを開いていた
- netrwでディレクトリを開いていることが必要条件?
- 最初はvim-sessionを有効にしていたので、当該ディレクトリを開いていたはず
- vim-sessionを無効にしたときから、当該ディレクトリを開かないので発生しなくなっていたのかも
新規セッションで実験
- netrwで
lib/shiika_core/src/names
を開いてからquickrun- 再現せず
- :tabnでタブを作り、netrwで
lib/shiika_core/src/names
を開いてからもとのタブに戻ってquickrun- 再現した
ということは
- vim起動
-
tabe lib/shiika_core/src/names
でnetrw起動 - もとのタブに戻り、適当な.rsを開いてquickrun実行
で再現するか?
うーん、しないこともあるな、、
いちおう、rakeタスクをp :hello
だけにしても再現することを確認した。
ああーわかったかも
- lib/shiika_core/src/names.rsを開く
- quickrunする
- lib/shiika_core/src/namesが削除される
こういうことか。いろんなディレクトリで発生してたのは、fooとfoo.rsが同時に存在するパターンが(Rustの規約により)いろんなとこにあったからか。
hook/sweep/filesを空にすることで解決したっぽい。
let g:quickrun_config['rust'] = {
\ 'exec': 'RUST_BACKTRACE=1 rake a',
\ 'hook/sweep/files': [],
\}