obsidian VIMRC 解析
obsidian 不少可以客製化的 vim 功能。輔助自定義的 vimrc 設定檔,可以解放很多滑鼠的移動。
建議有興趣的朋友記得開啟 vim 模式並安裝 vim support 可以自定義 vimrc 。
以下文章為拋磚引玉一些我自己常使用的功能,並把他中文化解釋給更多有需要或是想要學習 vim in obsidian 的繁體中文用戶。
請先在 obsidian 下載 vim support plugin
https://github.com/jiyee/Obsidian-VimEx
1.使用 H L 來作為文章的最前與最後的跳轉
> 原本是 $(行末)跟 0(行首)
nmap H ^
nmap L $
2. 快速移除搜尋時候的 highlight
> 這邊說明一下,就是使用 vim 模式進行搜尋時,是使用/或是?去進行搜尋。然而,這邊使用 F9 來把搜尋的 highlight 給拿掉
nmap <F9> :nohl
3. 複製到系統剪貼簿
set clipboard=unnamed
4. 綁定 ctrl + a 為切換模式的按鍵
> imap 就是當在 insert 模式的時候的鍵盤,然後指定< C-a> 就是表示是,ctrl + a ,指定給原本的 < Esc > 按鈕
imap <C-a> <Esc>
> nmap 就是當在正常模式的時候,按下 < C-a >,如同按下 i 切換回 insert 輸入模式
nmap <C-a> i
5. 插入下方一行空白 (需要 obsidian-editor-shortcuts 插件)
> 這邊用了一個特殊的方式來綁定 obsidian 的內部指令,可以看到使用了 exmap 這個方式,把 blankBelow 作為命名,去叫出 obcommand ,也就是後面的指令 id : obsidian-editor-shortcuts:insertLineBelow
> nmap &b& :blankBelow 在正常模式指定給下一行一個空白
> 但是,當這個指令連續用兩次的時候,就有個特殊狀況就是,不添加任何東西跳到下一行而已。
exmap blankBelow obcommand obsidian-editor-shortcuts:insertLineBelow
exmap blankAbove obcommand obsidian-editor-shortcuts:insertLineAbove
nmap &a& :blankAbove
nmap &b& :blankBelow
nmap \<CR> &b&&b&
nmap \<BS> &a&&a&
6. 最大化視窗 (需要 pane-relief 插件)
> 可以綁定先按 < C-w > 然後快速按 = 就可以最大化當前視窗了。再按一次可以取消。
exmap toggleMaximizePane obcommand pane-relief:maximize
nmap <C-w>+ :toggleMaximizePane
vmap <C-w>+ :toggleMaximizePane
nmap <C-w>= :toggleMaximizePane
vmap <C-w>= :toggleMaximizePane
7. z=叫出右鍵,也就是 context-menu
exmap contextMenu obcommand editor:context-menu
nmap z= :contextMenu
vmap z= :contextMenu
8. 可以做出如同 vim 當中,按下 o 以及 O 的設定。(需要 obsidian-editor-shortcuts 插件)
> o: 跳到下一行,然後進入輸入模式。所以這邊必須先將跳到下一行,給他一個名字,叫做 blankBelow,然後,並且把 &b& 作為他的代稱,接著使用 nmap 表示在正常模式的時候,按下 o 則是新增下面一行空白,再加上 i ,進入輸入模式。
exmap blankBelow obcommand obsidian-editor-shortcuts:insertLineBelow
exmap blankAbove obcommand obsidian-editor-shortcuts:insertLineAbove
nmap &a& :blankAbove
nmap &b& :blankBelow
nmap o &b&i
nmap O &a&i
9. 設定使用 Y 可以從當前位置,複製到行末。同樣,D 跟 C 也可以,D 為刪除,C 這邊也是
nmap Y y$
10. 此設定能夠達到 vim 中的 x 跟 C 功能
nmap x “dl
nmap C “d$a
”””””””””””””””””””””” Search ”””””””””””””””””””””
接下來是搜尋功能:
1. 在全篇文章中快速搜尋下一個字:使用加號,綁定原本的 * 號,表示原本沒有這個指令。
nmap + *
2.使用 ese 作為清空右上角提醒,以及清除 highlight (需要 smarter-md-hotkeys 插件)
exmap clearNotices obcommand obsidian-smarter-md-hotkeys:hide-notice
nmap &c& :clearNotices
nmap &n& :nohl
nmap <Esc> &c&&n&
3. j 在 Vim 中,”j” 和 “gj” 都是用於移動游標的命令。”j” 通常用於向下移動一行,而 “gj” 則用於在視覺模式下向下移動一個顯示行。如果你在 Vim 模式中把 “j” 替換成 “gj”,那麼每次你按 “j” 時,Vim 就會執行 “gj” 的功能,也就是向下移動一個顯示行,而不是向下移動一行。這在處理長行(例如,一行文本超過一個屏幕寬度)時特別有用,因為它允許你按照視覺 z 上的行而不是實際的行來移動游標。k 同樣原理。這邊 I 則是在跳到行首去進行輸入,A 則是跳到行末去進行輸入
noremap j gj
noremap k gk
nmap I g0i
nmap A g$a
(同理 h l)
noremap H g0
noremap L g$
nmap J 6gj
nmap K 6gk
4. 句子導航
> 在 Obsidian 的 Vim 模式中,可以使用 `[` 和 `]` 進行句子導航。這裡的 `nmap [ (` 和 `nmap ] )` 分別將 `[` 和 `]` 映射為在普通模式 (normal mode) 中導航到前一個和下一個句子。這類似於 Vim 中的 `(` 和 `)` 命令,它們用於在文本中快速導航到句子的開始和結束。
nmap [ (
nmap ] )
5. 折疊 (Folding)
> 1. 折疊功能允許用戶隱藏或顯示文本區域。在 Obsidian 的 VimRC 配置中,有多個與折疊相關的映射。先指定到特定代稱
>>1. `exmap unfoldall obcommand editor:unfold-all`:完全展開所有折疊。
>> 2. `exmap togglefold obcommand editor:toggle-fold`:切換當前折疊的狀態。
>> 3. `exmap foldall obcommand editor:fold-all`:折疊所有區域。
>> 4. `exmap foldless obcommand editor:fold-less`:減少折疊的層級。
>> 5. `exmap foldmore obcommand editor:fold-more`:增加折疊的層級。
>> 6. 對應的 `nmap` 命令則允許在普通模式下使用特定鍵位操作這些折疊功能。
> 2. nmap zm :foldmore 折疊更多
> 3. nmap zM :foldall 折疊全部
> 4. nmap zr :foldless 折疊少一點
> 5. nmap zR :unfoldall 全部不折疊
exmap unfoldall obcommand editor:unfold-all
exmap togglefold obcommand editor:toggle-fold
exmap foldall obcommand editor:fold-all
exmap foldless obcommand editor:fold-less
exmap foldmore obcommand editor:fold-more
nmap zm :foldmore
nmap zM :foldall
nmap zr :foldless
nmap zR :unfoldall
6. 切換 Tab 和窗口
> 1. `exmap nextTab obcommand workspace:next-tab` 和 `exmap prevTab obcommand workspace:previous-tab` 允許用戶在不同的 Tabs 之間切換。
> 2. `nmap gt :nextTab` 和 `nmap gT :prevTab` 在普通模式下使用 `gt` 和 `gT` 進行快速切換。
exmap nextTab obcommand workspace:next-tab
exmap prevTab obcommand workspace:previous-tab
nmap gt :nextTab
nmap gT :prevTab
> 3. 關閉窗口的映射 `exmap closeWindow obcommand workspace:close-window` 和 `nmap ZZ :closeWindow`,允許用戶通過 `ZZ` 快速關閉當前窗口。
exmap closeWindow obcommand workspace:close-window
nmap ZZ :closeWindow
7. 右鍵菜單(Context Menu)
> `exmap contextMenu obcommand editor:context-menu` 和 `nmap zl :contextMenu` 允許用戶在普通模式下使用 `zl` 快速召喚右鍵菜單,這模仿了 Vim 中的 `z=` 命令,通常用於拼寫檢查。
exmap contextMenu obcommand editor:context-menu
nmap zl :contextMenu
8. 快速導航至標題 (需要 obsidian-editor-shortcuts 插件)
> `exmap nextHeading` 和 `exmap prevHeading` 映射允許用戶快速導航下一個或上一個標題,分別綁定於 `nmap ]] :nextHeading` 和 `nmap [[ :prevHeading`。
exmap nextHeading obcommand obsidian-editor-shortcuts:goToNextHeading
exmap prevHeading obcommand obsidian-editor-shortcuts:goToPrevHeading
nmap <C-j> :nextHeading
nmap <C-k> :prevHeading
9. 跳至特定標題 (需要 another-quick-switcher 插件)
> `exmap gotoHeading obcommand obsidian-another-quick-switcher:header-floating-search-in-file` 和 `nmap gs :gotoHeading` 提供了一個快速跳轉到文檔中特定標題的功能。
exmap gotoHeading obcommand obsidian-another-quick-switcher:header-floating-search-in-file
nmap gs :gotoHeading
10. 跳至特定章節 ( 需要 longform 插件)
> `exmap gotoScene obcommand longform:longform-jump-to-scene` 和 `nmap gw :gotoScene` 用於快速跳轉到特定章節,尤其適用於長篇文檔。
exmap gotoScene obcommand longform:longform-jump-to-scene
nmap gw :gotoScene
11. 跟隨鏈接 (需要 shukuchi 插件)
> `exmap followNextLink obcommand shukuchi:open-link` 映射允許用戶跟隨文檔中的鏈接,綁定於 `nmap gx`、`ga` 和 `gd`。
exmap followNextLink obcommand shukuchi:open-link nmap gx :followNextLink nmap ga :followNextLink nnoremap gX :followNextLinkInNewTab
12. 快速切換文件 (需要 another-quick-switcher 插件)
> `exmap quickSwitcher obcommand obsidian-another-quick-switcher:search-command_recent-search` 和 `nmap go :quickSwitcher`、`gr` 用於快速切換至其他已開啟的文件。
exmap quickSwitcher obcommand obsidian-another-quick-switcher:search-command_recent-search
nmap go :quickSwitcher
nmap gr :quickSwitcher
13. 查找和替換
> `exmap searchReplace obcommand editor:open-search-replace` 和 `nmap ,ff :searchReplace` 提供了在當前筆記中進行查找和替換的功能。
exmap searchReplace obcommand editor:open-search-replace
nmap ,ff :searchReplace
14. 版本控制和差異查看 (需要 version-history-diff , edit-history, obsidian git插件)
> `exmap diffview obcommand obsidian-version-history-diff:open-git-diff-view` 和 `nmap ,gd :diffview` 用於查看文檔的版本歷史差異。
exmap diffview obcommand obsidian-version-history-diff:open-recovery-diff-view
nmap ,gd :diffview
>`exmap undohistory obcommand edit-history:open-edit-history` 和 `nmap ,ut :undohistory` 提供了一個檢視和操作編輯歷史的方式。
exmap undohistory obcommand edit-history:open-edit-history
nmap ,ut :undohistory
> `exmap gitAdd obcommand obsidian-git:stage-current-file` 和 `gitCommit obcommand obsidian-git:commit-staged-specified-message` 以及相關的 `nmap` 命令用於整合 Git 功能,如添加和提交更改。
exmap gitAdd obcommand obsidian-git:stage-current-file
nmap ,ga :gitAdd
nmap ,gA :gitAdd
exmap gitCommit obcommand obsidian-git:commit-staged-specified-message
nmap ,gc :gitCommit
15. 編輯增強 (需要 obsidian-editor-shortcuts 插件)
> `exmap mergeLines obcommand obsidian-editor-shortcuts:joinLines` 和 `nmap M :mergeLines` 用於合併行。
- 對於添加空白行、複製、註釋等功能也有類似的映射,增強了編輯效率。
exmap mergeLines obcommand obsidian-editor-shortcuts:joinLines
exmap mergeLines obcommand obsidian-editor-shortcuts:joinLines
nmap M :mergeLines
16. Markdown/Obsidian 特定功能
> 包括對於 YAML 標籤的快速添加 (`nmap ,y`),跳轉到腳註 (`nmap gf`),切換引用塊 (`nmap ,<`) 等功能。
nmap ,y 3ggA
exmap toggleBlockquote obcommand editor:toggle-blockquote
nmap ,< :toggleBlockquote
vmap ,< :toggleBlockquote
17. 文本對象操作
> 提供了更改和刪除單詞或選擇的功能,如 `nmap <Space> “_ciw`
nnoremap <Space> “_ciw
18.快速註釋和搜索
> 包括快速註釋 (`nmap ,C`),以及文章內標題搜索 (`nmap ,f`)。
exmap commentLine obcommand contextual-comments:advanced-comments
nmap ,C :commentLine
exmap floatingHeaderSearch obcommand obsidian-another-quick-switcher:header-floating-search-in-file
nmap ,f :floatingHeaderSearch