Vim 的常用命令
基于 Vscode 中的 Vim,可以查看之 Vscode 配置 vim 能有助于理解
一、Vim 的模式
- normal 模式: 大部分命令执行
- insert 模式: 实现对文件内容的执行
- visual 模式: 实现多行的编辑
- vim 命令模式: 实现文本内容之外的操作
模式之间的转换:
-
normal --> insert i : 在光标前插入 insert I : 在光标后插入 Insert in header o : 在下一行插入 one line insert O : 在上一行插入 One Line Insert before a : 在光标后插入 after A : 在行尾插入 after the end of a line
这里 c(change) 类命令也会将 normal 模式转换为 insert 模式
-
insert --> normal esc 或者用户定义映射到 esc 的组合或者单独的按键: 大部分人会使用 Caps Lock 或者 j + j 绑定为 esc -
normal --> visual v/V -
visual --> normal esc 或 再按一次 v/V -
normal --> 命令模式 : -
命令模式 --> normal 清除命令 或 Esc 键
二、Vim 的常用命令
1. 光标移动
- 上下左右: k j h l
- 向上翻页: ctrl + b(back)
- 向下翻页: ctrl + f(forward)
- 跳到单词开头: w (往后查找) b(before 往前)
- 跳到单词结尾: e (往后查找) ge(往前查找)
- 跳到行首: 0 或者 ^(跳到从行首开始的第一非空字符)
- 跳到行尾: $
- 跳到第一行: gg
- 跳到最后一行: G
- 往前跳十九行: ctrl u
- 往后跳十九行: ctrl d
- 跳到指定行: linenumber gg (行号 + gg: 40gg)
- 从当前行往下跳 num 行: num j (10 j)
- 从当前行往前跳 num 行: num k (10 k)
- 跳到下个 {char} 所在位置: f {char}
- 跳到上个 {char} 所在位置: F {char}
- 跳到下个 {char} 的前一个字符位置: t {char}
- 跳到上个 {char} 的后一个字符位置: T {char}
- 重复上次的字符查找操作: ;
- 反向查找上次的查找指令: ,
2. 常用快捷
- 清除一行,更改内容: cc
- 清除多行,更改内容: c num c (c3c:清除三行)
- 删除一行: dd(delete)
- 删除一行: d num d
- 复制: yy(yanked)
- 修改: cc(change)
- 粘贴: p
- 撤销: u / shift + U
- 恢复上一步撤销: ctrl + r
- 更改单个字符内容: 光标选中字符, r {char} char 为更改后的字符
- 搜索:/keyword 键入 enter 后,按 n 跳转到下一个 keyword 开头,N 跳到下一个 keyword 开头
3. 动作(motion)
4. 操作符号
- d(delete):删除
- c(change):修改
- y(yank):复制
- v(visual):复制
5. 切换大小写
- U:将光标下的字符改成大写
- u:将光标下的字符改成小写
- ~:将光标下的字母改变大小写
- r:修改光标的下字符,r {char} 修改为 char 字符
- 3~:将光标开始位置的3个字母改变其大小写
- g~:改变当前的字母的大小写(大改小,小改大)
- gUU:将当前行的字母改成大写
- guu:将当前行的字母改成小写
- gUaw(gUiw):将光标下的单词改成大写
- guaw(guiw):将光标下的单词改成小写
许多操作都是结合了motion 进行选中
三、Tips
1. 代码中的操作(Tips)
- gd: goto define (跳转到函数定义)
- ^O:返回上一个窗口
- gh:函数的声明(参数)
- gt:往后标签页跳
- gT:往前标签页跳
- ctrl(command) + 0 :跳转到左侧文件栏
- jk:上下选择文档
- hl:左右选择文档,即打开和关闭文件夹
- space:空格打开文档,或者打开关闭文件夹,按下 l 后光标跳转到文件中,如果侧边栏设置在了右边,应该按 h , 使光标向左移动
- Enter:进入文件,光标跳转至文件内
- ctrl + 1…n:跳转到第n个窗口,这个与网页浏览中的快捷件十分相似,在同一窗口中有多个网页打开时,也可以使用;以一及二,在桌面应用选择中,则可以使用 win + 数字对状态栏上的软件进行选择。
- ctrl + 数字:在拆分编辑器的情况下,同样是窗口的选择,不过,这里"窗口"的定义发生了变化
2. easymotion(插件之一)
应该查看 easymotion 的官方文档, Vscode安装 Vim 之后,未配置时,默认关闭,因此我们需要启用功能需要在配置项里开启 esaymotion 插件,同时需要在配置文件 setting.json 中,设定 <leader>,:配置文件里设定的按键:leader 一般是空格键
- leader leader s {char}:这里的查找是上下文均查找,按下相应的按键后,可以跳转到指定的位置,光标定位
- leader leader f {char}:这里的查找是仅仅下文查找,功能同上
更过功能可以查看esaymotion官方文档,Vscode 中的 Vim 文档举了不少例子
3. surround (插件之一)
surround 环绕,该功能是为了方便修改成对的符号 多尝试命令,就会懂得命令的操作以及含义;如这篇笔记就是通过 Vscode 中 Vim 命令编写的,确实使我懂得了不少命令
这里贴了文档中的示例,建议先看一遍视频
四、参考链接
五、总结
- Vim 中大部分的命令是可以添加数字进行操作的:如 d23d,从当前的光标向下删除23行,数字有时可以位于中间,如前,有时可以位于前面,如跳行:88gg
在练习的过程中可以多结合数字,有时会有意想不到的效果 - 动作是对符号,内容的选取,需要结合 v d c y(操作)使用
- 有时可以对按键进行配置,比如 leader 按键不希望使用 space(空格键),那么可以进行更改
这里附上我的vscode 的 setting.json 中 vim配置,仅仅简单配置了一下,禁用了几个按键(上下左右键,将按键映射置为空),如果需要配置,首先查看文档,结合别人的配置文件进行理解配置,否则很容易出现 bug
"vim.easymotion": true,
"vim.incsearch": true,
"vim.useSystemClipboard": true,
"vim.useCtrlKeys": true,
"vim.hlsearch": true,
"vim.insertModeKeyBindings":[
{
"before": ["j", "j"],
"after": ["<Esc>"]
},
{
"before":["<PageDown>"],
"after":["<Nop>"]
},
{
"before":["<PageUp>"],
"after":["<Nop>"]
},
{
"before":["<Up>"],
"after":["<Nop>"]
},
{
"before":["<Down>"],
"after":["<Nop>"]
},
{
"before":["<Left>"],
"after":["<Nop>"]
},
{
"before":["<Right>"],
"after":["<Nop>"]
}
],
"vim.normalModeKeyBindingsNonRecursive": [
{
"before": ["<leader>", "d"],
"after": ["d", "d"]
},
{
"before": ["<C-n>"],
"commands": [":nohl"]
},
{
"before":["<Up>"],
"after":["<Nop>"]
},
{
"before":["<Down>"],
"after":["<Nop>"]
},
{
"before":["<Left>"],
"after":["<Nop>"]
},
{
"before":["<Right>"],
"after":["<Nop>"]
}
],
"vim.leader": "<space>",
"vim.handleKeys": {
"<C-a>": false,
"<C-f>": true
},
|