- 回到行首
- ^ 不带 blank 字符,映射 vim.normalmodekeybindings -> h
- 0 带托字符
- 回到行尾
- g_ 不带 blank 字符,映射 vim.normalmodekeybindings -> l
- $ 带托字符
- 在行首插入:i
- 在当前光标前插入:i
- 在行尾插入:a,就有 blank 字符
- 在当前光标后插入:a
- 在行前插入:o
- 在行后插入:o
-
复制当前行 yy,复制多行:数字 + yy,比如 2yy,复制 2 行
-
删除并复制当前行 dd,删除多行,数字 + dd,比如 2dd,删除 2 行
-
黏贴 p:在当前字符或行之后黏贴
-
移动到单词的开头:w
- 移动到字串的开头:w,用空格区分
- 移动到单词的结尾:e
- 移动到字串的结尾:e
- 移动到上一个单词的开头:b
- 移动到上一个字串的开头:b
-
移动到上一个单词的结尾:ge
-
删除当前光标所在的字符:x
- 删除当前光标前的字符:x
- 删除当前光标所在的字符,并进入 insert 模式:s
- 删除当前光标所在的行,并进入 insert 模式:s
- 替换当前光标所在的字符:r
- 替换当前光标所在的字符,并往后逐个替换:r
- 撤销当前块:u(撤销从进入 insert 模式开始,到返回 normal 模式结束,在此期间输入的内容被被当成一次修改。注意在 insert 模式中,方向键算一次修改)
- 回退撤销:ctrl - r
- 可视化模式:
- 字符:v
- 行:v,主要用于处理多行文本
-
切换可视区的光标位置:o,在可视化模式中使用
-
回到上一次选择位置:gv
-
滚动
- 向下滚动一屏:Ctrl - f,光标会动
- 向上滚动一屏:Ctrl - b,光标会动
- 向下滚动半屏:Ctrl - d,光标会动
- 向上滚动半屏:Ctrl - u,光标会动
- 向下滚动一行:Ctrl - e,光标不会动
- 向上滚动一行:Ctrl - y,光标不会动
- 在可视化模式或 normal 模式中配置向上或向下滚动 5 行 vim.visualModeKeyBindings/vim.normalModeKeyBindings {"before": ["J"], "after": ["5", "j"]}, {"before": ["K"], "after": ["5", "k"]}
- 将当前行置于屏幕中央:zz
- 将当前行置于屏幕顶部附近:zt
- 将当前行置于屏幕底部附近:zb
- 跳到文件首:gg
- 跳到文件尾:G
- 跳到指定行:行数 + gg/行数 + G
- 搜索
- 单行:;重复上一次字符查找命令,,反方向查找上一次字符查找命令
- 正向移动到下一个字符所在之处:f
- 反向移动到上一个字符所在之处:F
- 正向移动到下一个字符之前的位置:t
- 反向移动到上一个字符之后的位置:T
- 全局,n:查找下一个,N:查找上一个
- / 当前光标处向下查找,按回车开始查找
- ? 当前光标处向下查找,按回车开始查找
- 输入 / 或 ? 之后,用方向键可以查看历史命令
-
- 当前光标往后查找
- 多文件跳转
- 定位
- 单文件
- 标记:mm
- 多文件
- 标记:mM
- 跳转
- ':跳转到标记的行
- `:跳转到标记的行和列
- 单文件
- 跳转到定义的地方:gd
- 跳转
- 任何大于一个单词或超过当前导航的移动都是一次跳转
- 命令:vim 保留了你移动前的位置,使用 :jumps 查看
- ':跳转到标记的行
- `:跳转到标记的行和列
- gg
- /:向后搜索
- ?:向前搜索
- n:重复上一次搜索,相同方向
- N:重复上一次搜索,相反方向
- gd
- {:跳转上一个段落(空格区分)
- }:跳转下一个段落(空格区分)
- 向后跳:Ctrl - i
- 向前跳:Ctrl - o
- 替换
- :[range]s[ubsitute]/{pattern}/{string}/[flags]
- 按回车生效,如果不按回车,当回到 normal 模式时,会取消预览
- range
- $:到尾部,:10,$s/vim/haha 回车
- 和 number, number 一样
- %:全文,:%s/vim/haha 回车
- number, number,:10,12s/vim/haha 回车
- $:到尾部,:10,$s/vim/haha 回车
- pattern:正则
- flags
- g:全文匹配,% 只匹配每行的第一个
- c:用对话框操作
- y:yes
- n:no
- a:all
- q:quit
- l:当前(光标所在位置)
- 可视化模式下,全部替换
- '<,'>
- 多选
- gb 选中光标附近的一个单词
- gb gb gb c 多光标操作
-
悬浮显示:gh
-
大小写切换
- normal:guiw gUiw
- 可视化:u U
- ~:选中字符,如果是大写切换成小写,如果是小写切换成大写
- 注释,normal和可视化通用
- 当行注释
- gc - l/h 一行
- gc - j/k 两行
- 多行注释
- gC - iw 一个单词
- 窗口切换
- 分屏
- 水平分屏: - v
- 垂直分屏: - s
- 关闭窗口: - c/q
- 窗口切换:
- - w
- - hjkl
- 只保留当前窗口,关闭其他窗口: - o
- 缩进
-
向右
- << 向左
- % 匹配括号:(), [], {}
- v%,快速选中最近一个括号内的内容,需要在括号处
- vim 语法:操作(operator:c,y,d)+ 数字 + 动作(范围,比如 w,b,h,j,k,l...)
- 按下操作符会进入 pendding 状态,等待输入动作
- 往前删除或者复制,从当前光标前一个字符(不包含当前光标)
- 往后删除或者复制,从当前光标处开始(包含当前光标)
- 在 pendding 状态下按照 h 和 l 生效,需要映射 vim.operatorpendingmodekeybindings
- 删除:d
- 删除并进入 insert 模式:c
- 复制:y
- 文本对象语法:
- 操作(operator:c,y,d)+(内部/外部)+ 文本对象
- 可视化模式(v,v,ctrl + v)+(内部/外部)+ 文本对象
- 内部:i
- 外部:a
- 对象:
- w:一个单词
- ():一对()
- b:一对()
- []:一对[]
- {}:一对{}
- b:一对{}
- <>:一对<>
- t:xml标签
- ':一对''
- ":一对""
- s:句子,vim 中只有 .、?、! 结尾的是句子
- p:段落,vim 中用空行隔开
- 点
- 重复上一次的修改:离开 insert 模式之前的最后一次修改记录
- 增加
- 删除
- 修改
- 核心:一键移动,一键操作
- diw,移动后用 .
- 宏
- 开始录制:qa,a 是寄存器的名字
- 结束录制:q
- 规范光标位置,光标不对可能会导致后续操作不对
- 光标移动的时候,使用相对位置,比如:w、e、textObject 的 f、t
- :reg a,查看录制好的宏
- @a,使用刚刚录制的宏
- @@,调用最后一次录制的宏
- 5@@,会执行5次
- 安全机制,报错就会停下来,比如,录制一个对 test 修改的命令,修改页面中所有的 test,但是你不知道页面中有多少个 test,可以用一个比较大的数字,如果找不到 test,宏执行的时候就会报错,就不要我们去数有多少个 test。
- qA,追加,对 a 寄存器追加命令
- 修改一个寄存器里面的内容
- 取出来:
- "aq
- :put a
- 修改:在 vscode 中不生效
- "ayy
- "ayw
- 取出来:
- vim-textobj-arguments 默认开启
- cia/via 不包含空格和逗号,用于修改参数
- caa/vaa 包含空格和逗号,用于删除参数
- vim-textobj-entire
- cie/vie 不包括空白符,选中所有内容
- cae/vie 包括空白符,选中所有内容
- vim-easymotion
默认是关闭的,需要手动开启: "vim.easymotion": true,
vim 中的
<leader>
键是 \,不太好用,需要改键,"vim.leader": "",
<leader>``</leader>
w 当前光标后首字母搜索<leader>``</leader>
e 当前光标后字母尾部搜索<leader>``</leader>
b 当前光标前首字母搜索<leader>``</leader>
ge 当前光标前字母尾部搜索<leader>``</leader>
j 当前光标后首行字母搜索<leader>``</leader>
k 当前光标前首行字母搜索<leader>``</leader>
h 当前光标前字母搜索<leader>``</leader>
l 当前光标后字母搜索<leader>``</leader>``</leader>
j 全局字母搜索
- vim-sneak 默认是关闭的,需要手动开启,"vim.sneak": true,
- s + 2个字符 当前光标后字母搜索
- s + 2个字符 当前光标前字母搜索 原生的 s 和 s 这个键非常好用,使用了 vim-sneak 之后,原生的 s 和 s 键就没有,考虑到原生的 f 和 f 键功能和 vim-sneak 键功能类似,所以需要改建: // f + 字母,s 的功能不变,大写的用法类似 "vim.normalmodekeybindingsnonrecursive": [ {"before": ["f"], "after": ["s"]}, {"before": ["f"], "after": ["s"]}, {"before": ["s"], "after": ["c", "l"]}, {"before": ["s"], "after": ["^", "c"]} ], // vf + 字母,在可视化模式下没有大写 s 的功能 "vim.visualmodekeybindingsnonrecursive": [ {"before": ["f"], "after": ["s"]}, ], // df + 字母 / df + 字母 "vim.operatorpendingmodekeybindingsnonrecursive": [ {"before": ["f"], "after": ["z"]}, {"before": ["f"], "after": ["z"]}, ],
- vim-surround 默认开启
- cs:将现有的改为需要的
- ys:添加一个文本外添加一个所需要的
- ds:删除现有的
- S:在可视化模式中添加一个所需要的
- vim-indent-object:基于缩进选中
- vii,选中函数 body 部分
- vai,选中整个函数,但是最后的 } 不会选中
- vaI,选中整个函数,包括最后的 },但不能在函数声明的地方使用
- 切换大写:
- shift - ~
- guiw
- 切换小写
- guiw
- 基于多行同时编辑:
- 在可视化模式选中多行
- 按下 a,在行尾同时编辑
- 按照 i,在行首同时编辑
- vaw/caw
- 如果一个单词后面有空格,会选择后面的空格,没有的话,会选择前面的空格
- f/t
- 移动的时候用 f
- c/d 配合 t 使用
- 更精确的搜索
- 操作符(d,c,y) + / + 字符
- 删除一个函数
- daI 删除一个函数,基于 vim-indent-object
- 改键:在可视化和 normal 中将 aI 映射为 ai
- V$%d
- 改键:在 normal 中将 V$%d 映射为 df,d 是 delete,f 是 function
- 如果函数的参数有多个,且换行了,则无法删除
- 改键:在 normal 中将 V$%d 映射为 df,d 是 delete,f 是 function
- 格式化文档: - f - d "vim.normalModeKeyBindingsNonRecursive": [ { "before": ["", "f", "d"], "commands": ["editor.action.formatDocument"] } ]
- 变量重命名: - r - n "vim.normalModeKeyBindingsNonRecursive": [ { "before": ["", "r", "n"], "commands": ["editor.action.rename"] } ]
- 折叠代码: - [,按 j 往下走,会展开代码,所以配置第二个命令,在折叠后跳到最后一个括号 "vim.normalModeKeyBindingsNonRecursive": [ { "before": ["", "["], "commands": [ { "command": "editor.fold" }, { "command": "vim.remap", "args": { "after": ["$", "%"] } } ] } ]
- 展开代码: - ] "vim.normalModeKeyBindingsNonRecursive": [ { "before": ["", "]"], "commands": [{ "command": "editor.unfold" }] } ]
- 资源管理器和编辑区域切换 { "key": "ctrl+;", "command": "workbench.view.explorer" }
- 终端和编辑区域切换 { "key": "ctrl+'", "command": "workbench.action.focusFirstEditorGroup" }
- 在资源管理器中新建文件(当前文件目录) { "key": "a", "command": "explorer.newFile", "when": "filesExplorerFocus && !inputFocus" }
- 在资源管理器中新建文件夹(当前文件目录) { "key": "shift+a", "command": "explorer.newFolder", "when": "filesExplorerFocus && !inputFocus" }
- 在编辑区中新建文件(当前文件目录) "vim.normalModeKeyBindingsNonRecursive": [ { "before": ["", "a"], "commands": ["explorer.newFile"] }, ]
- 在编辑区中新建文件夹(当前文件目录) "vim.normalModeKeyBindingsNonRecursive": [ { "before": ["", "A"], "commands": ["explorer.newFolder"] }, ]
- 重命名文件或者文件夹(在资源管理器中) { "key": "Enter", "command": "renameFile", "when": "explorerViewletVisible && filesExplorerFocus && !explorerResourceIsRoot && !explorerResourceReadonly && !inputFocus" }
- 删除文件或者文件夹(在资源管理器中) { "key": "Backspace", "command": "deleteFile", "when": "explorerViewletVisible && filesExplorerFocus && !explorerResourceReadonly && !inputFocus" }
- 新建新窗口:shirt - command - n
- 打开新项目:ctrl - r,按 command 点击项目会用新窗口打开项目
- 切换窗口:ctrl - w
- 全局搜索:command - shift - f
- 搜索文件:command - p
- 搜索函数或者变量:command - t,符号:#
- 在当前文件中搜索:command - shift - o,: 可以排序,符号:@
- 搜索命令: command - shift - p,符号:>
- 查看函数的参数:command - shift - space
- 触发建议:command - i
- 行上下移动:option - up/down
- 在下面增加一行:command - enter
- 在上面增加一行:shift - command - enter
- 删除前面的单词:option - delete
- 删除一个单词(驼峰命名):ctrl - option - delete
- 跳转到下一个错误的地方(基于整个工作区):F8
- 跳转到上一个错误的地方:Shift - F8
- 选中所有相同的单词(光标所在的单词):command - F2
- 显示/隐藏资源管理器:command - b
- md 预览:shift - command - v
- 打开系统文件夹:command - k - r
- 复制当前文件的路径:command - k - p
- 打开终端
- 改键:
- 搜索:workbench.action.terminal.toggleTerminal
- 绑定:command - j
- 终端分屏:command - \
- 如果分屏失败,在设置中搜索:Terminal › Integrated: Split Cwd
- 将 inherited 改为 initial
- 分屏切换:
- 改键:
- 搜索:workbench.action.terminal.focusNextPane/focusPreviousPane
- 绑定:ctrl - l/h
- 改键:
- 关闭终端
- 改键:
- 搜索:workbench.action.terminal.kill
- 绑定:command - q
- 改键:
- 新建终端
- 搜索:workbench.action.terminal.new
- 改键:command - n
- 在当前路径下打开 iterm
- shift - command - c
- 默认打开 mac 自带的终端
- 修改为 iterm,在 setting.json 中配置:"terminal.external.osxExec": "iTerm.app"
- 打开 git 面板:shift - control - g
- 改键: { "before": ["", "g", "g"], "commands": ["workbench.view.scm"] }
- 将当前文件提交到暂存区
- 改键: { "before": ["", "g", "s"], "commands": ["git.stage"] }
- 暂存区 diff 查看
- 改键: { "before": ["", "g", "d", "f"], "commands": ["git.openChange"] }
- 提交
- 改键: { "before": ["", "g", "c"], "commands": ["git.commit"] }
- 将当前文件从暂存区中撤回
- 改键: { "before": ["", "g", "u"], "commands": ["git.unstage"] }
- 将当前文件改动清除
- 改键: { "before": ["", "g", "c", "l"], "commands": ["git.clean"] }
- 插件推荐:edamagit
- javascript es6 code snippets
- imp:import second from "first"
- imd:import {} from "first"
- fn:function name (){}
- anfn:()=>{}
- clg/log:console.log()
- vscode snippets 自定义
- 命令模式搜索 user snippets
- 文档:https://code.visualstudio.com/docs/editor/userdefinedsnippets
- 重构:
- ctrl - shift - r 更纯粹,只显示重构相关的信息
- command - . 会有一些其他信息
-
Abracadabra 重构的一个插件
-
hocus pocus 变量先是用,在创建
-
javascript booster
-
vspacecode(whichkey)