最終的にはADRに移動する可能性が高いかも。 ## 経緯 [[Neovim]]のようなウィンドウ・バッファ管理に近いかたちを実現できないかという話。 [[Sliding Panes]]はオフにして、[[タブグループ (Obsidian)|タブグループ]]主体の戦略を検討する。 以前のADRは以下。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" /> <span class="link-card-v2-site-name">Minerva</span> </div> <div class="link-card-v2-title"> 💿OBS-0002 Tab Stacksを使う </div> <div class="link-card-v2-content">Obsidian v0.16でTabとTab Stacksの概念が追加された。これにより、今までとは操作性が大きく変わるため、この機会にObsidian利用時の戦略やキーバインドを見直そうと思った。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/obs-adr.webp" /> <a data-href="💿OBS-0002 Tab Stacksを使う" class="internal-link"></a> </div> %%[[💿OBS-0002 Tab Stacksを使う]]%% ## タスク ### キーマップ変更 #### Obsidian Core | キー | コマンド名 | 用途 | | --------- | ------------------------------------ | ------------ | | `<C-n>` | Create new note | 新しいタブでノートを作成 | | `<C-]>` | Shukuchi: Open link | 現在のタブでリンクを開く | | `<C-S-n>` | Create note to the right | 右に分割してノートを作成 | | `<C-S-]>` | Shukuchi: Open link in new tab group | 右に分割してリンクを開く | > [!hint] > `Shukuchi:` は [[🦉Shukuchi]] のコマンド。 #### obsidian.vimrc > [!attention] > - [[タブグループ (Obsidian)|タブグループ]]は文字数をくうので[[タブグループ (Obsidian)|ペイン]]という昔の表現を用いる > - `<C-w>` という表現を書いているが実際は `<M-w>` としている | キー | コマンドID | 用途 | | ---------- | ---------------------------------------------- | -------------- | | `<C-w>v` | `workspace:split-vertical` | 右に分割してペインを開く | | `<C-w>s` | `workspace:split-horizontal` | 下に分割してペインを開く | | `<C-w>l` | `editor:focus-right` | 右のペインへ移動 | | `<C-w>h` | `editor:focus-left` | 左のペインへ移動 | | `<C-w>j` | `editor:focus-bottom` | 下のペインへ移動 | | `<C-w>k` | `editor:focus-top` | 上のペインへ移動 | | `<Space>l` | `workspace:next-tab` | 右のタブへ移動 | | `<Space>h` | `workspace:previous-tab` | 左のタブへ移動 | | `<Space>w` | `workspace:close-others-tab-group` | ペイン内で他タブを全て閉じる | | `<Space>y` | `carnelian:carnelian_open-active-file-in-yazi` | [[Yazi]]で開く | | `<Space>g` | `carnelian:carnelian_open-vault-in-lazygit` | [[Lazygit]]で開く | | `<Space>t` | `workspace:undo-close-pane` | 最後に閉じたタブを戻す | | `<Space>,` | `carnelian:carnelian_open-vault-in-terminal` | rootでターミナル開く | | exコマンド | コマンドID | 用途 | | ------ | --------------------------- | ------- | | `:q` | `workspace:close-tab-group` | ペインを閉じる | #### 🦉Another Quick Switcherのダイアログコマンド | キー | コマンド名 | 用途 | | ------------- | ----------------------------- | ---------------- | | `Enter` | open | 現在のタブで開く | | `Shift Enter` | open in new tab | 新しいタブで開く | | `Mod s` | open in new pane (horizontal) | 下に開く | | `Mod Enter` | open in new pane (vertical) | 右に開く | > [!hint] > Dialog Commandsについては [README](https://github.com/tadashi-aikawa/obsidian-another-quick-switcher/blob/4f24a05c98c94d92e260c0b78ac025371c74f5d5/README.md?plain=1#L305) を参照 ## タブグループのメリデメ [[タブ (Obsidian)|タブ]]と比較した[[タブグループ (Obsidian)|タブグループ]]のメリット・デメリット。 - メリット - 上下左右の分割と相性がいい - [[Neovim]]の[[ウィンドウ (Vim)|ウィンドウ]]に概念が最も近い - [[タブグループ (Obsidian)|タブグループ]]ごとに横幅・縦幅を変更できる - デメリット - 横幅が足りなくても自動でアクティブなものを引き伸ばすことはできない 👑 **[[タブグループ (Obsidian)|タブグループ]]は採用でいいと思う** ## 新しいタブで常に開くについて 必ずしもこれを有効にすべきかは悩ましいが、試してみる価値はある。 - メリット - [[Neovim]]の[[barbar.nvim]]みたいな感じにしやすくていいかも - デメリット - `戻る` を使えなくなるので直感的でないかも - `[N]e` で戻るのはコマンド的にも楽なので惜しい - `[N]q` なのでクリティカルではないけど少し押しにくい (ブラウザでも同じタブだし...) - **[[🦉Carnelian]]でそういうコマンドを作ればいいのでは?** - 戻れたら戻る - 戻れなかったらタブを閉じる - 余計なタブが増えそう - ポジティブに考えると目に見える『履歴』とも捕らえられる ## Prevent duplicate tabs [[🦉Another Quick Switcher]]の設定の1つ。選択したノートが既に[[タブ (Obsidian)|タブ]]として開かれている場合は再利用するというもの。異なる[[タブグループ (Obsidian)|タブグループ]]でも適応される。 [[Neovim]]の場合はそもそもこういう感じ。 - 開かれているファイルは[[バッファ (Vim)|バッファ]]として管理される - それとは別に作業領域として[[ウィンドウ (Vim)|ウィンドウ]]がある - 2つ以上の[[ウィンドウ (Vim)|ウィンドウ]]に同じ[[バッファ (Vim)|バッファ]]の内容を表示できる [[Obsidian]]に適合すると以下のように表現して紐づけることもできる。 - 開かれているファイルは[[バッファ (Vim)|バッファ]]として管理されているが **見えない** - それとは別に作業領域として[[タブグループ (Obsidian)|タブグループ]]がある - 2つ以上の[[タブグループ (Obsidian)|タブグループ]]に同じ[[バッファ (Vim)|バッファ]]の内容を表示できる - **[[タブ (Obsidian)|タブ]]は[[タブグループ (Obsidian)|タブグループ]]ごとの履歴管理みたいなものである** ゆえに **`Prevent duplicate tabs` は有効にしないほうがいい。** [[タブグループ (Obsidian)|タブグループ]]が移動するというのは直感的ではない。 ### 同一[[タブグループ (Obsidian)|タブグループ]]の場合のみ適応は? どちらでもOK。[[タブ (Obsidian)|タブ]]が[[タブグループ (Obsidian)|タブグループ]]の履歴管理であれば矛盾はしない。実用性はさておき、履歴管理という側面だと新しい[[タブ (Obsidian)|タブ]]で開くほうがシンプルな気はする。 **これも導入するメリットはそこまで感じない。見送り。** ## [[タブ (Vim)|タブ]]に関する機能 [[Vim]]の[[タブ (Vim)|タブ]]相当の機能をどうするか。[[ワークスペース (Obsidian)|ワークスペース]]の概念を当てはめれば似たようなことはできる。問題は **それが本当に必要な機能なのか** ということ。 ## 作業と思考の流れをもう一度整理してみる 前提として **[[Neovim]]の[[ウィンドウ (Vim)|ウィンドウ]]、[[バッファ (Vim)|バッファ]]管理が理想である** と仮定して今回の作業に入ったが、本当にそうなのか? それと異なる管理のものに[[Google Chrome]]のタブ管理がある。[[Google Chrome]]の場合は以下のようなイメージ。 - タブの中で新しい作業をする - 今のページから分岐する形で作業するとき = その作業後に戻って来る予定があるとき - 新しいタブでページを開いて作業を続ける - ページ内リンクの意味を確認する時など - [[Obsidian]]でもノート内のリンクの意味を確認するときに同じシチュエーション - 新しいタブではなくて分割したタブで確認することが多いかも? - Neovimも同じ - Neovimはタブの可視性が悪いからそうせざる得ない側面もある - あとはコードの呼び出し先を見ているので、呼び出し元が気になることも多い - Google Chromeの場合は元ページと往復することはそこまでない - Obsidianはどう? **[[Obsidian]]の用語にあわせて** ツールごとに整理 - **タブを分けたいとき** - [[Neovim]] ([[バッファ (Vim)|バッファ]]) - 新しいファイルを開く ([[snacks.nvim]]、コードジャンプ etc) - [[Google Chrome]] (タブ) - 作業フローの分岐が発生するとき - 別のタスクを行うとき - もしかしたらまた使うかも情報を残したいとき - [[Obsidian]] - **タブグループで分割したいとき** - [[Neovim]] ([[ウィンドウ (Vim)|ウィンドウ]]) - 異なるファイルを比較して作業をしたいとき - 作業フローの分岐が発生するとき - [[Google Chrome]] (できない) - (できるなら) 異なるファイルを比較して作業をしたいとき - 新しいウィンドウを開いて並べることが多い - [[Obsidian]] - ****[[ワークスペース (Obsidian)|ワークスペース]]ごと切り替えたいとき - [[Neovim]] ([[タブ (Vim)|タブ]]) - 今の[[タブ (Vim)|タブ]]が領域いっぱい かつ 閉じれる[[ウィンドウ (Vim)|ウィンドウ]]がないとき - 込み入ったコードリーディングのとき - コードライティング中に、別軸でリーディングしたいとき - 作業のコンテキストが明確に異なることを同じインスタンスで実施したいとき - [[Google Chrome]] (ウィンドウ?) - 異なるコンテキストの作業を行いたいとき - 軽微なものなら別タブでOK - [[Obsidian]] ([[ワークスペース (Obsidian)|ワークスペース]]) ## [[ChatGPT]]とたたき後 ### タブの本質的役割 - **通常フロー**では不要(戻る+最近ファイル+タブグループで十分) - **例外フロー**では有効 - A → B → C → D&E … のように枝分かれして “未処理タスク” が積み上がるとき - 一括オープンで「処理待ちキュー」として保持したいとき - → **タブ = 副次的なタスクバッファ** と定義すると矛盾がない ### 運用イメージ - **タブグループ** - 比較や並行作業のための場 - **タブ** - 一時的な「処理待ちノートのスタック/キュー」 - 用が済めば消す - **ワークスペース** - 作業文脈ごとのスナップショット ### メリット - Neovimライクな「バッファ中心+ウィンドウ操作」構造と矛盾しない - Chrome的「タブを並べて保持する」直感も「タスクバッファ」として部分的に救える - 不要時は完全に無視できる(=通常フローがシンプルに保たれる)