键位映射:建议使用jj代替esc,毕竟esc离手那么远
linux下修改方法是:vim /etc/vim/vimrc 在该文件尾添加inoremap jj <Esc>该方法可以同样可以用到其他键位映射上
i:表示这个映射是在插入模式(insert mode)下有效的。Vim 有多种模式,包括普通模式(normal mode)、插入模式、命令模式等。i 限定了这个映射只在插入模式下起作用。
nore:这是 noremap 的缩写部分,意味着这个映射是“非递归”的(non-recursive)。默认情况下,Vim 的映射可以是递归的,这意味着如果你映射了一个键到另一个键序列,而那个键序列本身又包含映射,那么 Vim 会尝试解析并应用这些递归映射。使用 noremap(或简写为 nore)可以避免这种递归行为,使得映射更加直接和可预测。
map:这是基本的映射命令,用于定义键与键序列之间的对应关系。
vscode修改的方法:在setting.json文件里添加
"vim.insertModeKeyBindings": [
{
"before":["j","j"],
"after":["<Esc>"]
}
]
一般我们遇到的单词不会出现连续两个j,如何输入两个j,那只能输入一个再等一会再输入了,实在不行改,你改,改成jk
普通模式下的映射功能:
键位 | 功能 | 快速记忆 |
---|---|---|
i | 字符前插入 | insert |
I | 行首插入 | 大写字符一般对应小写字母的功能稍微改变 |
o | 上一行插入 | |
O | 下一行插入 | |
a | 字符后插入 | |
A | 行尾插入 | |
h | 向左 | |
j | 向下 | |
k | 向上 | |
l | 向右 | |
w | 跳到下一个单词开头 | word |
b | 跳到本单词或上一个单词开头 | begin |
e | 跳到本单词尾或下一个单词尾 | end |
ge | 跳到上一个单词的结尾 | |
0 | 跳到行首 | |
^ | 跳到从行首开始第一个非空字符 | |
$ | 跳到行尾 | |
gg | 跳到第一行 | |
G | 跳到最后一行 | |
f加一个字符 | 光标跳到同一行的下一个该字符上 | |
F加一个字符 | 光标跳到同一行的上一个该字符上 | |
t加一个字符 | 光标跳到下一个该字符的前一个字符位置上 | f,F和t,T的主要区别在于t是跳到字符前的 |
T加一个字符 | 光标跳到上一个该字符的后一个字符都位置上 | |
; | 执行上一次查找操作 | |
, | 反向查找上一次的查找指令 | 反向是如何上次是t那么该次是T |
yy | 复制改行 | |
y1G | 复制所在行到1行的所有数据 | |
nyy | 复制向下数n行 | |
yG | 复制光标所在行包括未尾所有数据 | |
p,P | 向下一行粘贴和向上一行粘贴 | |
dd | 删除该行 | |
d1G | 删除该行到第一行 | |
dG | 删除改行到行尾 | |
dw | 删除光标后的单词 | |
daw | 删除光标所在的单词 | |
J | 将光标所在行与下一行的数据合成一行 | |
x,X | 向后或向前删除一个字符 | |
nx | 向后删除n个字符 | |
n+回车 | 向下移动n行 | |
nG | 移动到第n行 | |
M | 移动到当前屏幕中央位置 | |
L | 移动到当前屏幕最低行 | |
G | 移动到文件最后一行 | |
u | 还原过去操作 | |
Ctrl+r | 重复上一个操作 | |
. | 重复前一个操作 |
命令模式
按键 | 效果 |
---|---|
:w | 保存写入内容 |
:w! | 强制保存 |
:q | 退出vim,不保存 |
:wq | 保存并退出 |
:w [file name] | 另存到filename |
:set nu | 文件每行设置行号 |
:set nonu | 取消设置的行号 |
:n,m w [filename] | 将n到m另存为filename |
:! command | 暂时离开vim,使用enter返回 |
visual模式
键位 | 功能 | 快速记忆 |
---|---|---|
i+"或者(等等 | 比如该单词在(word) 中,会选中word | |
iw | 选中该单词 | |
a+"或者( | 选中包括”或者( | |
aw | 选中包括单词前空格 |