1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Skim + Neovim】逆方向検索後にエディタへフォーカスが移らない件

1
Posted at

(本記事は Claude Code による執筆です.同じ環境でも同様の動作を保証しません.自身の責任のもとで実行してください)

環境

ツール バージョン等
OS macOS
ターミナル WezTerm
エディタ Neovim + VimTeX
PDF ビューア Skim
パッケージ管理 Homebrew

問題

  • LaTeX の執筆中,Skim 上で ⌘+Shift+Click すると,対応するソースファイルの行に Neovim のカーソルがジャンプする(逆方向検索)
  • しかし,ウィンドウのフォーカスが Skim のままになってしまい,そのまま編集を続けるには手動で WezTerm をクリックする必要があった

TL;DR

  • Skim の逆方向検索コマンドに osascript -e 'tell application "WezTerm" to activate'を追加したラッパースクリプトを作ることで解決
  • nvim --headless はバックグラウンドプロセスなので,明示的に指示しないと macOS はフォーカスを切り替えてくれない

よく見かける設定

Skim の環境設定 → 同期 → PDF-TeX 同期サポート でよく紹介される設定は以下の通り。

  • プリセット: カスタム
  • コマンド: /opt/homebrew/bin/nvim(あるいは nvim)
  • 引数: --headless -c "VimtexInverseSearch %line '%file'"

この設定ではカーソルジャンプは正常に動作するが,フォーカスは Skim のままになる。

原因

  • nvim --headless はウィンドウを持たないバックグラウンドプロセスとして起動する。Skim が呼び出すのはこの無音の裏側プロセスであり,macOS はフォーカスを切り替える理由がない
  • カーソルジャンプは Neovim のサーバー機能を通じて正しく届くが,WezTerm ウィンドウを前面に持ってくる指示が誰からも出ていないため,フォーカスが Skim に留まり続ける

解決策:ラッパースクリプトを作成する

nvim コマンドの実行後に AppleScript で WezTerm を明示的にアクティベートするスクリプトを作成する。

1. スクリプトを作成する

mkdir -p ~/.local/bin
cat > ~/.local/bin/skim-inverse-search.sh << 'EOF'
#!/bin/bash
/opt/homebrew/bin/nvim --headless -c "VimtexInverseSearch $1 '$2'"
osascript -e 'tell application "WezTerm" to activate'
EOF
chmod +x ~/.local/bin/skim-inverse-search.sh

2. Skim の設定を変更する

Skim の環境設定 → 同期 → PDF-TeX 同期サポート を以下のように変更する。

  • プリセット: カスタム
  • コマンド: /Users/<ユーザー名>/.local/bin/skim-inverse-search.sh
  • 引数: %line '%file'

動作確認

Skim 上で ⌘+Shift+Click すると,Neovim のカーソルが対応行にジャンプし,WezTerm ウィンドウが前面に移動してくる。

まとめ

修正前 修正後
カーソルジャンプ ✅ ✅
WezTerm にフォーカス ❌ ✅

nvim --headless はバックグラウンド処理のためフォーカスを奪わない。osascript
による明示的なウィンドウアクティベーションをラッパースクリプトに追加することで解決できる。

Note: osascript は macOS 専用の方法であり,アプリ名の文字列でウィンドウを操作するため本質的にはやや脆弱です。ただし,macOS でアプリフォーカスを外部から制御する現実的な手段はこれが標準であるため,割り切って使っています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?