录屏时显示 Flying Text
https://x.com/fwarashi/status/1901516322451927206
https://x.com/fwarashi/status/1901574037173911775
https://x.com/fwarashi/status/1901575221359878293
https://x.com/fwarashi/status/1901574720145031171
在后期编辑时把实际键盘输入添加到界面上

vaI 快速选中整个 if { block } vim-indent-object

v2i" 选中引号和引号的内容,但不包含外部的空格 Why va” selects whitespace characters before the string? : r/vim

vi' 选中同一行光标所在的单引号;如果启用了 targets.vim viq 选中当前光标所在的单、双引号

via vib vi( 类似地,都能选中光标所在的括号中的内容 vim-textobj-arguments

vin' 选中下一个引号,不限定同一行,需要启用 wellle/targets.vim

veS) yse) 创建函数,当光标处于 log|theAnswer; t 的位置时产生 log(theAnswer); tpope/vim-surround

ea() 在当前单词后面添加括号,变成函数

dibv%P 在没有 surround 插件的情况下,删除周围的括号,还挺通用的 Poor man’s Surround

A; 快速在行尾添加分号

v% 选择一大段跨行的 XML 注释 <!-- ... -->

yss" 把一整行都添加到引号里 How to select a whole line for as a motion in Vim? Vim Surround - Visual line mode adds newlines : r/vim 如果使用 V S" 先进入行选择模式再给整行添加引号,会在前后添加换行

ys%" 当光标处在 function(abc def) 首位(f)的时候,给整个函数调用添加引号
vabob 相似的,不过光标位于括号里都行

cs>b 把 Markdown 中的无名链接 <https://> 替换为括号包裹 (https://) 为下一步在前方添加方括号做准备 Surround with angle brackets

ciw()<Esc>P Enclosing in parentheses with Vim - Stack Overflow 这里的 P 会当光标块处在 " 上时在引号前插入,刚好满足了需求。也是当 surround.vim 不可用时(原生 Obsidian),给文字添加引号包裹的快捷方法。

Ctrl+d Ctrl+u 滚动半屏,伴随光标
Ctrl+e Ctrl+y 滚动一行,不动光标

H M L 在屏幕范围内放置光标
zz zt zb 向光标位置移动屏幕

Ctrl+O 在插入模式中执行一趟标准模式的指令

gUU VU 将一整行切换为大写 TIL: guu & gUU — makes an entire line lowercase and uppercase : r/vim

在本行执行过一次 :s 替换,在下一行替换用 j.,想要在全文范围执行用 :%s。因为单独一个 s 会复用上次参数

gd 跳转到定义 VSCodeVim/Vim: :star: Vim for Visual Studio Code
gf 跳转到光标下的文件,在 C 系的 include 部分很好用

:s/\%Vred/green/g 在可视选择的范围内替换。如果直接使用 :'<,'>s/red/green/g 即便选择了一段文本,也是在整行的范围内替换,非常反直觉
gv 重新选中上次可视选择的内容

d} 删除到段落末尾,脚本语言中常用于删除整段 if

ds)db 删除包裹的函数 Delete surrounding function calls ,把 a = x(y(z)); 变成 a = y(z); Add surrounding function name delete/change by LeszekSwirski · 拉取请求 #118 · tpope/vim-surround
[(cb 修改包裹的函数名 Delete surrounding function calls the easy way : r/vim

Vim 输入法切换

非常好的资源 Moving around in Vim | irian.to

obsidian-vimrc-support

记录 obsidian-vimrc-support 专有的部分技巧

TypeError: CodeMirror.openDialog is not a function
    at Object.eval [as surroundOperator] (plugin:obsidian-vimrc-support:1001:24)
    at Object.evalInput (vim.js:1895:51)
    at Object.processMotion (vim.js:1436:14)
    at Object.processCommand (vim.js:1411:18)
    at vim.js:910:37
    at e.operation (app.js:1:1583204)
    at vim.js:904:23
    at Object.handleKey (vim.js:768:18)
    at Object.multiSelectHandleKey (vim.js:6391:28)
    at qi.fromClass.e.handleKey (app.js:1:1593285)
  • 目前还 不支持 很多 Vim 控制配置,像是 start 以 INSERT 模式启动