## 事象 1. ターミナルA([[Ghostty]]) と ターミナルZ([[Ghostty]]+[[herdr]])を開く 2. 両方のターミナルで[[Neovim]]の特定ファイルを起動 3. ターミナルAでファイルを編集する 4. ターミナルZをアクティブにする ファイルが最新化されてほしいが最新化されない。 - [[herdr]]内でペインを切り替えると更新される - 素の[[Ghostty]]([[herdr]]なし)であれば、設定なしでもフォーカス復帰時に更新される [[📝Zellijの中で起動したNeovimは他でファイル変更されてもフォーカス戻したあとに自動でバッファが更新されない|Zellijで発生した同事象]]の[[herdr]]版。 ### 環境 | 対象 | バージョン | | ----------- | ---------- | | [[macOS]] | 26.5.2 | | [[Ghostty]] | 1.3.1 | | [[herdr]] | 0.7.3 | | [[Neovim]] | 0.12.3 | ## 原因 [[herdr]]が外側ターミナルのフォーカス復帰をペインへ転送しないため、[[Neovim]]に[[FocusGained (Vim)|FocusGained]]の[[イベント (Neovim)|イベント]]が届かず、[[Neovim]]本体のタイムスタンプチェックが実行されないから。 前提として、[[Neovim]]はユーザー設定がなくても本体がフォーカス復帰時に `check_timestamps()` を実行し、`autoread`(デフォルトON)によりバッファを自動リロードする(release-0.12の `src/nvim/autocmd.c` にある `do_autocmd_focusgained()`)。 ```c apply_autocmds((gained ? EVENT_FOCUSGAINED : EVENT_FOCUSLOST), ...); // When activated: Check if any file was modified outside of Vim. if (gained && last_time + (Timestamp)2000 < os_now()) { check_timestamps(true); last_time = os_now(); } ``` つまり[[ファイルが変更されたら自動で再読み込み (Neovim)|checktimeのautocmd設定]]は通常のターミナルでは不要。しかし、この処理が発火するにはターミナルからfocus-inシーケンス(`ESC[I`)が届く必要がある。 [[herdr]]のソース(v0.7.3時点)を確認すると: - ペインへのフォーカスイベント転送機構(mode 1004、`ESC[I`/`ESC[O`)自体は実装されている。`src/app/api.rs` の `sync_focus_events()` が、**herdr内でフォーカスペインが切り替わったとき**に送信する(ペイン切替で更新されるのはこのため) - 一方、**外側ターミナルのフォーカス復帰**(`OuterFocusGained`)は `src/app/mod.rs` で `OuterFocusGained | OuterFocusLost => {}` と明示的に無視されており、フォーカス中ペインのPTYへは転送されない(再描画や通知の制御にのみ使用) [[Zellij]]の「フォーカスイベント処理の不整合(不具合)」とは異なり、herdrは**外側→ペインへのフォーカス転送が未実装**という整理になる。tmuxの `focus-events on` に相当する機能がない状態。 ### 2026-07-17 追記 issueが作成されていた。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" /> <span class="link-card-v2-site-name">GitHub</span> </div> <div class="link-card-v2-title"> focus events not forwarded -> Neovim `autoload` not triggering · Issue #1337 · ogulcancelik/herdr </div> <div class="link-card-v2-content"> Is this a reproducible bug? I confirm this is a reproducible bug, not a feature request, idea, question, contrib ... </div> <img class="link-card-v2-image" src="https://opengraph.githubassets.com/310b568f97800bb074df324b177b97ea816cc7a132e29d9bedbd57c8ba77be94/ogulcancelik/herdr/issues/1337" /> <a href="https://github.com/ogulcancelik/herdr/issues/1337"></a> </div> ## 解決方法 [[herdr]] v0.7.4以上にバージョンアップする。 > [!info] なお、[[Neovim]] 0.13(現nightly)では `autoread` がファイルシステムウォッチャーベースになり、[[FocusGained (Vim)|FocusGained]]に依存せず外部変更をリアルタイム検知するため、herdrの対応を待たずとも根本解決する見込み。 > > [feat(autoread): use file watchers for real-time change detection by OleksandrChekhovskyi · Pull Request #37971 · neovim/neovim](https://github.com/neovim/neovim/pull/37971) で対応はマージ済。 ## 参考 - [do_autocmd_focusgained() - neovim/neovim (release-0.12) src/nvim/autocmd.c](https://github.com/neovim/neovim/blob/release-0.12/src/nvim/autocmd.c) - [feat(autoread): use file watchers for real-time change detection · PR #37971 · neovim/neovim](https://github.com/neovim/neovim/pull/37971) - [ogulcancelik/herdr - GitHub](https://github.com/ogulcancelik/herdr)