Obsidian的Vim插件设置配置全流程 -- 脱离鼠标拥抱Vim神教

Obsidian的Vim插件设置配置全流程 -- 脱离鼠标拥抱Vim神教

    • 参考文章
    • 引言
    • 1. vim 及 vimrc 介绍
    • 2. 开启 Obsidian 内置的 Vim
    • 3. vimrc 插件的获取和安装
    • 4. vimrc 插件的设置
    • 5. vimrc 配置文件的设置
    • 附件

参考文章

vim 常见操作
Obsidian插件安装教程

引言

vim 很好用,但是还是有一定的学习成本的,如果大家想尝试熟练之后绝对不会让你失望的,vim 可以极大的提高 obsidian 使用起来的流畅感

这篇可能是网上很少的中文 obsidian 的 vim 详细设置和参考的文章了,因为当时我自己设置的时候主要参考的是国外的博客,当然还有一个我心心念念很久的问题本文没有解决,就是无法设置 h j k l 在不同的聚焦情况下完全替代上下左右键,如果大家用过 vscode 可能知道我是什么意思,后续如果大家感兴趣我也可以写一篇 vscode 中如何配置 vim 配置文件来实现极其舒服的编程体验

本文提供的功能并不是所有 obsidian vim 所支持的功能,如果大家有更好的想法可以在评论区沟通,当 vimrc 插件发生更新导致配置不能使用时我也会第一时间更新的,因为我自己每天也在高强度的使用

1. vim 及 vimrc 介绍

Vim 其实是 UNIX 系统上 Vi 的扩展版本,主要用于编辑程序和纯文本文件(Markdown),基本可以实现所有命令都用键盘操作,可以脱离鼠标专心内容,还可以根据自己需求自定义按键

由于 Vim 真的很好用,不同的软件都有相应的内置功能来实现类似 Vim 的操作,在 Obsidian 中就有内置的 Vim key bindings,还有对应的插件 Vimrc Support 可以添加一些其它的功能

2. 开启 Obsidian 内置的 Vim

  1. 使用 cmd + , 或者 ctrl + , 打开 obsidian 的设置,或者按照下图点击对应的设置

image.png|600

  1. 打开设置后点击 Editor 然后划到最下面打开 Vim key bindings 如下图

image.png

  1. 打开后会出现提示框来保证你会用 Vim 这里要求输入退出并不保存的命令,对应 :q 如下图

image.png

  1. 打开后需要掌握常见的 vim 操作命令,请参考 vim 常见操作

3. vimrc 插件的获取和安装

为了让开启了 vim 的 obsidian 更好用,可以安装 Vimrc Support 插件,安装步骤参考 Obsidian插件安装教程,本文同样提供了对应的插件文件,搜索公众号 <文件夹的知识圈> 回复 <插件下载> 即可,需要下载文件中的 obsidian-vimrc-support 压缩包和对应的 .obsidian

4. vimrc 插件的设置

对 vimrc 进行配置,接下来的内容包括每一项的介绍和建议配置,

  1. vimrc 快捷键配置文件,在 4 小节进行进一步配置,后面框中内容填写的是快捷键配置文档的名称,默认在仓库文件夹下,如果有更改需要重启

image.png

  1. 显示没有完成的 vim 命令,建议开启。因为有一些命令比较复杂需要看到输入的按键是否正确

image.png

没有开启的时候,进行移动和其它命令右下角是没有任何显示的

image.png

开启后在最左侧会有对应命令的提示

image.png

  1. 显示当前 vim 所处的模式(建议开启)

开启后会在最右侧显示当前 vim 当前所处的模式

image.png

显示的样式可以在设置的最后面自定义设置,可以照抄我的设置

image.png

  1. 固定当前键盘布局,有的语言的键盘上没有对应 vim 的按键所以需要,大部分人不需要设置

image.png

  1. 支持 JS 命令,这个我没有用到过,帮助文档中提到这个是将 vim 命令映射到 JavaScript 代码片段的,如果有人了解可以在下面评论分享

image.png

5. vimrc 配置文件的设置

接下来对 vimrc 的自定义配置文件进行配置和说明,这里基本上是我用到的快捷键设置

  1. 首先需要在仓库文件夹下创建一个名为 .obsidian.vimrc 的文件,详见下图,然后右键选中打开方式使用文本文档打开

image.png

  1. 将附件中的文本粘贴到文件中,保存然后重启 obsidian 即可。下面会依次介绍对应的效果以观察是否配置成功
" 将数字上的 j 和 k 改为视觉
nmap j gj
nmap k gk

如果配置成功,对应的效果为光标从“文”依次垂直到"是“和“示”,如果没配置成功

image.png

" HJKL 实现更大范围的 hjkl
nmap H ^
nmap L $
nmap J 6gj
nmap K 6gk

这个可以根据自己的喜好设置,这样设置的结果是当 normal 模式下按下大小的 L 、H 和 J、K 会有一个更大范围的光标跳转

" 访问系统剪切板
set clipboard=unnamed

这个一定要设置,如果不设置的话就无法通过 ob 中 vim 的 y 和 p 实现将文本复制到别的地方或者从别的地方复制到 ob

" 移动到下一段落
nmap [ {
nmap ] }

上面设置过视觉上的 j 和 k,这个可以通过 [ {] } 来实现段落之间的上下跳转

" 复制整行
nmap Y y$

正常在 vim 中可以通过 y$ 实现复制整行,这样可以直接通过大写的 Y 来实现同样的功能

" 打开文本编辑菜单 = 鼠标右键
exmap contextMenu obcommand editor:context-menu
nmap zl :contextMenu<CR>

这个命令模拟的是鼠标在文本区右键的功能,当直接在 normal 模式下接连按下 zl 后就会出现下图

image.png

" 实现括号的surrend功能 
exmap surround_wiki surround [[ ]]
exmap surround_double_quotes surround " "
exmap surround_single_quotes surround ' '
exmap surround_backticks surround ` `
exmap surround_brackets surround ( )
exmap surround_square_brackets surround [ ]
exmap surround_curly_brackets surround { }
exmap surround_italic surround * *
exmap surround_bold surround ** **
exmap surround_delete surround ~~ ~~
exmap surround_mark surround == ==
exmap surround_math surround $ $" 必须使用 'map'
map [[ :surround_wiki
nunmap s
vunmap s
map s" :surround_double_quotes<CR>
map s' :surround_single_quotes<CR>
map s` :surround_backticks<CR>
map sb :surround_brackets<CR>
map s( :surround_brackets<CR>
map s) :surround_brackets<CR>
map s[ :surround_square_brackets<CR>
map s] :surround_square_brackets<CR>
map s{ :surround_curly_brackets<CR>
map s} :surround_curly_brackets<CR>
map si :surround_italic<CR>
map sb :surround_bold<CR>
map sd :surround_delete<CR>
map sm :surround_mark<CR>
map s$ :surround_math<CR>

这个功能很好用,建议一定要设置,可以在 visual 模式下快速的给一段文字的两边加上符号,操作的方法为:按 ESC 进入 normal 模式 -> 按 V + hjkl 移动键选中想要圈起来的文本 -> 键入 s -> 键入对应的符号(比如上面的 s" 就是键入 ")步骤如下图

image.png 选中后连贯的依次按 s" 会变成 image.png 成功的在文本的左右加上 " ,可以依次尝试其它的

" 使用th和tl实现tab的切换 
exmap tabnext obcommand cycle-through-panes:cycle-through-panes
nmap tl :tabnext<CR>
exmap tabprev obcommand cycle-through-panes:cycle-through-panes-reverse
nmap th :tabprev<CR>

这个可以实现 tab 页的切换,但是需要首先安装 Tab Switcher 插件原名为 cycle through panes,如果之前安装过 cycle through panes 不需要再进行额外的设置了,安装步骤参考Obsidian插件安装教程,本文同样提供了对应的插件下载,请搜索公众号 <文件夹的知识圈> 并回复 <插件下载> 在打开链接的文件夹中选择 cycle-through-panes 对,你没有看错这就是最新版的 Tab Switcher,通过官方社区下载的时候需要搜索 Tab Sitcher,下载完成后在 .obsidian/plugins 下的名字还是 cycle-through-panes

ps: 这里可能有同学会疑问,为什么 Tab Switcher 本身已经提供了标签页切换了还需要设置,其实就是为了在出现按键冲突的时候提供了一个选择,可以根据自己的习惯选择

Tab Switcher 的设置只需要将下图的设置关掉就可以使用 tbtl 来进行 tab 的切换

image.png

" 实现工作区的分割
exmap vsp obcommand workspace:split-vertical
" 实现工作区的纵向分割
exmap ssp obcommand workspace:split-horizontal

实现的功能和直接拖动笔记分割屏幕的效果一样,注意这里的命令需要在 Normal 模式下通过依次键入 :vsp 然后回车实现

" 聚焦
exmap focusLeft obcommand editor:focus-left
exmap focusRight obcommand editor:focus-right
exmap focusBottom obcommand editor:focus-bottom
exmap focusTop obcommand editor:focus-top
nmap <C-w>h :focusLeft<CR>
nmap <C-w>l :focusRight<CR>
nmap <C-w>j :focusBottom<CR>
nmap <C-w>k :focusTop<CR>

当将编辑区分成下面的情况时,可以首先按下组合键 ctrl + w,然后松手再按下对应的 h j k l 来实现编辑区的左、下、右和上的无感切换,结合上 ctrl + o 快捷键和上面的垂直和水平划分编辑区,简直不要太好用

注意,如果这里出现了按下 ctrl + w 当前 tab 页直接关闭,可以在设置处将快捷键为 ctrl + wclose current tab 换成 ctrl + d 后续会出一个快捷键设置的文章来避免这种问题,也可以使用后面的 :q 关闭当前 tab 页把对应的快捷键删除

image.png

" 关闭工作区
exmap q obcommand workspace:close

通过在 Normal 模式下键入 :q 来模拟 close current tab 功能

" 模拟折叠标题的功能
exmap unfoldall obcommand editor:unfold-all
exmap togglefold obcommand editor:toggle-fold
exmap foldall obcommand editor:fold-all
nmap zo :togglefold<CR>
nmap za :foldall<CR>
nmap zr :unfoldall<CR>

使用方法为依次键入 zo 其中 zo 是折叠当前标题下的内容,如果已经折叠则是取消折叠,za 是折叠所有的标题,zr 是展开所有的标题

附件

" 将数字上的 j 和 k 改为视觉
nmap j gj
nmap k gk" HJKL 实现更大范围的 hjkl
nmap H ^
nmap L $
nmap J 6gj
nmap K 6gk" 访问系统剪切板
set clipboard=unnamed" 移动到下一段落
nmap [ {
nmap ] }" 复制整行
nmap Y y$" 打开文本编辑菜单 = 鼠标右键
exmap contextMenu obcommand editor:context-menu
nmap zl :contextMenu<CR>" 实现括号的surrend功能 
exmap surround_wiki surround [[ ]]
exmap surround_double_quotes surround " "
exmap surround_single_quotes surround ' '
exmap surround_backticks surround ` `
exmap surround_brackets surround ( )
exmap surround_square_brackets surround [ ]
exmap surround_curly_brackets surround { }
exmap surround_italic surround * *
exmap surround_bold surround ** **
exmap surround_delete surround ~~ ~~
exmap surround_mark surround == ==
exmap surround_math surround $ $" 必须使用 'map'
map [[ :surround_wiki
nunmap s
vunmap s
map s" :surround_double_quotes<CR>
map s' :surround_single_quotes<CR>
map s` :surround_backticks<CR>
map sb :surround_brackets<CR>
map s( :surround_brackets<CR>
map s) :surround_brackets<CR>
map s[ :surround_square_brackets<CR>
map s] :surround_square_brackets<CR>
map s{ :surround_curly_brackets<CR>
map s} :surround_curly_brackets<CR>
map si :surround_italic<CR>
map sb :surround_bold<CR>
map sd :surround_delete<CR>
map sm :surround_mark<CR>
map s$ :surround_math<CR>" 使用th和tl实现tab的切换 
exmap tabnext obcommand cycle-through-panes:cycle-through-panes
nmap tl :tabnext<CR>
exmap tabprev obcommand cycle-through-panes:cycle-through-panes-reverse
nmap th :tabprev<CR>" 实现工作区的横向分割
exmap vsp obcommand workspace:split-vertical
" 实现工作区的纵向分割
exmap ssp obcommand workspace:split-horizontal" 聚焦
exmap focusLeft obcommand editor:focus-left
exmap focusRight obcommand editor:focus-right
exmap focusBottom obcommand editor:focus-bottom
exmap focusTop obcommand editor:focus-top
nmap <C-w>h :focusLeft<CR>
nmap <C-w>l :focusRight<CR>
nmap <C-w>j :focusBottom<CR>
nmap <C-w>k :focusTop<CR>" 关闭工作区
exmap q obcommand workspace:close" 模拟折叠标题的功能
exmap unfoldall obcommand editor:unfold-all
exmap togglefold obcommand editor:toggle-fold
exmap foldall obcommand editor:fold-all
nmap zo :togglefold<CR>
nmap za :foldall<CR>
nmap zr :unfoldall<CR>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/4585.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

6.《双指针篇》---⑥和为S的两个数字(中等但简单)(牛客)

题目传送门 方法一&#xff1a;暴力解法。双循环 方法二&#xff1a;双指针&#xff08;推荐&#xff09; 1.定义一个顺序表&#xff0c;定义左右双指针 2.while循环。判断array[left] array[right] 的值。 3.若等于则将这两个值加入数组。并break 4.若大于则right-- 5.若小于…

LeetCode994. 腐烂的橘子(2024秋季每日一题 54)

在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子&#xff1b;值 2 代表腐烂的橘子。 每分钟&#xff0c;腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。 返回 直到单元格中没有…

【51蛋骗鸡一个独立按键控制流水灯开关】2022-1-18

缘由一个独立按键控制流水灯开关-编程语言-CSDN问答 #include<reg52.h>//头文件 sbit k1P3^7;// void main() //主函数 {unsigned char sj0, ls0;unsigned int ys0;P00;/*P0255;*/while(1){if(!k1&&!sj){if(!ls){ls1;/*P00;*/}else ls0;while(!k1);}if(…

shodan(五)连接Mongodb数据库Jenkinsorg、net、查看waf命令

声明&#xff1a;学习素材来自b站up【泷羽Sec】&#xff0c;侵删&#xff0c;若阅读过程中有相关方面的不足&#xff0c;还请指正&#xff0c;本文只做相关技术分享,切莫从事违法等相关行为&#xff0c;本人一律不承担一切后果 引言&#xff1a; 1.Shodan 是一个专门用于搜索连…

lvgl白屏问题(LCD长时间白屏)和优化lvgl

开机白屏时间过长 -- 这里我们不考虑是lvgl占的内存太大的问题&#xff0c;这里考虑的是为什么lcd屏幕启动后会有长时间的白屏。 首先我们要了解lvgl的相关操作&#xff0c;主要集中在一个函数中。只有程序执行到了这个函数&#xff0c;lvgl的屏幕才会显现出来 总结来说就是l…

公网ip和弹性公网ip有什么区别?哪个更好

公网ip和弹性公网ip有什么区别&#xff1f;公网IP和弹性公网IP都是用于互联网通信的IP地址&#xff0c;但它们在灵活性、成本和管理方式上有所不同。公网IP是直接分配给设备的静态IP地址&#xff0c;适用于需要固定外部访问的场景&#xff0c;但可能面临安全风险和设置复杂性。…

DevOps-课堂笔记

各种 aaS 类比于计算机网络的 OSI 参考模型&#xff0c;一个软件应用项目需要不同的支撑层&#xff0c;例如从下至上大概需要&#xff1a; 硬件层面的服务器针对硬件做弹性分配的虚拟化机制&#xff0c;例如虚拟机在虚拟化环境内运行的 OS支撑软件应用的中间件&#xff0c;例…

游戏想实习但定位不清的问题

国内的游戏大厂包括腾讯、网易、盛趣游戏、西山居、米哈游、莉莉丝、完美世界、游族、心动、叠纸、三七、TapTap、Tap4fun、字节跳动、哔哩哔哩、funplus、巨人、IGG、沐瞳等。而国外的游戏大厂则有育碧、EA、拳头、supercell、暴雪、R星、卡普空、任天堂、波兰蠢驴等。 一般来…

Dubbo使用Nacos作为注册中心

使用 Nacos 作为注册中心实现自动服务发现 本示例演示 Nacos 作为注册中心实现自动服务发现&#xff0c;示例基于 Spring Boot 应用展开&#xff0c;可在此查看 完整示例代码 1 基本配置 1.1 增加依赖 增加 dubbo、nacos-client 依赖&#xff1a; <dependencies><…

css基础

文章目录 基础 基础 配置网页的cion图标 在网站根目录下放置 favicon.ico 文件&#xff0c;浏览器在加载网页的时候会自动加载的。这个图片只能是 ico 格式&#xff0c;并且只能叫这个名字 如: css项目的根目录下 刷新网站没有生效&#xff0c;需要强制刷新&#xff0c;shif…

Lucene的Directory的详细使用与性能测试(6)

文章目录 第6章 Directory6.1 Directory介绍6.1.1 FSDirectory1&#xff09;SimpleFSDirectory&#xff1a;2&#xff09;NIOFSDirectory&#xff1a;3&#xff09;MMapDirectory&#xff1a;4&#xff09;FSDirectory子类对比 6.2.2 RAMDirectory 6.2 Directory性能测试环境搭…

HTML+javaScript+CSS

文章目录 HTMLjavaScriptCSS属性区块表单层叠样式表选择器常用属性盒子模型相关属性浮动float定位&#xff08;position&#xff09; JS操作节点事件点击事件onclick()聚焦事件、失焦事件鼠标移入移出事件 定时任务延迟定时任务重复定时任务 判断哪个单选框被选中设置按钮失效冒…

Linux系统每日定时备份mysql数据

一、创建存储脚本的文件夹 创建文件夹&#xff0c;我的脚本放在/root/dbback/mysql mkdir ... cd /root/dbback/mysql 二、编写脚本 vi backup_mysql.sh 复制脚本内容 DB_USER"填写用户名" DB_PASSWORD"填写密码" DB_NAME"数据库名称" # …

【计算机网络】零碎知识点(易忘 / 易错)总结回顾

一、计算机网络的发展背景 1、网络的定义 网络是指将多个计算机或设备通过通信线路、传输协议和网络设备连接起来&#xff0c;形成一个相互通信和共享资源的系统。 2、局域网 LAN 相对于广域网 WAN 而言&#xff0c;局域网 LAN 主要是指在相对较小的范围内的计算机互联网络 …

数据同步的技术支持有哪些?

数据同步是指将不同系统、设备或应用程序中的数据进行实时或定期的更新、复制和传输的过程。通过数据同步&#xff0c;可以确保数据的一致性和可用性&#xff0c;避免数据的丢失或错误。常见的数据同步技术包括推式同步、拉式同步、ETL工具同步等。 一、推式数据同步 定义&…

Kaggle入门指南(Kaggle竞赛)

https://www.kaggle.com/ 文章目录 Kaggle 入门指南1. Kaggle 的功能概述1.1 竞赛1.2 数据集1.3 学习与教程1.4 社区 2. 注册与设置2.1 创建账户2.2 完善个人资料 3. 探索数据集3.1 查找数据集3.2 下载数据集示例代码&#xff1a;加载数据集 3.3 数据预处理示例代码&#xff1a…

桌面终端安全管理软件有哪些?5大主流的终端安全防护系统盘点,2024人气爆款推荐!

“守一而制万机&#xff0c;安内方可攘外”。在纷繁复杂的数字化世界中&#xff0c;只有确保内部系统的安全稳定&#xff0c;才能有效地抵御外部威胁。 其中&#xff0c;桌面终端作为信息交换和存储的重要节点&#xff0c;在安全管理方面显得尤为重要。 本文将为您盘点2024年五…

灰度梯度的表示形式、非极大值抑制、Canny算子、otsu

灰度梯度的表示形式主要有两种&#xff1a;梯度的幅度&#xff08;magnitude&#xff09;和梯度的方向&#xff08;direction&#xff09;。 1. **梯度的幅度&#xff08;Gradient Magnitude&#xff09;**&#xff1a; 梯度的幅度表示在某个方向上像素灰度变化的强度。它通…

WLAN高级技术

下面是对每一部分的详细解析&#xff1a; 1. 禁用信息中心并设置设备名称 <Huawei>sys [Huawei]un in e Info: Information center is disabled. [Huawei]sysname sw1 分析&#xff1a; un in e&#xff1a;禁用信息中心&#xff0c;防止后续配置过程中出…

Serverless GPU:助力AI推理加速

近年来&#xff0c;AI技术发展迅猛&#xff0c;企业纷纷寻求将AI能力转化为商业价值&#xff0c;然而&#xff0c;在部署AI模型推理服务时&#xff0c;却遭遇成本高昂、弹性不足及运维复杂等挑战。本文将探讨云原生Serverless GPU如何从根本上解决这些问题&#xff0c;以实现AI…