1. 前言
使用vim已经有一段时间了,虽然开始的时候非常不习惯,但是熟悉一些快捷键后,效率得到了长足的提升,写个blog记录点常用的键位,自己用来备忘的的同时,如果能帮助到你的话,想来也是极好的。🐶
还有啊,感觉没有必要一开始就记住所有的键位,慢慢提高就好了👍
2. vim常用模式(包括一些基本操作)
-
正常模式 :
- 打开的文件默认就处于正常模式
- 无论处于那一种模式下,按
Esc
就可以进入正常模式 - 模式之间的切换依靠正常模式作为中转
- 在正常模式下可以使用快捷键
-
插入模式
-
进入插入模式有多种方法,区别在于进入插入模式之后光标的位置
键位 作用 i 在光标的前边进入插入模式 I ( 这是大写的 i ) 在当前行的行首进入插入模式 a 在光标的后面进入插入模式 A 在当前行的行尾进入插入模式 o 在当前行的下方插入一个空行,并进入插入模式 O 在当前行的上方插入一个空行,并进入插入模式 s 删除光标所在位置的字符,并进入插入模式 S 清除当前行的字符(不删除此行),并进入插入模式
-
-
命令行模式
-
正常模式下按
:
进入命令行,输入命令之后按Enter
执行键位 作用 :set nu 显示行号 :set nonu 取消行号 :行号 跳转至指定位置
-
-
替换模式
-
按
R
进入替换模式- 此时可以输入内容,且输入的内容会替换掉光标所在位置的原字符。
- 按
Backspace
可以还原被替换的字符
-
作用类似的命令
键位 作用 r 替换光标所在字符,将光标移动到需要替换的字符上,按 r 键,然后输入新的字符 nr(n是数字) 从光标处开始将n个字符全部替换
-
-
可视模式
-
进入可视模式中可以使用h,j,k,l来移动光标,进而选择一部分字符作为编辑区域,然后可以对选中的区域进行一些其他的操作(d、y)
-
被选中字符会高亮(没这么亮的)
键位 作用 v(小写) 以字符为单位选择文本 V(大写) 以行为单位选择文本
-
3. 光标的移动(正常模式下)
-
基本的移动(可以与后面的命令搭配使用,非常重要)
键位 作用 h , j , k , l ( 小写的 L ) 左,下,上,右 0 or ^ 将光标移动到当前行的行首 $ 将光标移动到当前行的行尾 b 将光标移动到所在单词的起始处 e 将光标移动到所在单词的结尾处 w 将光标移动到所在单词的下一个单词的起始处 gg 将光标移动到文件的开头 G 将光标移动到文件的结尾 注1:数字 + 键位 =重复多次 例如:5h表示向左移动5个字符
注2: 行号 +
G
,可直接跳转至指定位置 注3:
:行号
,可直接跳转至指定位置 -
翻屏
键位 作用 ctrl+b 上翻一屏 ctrl+f 下翻一屏 ctrl+u 上翻半屏 ctrl+d 下翻半屏 zz 将当前行移动到屏幕中央
4. 文本操作(正常模式下)
-
撤销
键位 作用 u 撤销最后一次修改 Ctr + r 反撤销 -
删除
键位 作用 x 删除选中的单一字符 dh 删除光标前的一个字符 dl ( l是小写的L ) 删除光标选中的字符 dj 删除当前行,以及下一行 dk 删除当前行,以及上一行 d0 or d^ 删除光标从当前位置( 不包括 )到该行行首的所有字符 d$ 删除光标从当前位置( 包括 )到该行行尾的所有字符 db 删除光标从当前位置( 不包括 )到该单词起始处的所有字符 de 删除光标从当前位置( 包括 )到该单词结尾处的所有字符 dw 删除光标从当前位置( 包括 )到下一个单词起始处的所有字符 dgg 删除当前行到文件开头的所有字符 dG 删除当前行到文件结尾的所有字符 dd(使用2个相同字母的,往往是常用的操作) 删除当前行 注1:d + 数字 + 键位 = 删除 范围(数字+键位 表示的范围) 例如:d5h表示删除左边5个字符,5h表示范围
注2:上面这个注1非常重要
注3:vim的删除操作更类似于Windows的剪切操作,被删除的内容会被放在缓冲区中,等你来粘贴它。
-
粘贴
键位 作用 p(小写) 可以将最后一次删除的内容粘贴到光标之后;如果粘贴的内容以整行为单位,那么会粘贴到下一行 P(大写) 可以将最后一次删除的内容粘贴到光标之前;如果粘贴的内容以整行为单位,那么会粘贴到上一行 -
拷贝
键位 作用 yh 拷贝光标前的一个字符 yl ( l是小写的L ) 拷贝光标选中的字符 yj 拷贝当前行,以及下一行 yk 拷贝当前行,以及上一行 y0 or y^ 拷贝光标从当前位置( 不包括 )到该行行首的所有字符 y$ 拷贝光标从当前位置( 包括 )到该行行尾的所有字符 yb 拷贝光标从当前位置( 不包括 )到该单词起始处的所有字符 ye 拷贝光标从当前位置( 包括 )到该单词结尾处的所有字符 yw 拷贝光标从当前位置( 包括 )到下一个单词起始处的所有字符 ygg 拷贝当前行到文件开头的所有字符 yG 拷贝当前行到文件结尾的所有字符 yy 拷贝当前行 注:y + 数字 + 键位 = 拷贝 范围(数字+键位 表示的范围) 例如:y5j表示拷贝当前行以及下面的5行,5j表示范围
-
修改
键位 作用 ch 删除光标前的一个字符,并进入插入模式 cl ( l是小写的L ) 删除光标选中的字符,并进入插入模式 cj 删除当前行,以及下一行,并进入插入模式 ck 删除当前行,以及上一行,并进入插入模式 c0 or c^ 删除光标从当前位置( 不包括 )到该行行首的所有字符,并进入插入模式 c$ 删除光标从当前位置( 包括 )到该行行尾的所有字符,并进入插入模式 cb 删除光标从当前位置( 不包括 )到该单词起始处的所有字符,并进入插入模式 ce 删除光标从当前位置( 包括 )到该单词结尾处的所有字符,并进入插入模式 cw 删除光标从当前位置( 包括 )到下一个单词起始处的所有字符,并进入插入模式 cgg 删除当前行到文件开头的所有字符,并进入插入模式 cG 删除当前行到文件结尾的所有字符,并进入插入模式 cc 删除当前行的字符,并进入插入模式 注1:c+ 数字 + 键位 = 删除 范围(数字+键位 表示的范围) 例如:c5k表示删除当前行以及上面的5行,并进入插入模式,5k表示范围
注2:不难发现,修改类似于删除再加上插入。
5. 排版
6. 查找与替换
-
查找
键位 作用 /char 查找字符char的位置(按n下一个,按N上一个),并高亮匹配的字符。( :nohl
取消高亮)注: 按
Shift
+*
查找光标所在的单词 -
替换(old替换为new)
键位 作用 :s/old/new
使用new替换当前行中第一个old :s/old/new/g
使用new替换当前行中所有的old :%s/old/new/g 使用new替换文件中所有的old :%s/old/new/gc 使用new替换文件中所有的old,但每次替换前先请示用户 :nu1,nu2s/old/new/g 使用new替换文件中nu1行到nu2行里所有的old
7. 文件操作
键位 | 作用 |
---|---|
:w | 保存 |
:w! | 若文本为只读时,强制保存 |
:q | 退出vim |
:q! | 不保存,强制退出 |
:wq | 保存并退出 |
:wq! | 保存并强制退出 Vim 编辑器 |
:e! | 放弃所有修改,并从新载入文件的原始内容 |
:w filename | 另存为到 filename 文件;且可以与可视模式配合使用,另存为可视模式下选取的字符到filename文件 |
:r filename | 读取文件内容,并插入到当前行的下一行 |
8. vim中执行shell命令
-
输入shell命令的方式
键位 作用 :!command 在不退出vim的情况下,执行shell命令command :r !command 将shell命令command的结果插入到当前行的下一行 :start,end !command 使用shell命令command,来处理start行到end行中的内容,并用处理结果替换start行到end行中的内容 注:command为占位符,使用时请输入具体命令,例如:
:!ls -al
、:r !date
、:1,4 !sort
9. 补充
-
数字 + 键位 ,可以表示该操作执行多少次,并且还可以表示范围。
- 如:5dd 表示删除5行(5表示执行次数)
- 如:d5k 表示删除当前行,以及上面的5行(5k表示范围)
- 所以记住基本的光标移动,就可以和d、y、c 搭配出很多组合,这是一个窍门。
-
Ctrl
+g
查看本文件信息。 -
按
%
定位括号,在括号的任意一边上按%
就可以跳转到匹配的另一半括号上。- 在编程中用来确认括号是否成对出现
-
同时打开多个文件的shell命令
键位 作用 vim -o [filename1] [filename2] [filename3] 以垂直排列的方式打开多个文件(命令中的o是小写的) vim -O [filename1] [filename2] [filename3] 以水平排列的方式打开多个文件(命令中的O是大写的) Ctrl + w + w 将光标切换到下一个文件中 Ctrl + w + j 在垂直排列方式下,将光标切换到当前文件下面的一个文件中 Ctrl + w + k 在垂直排列方式下,将光标切换到当前文件上面的一个文件中 Ctrl + w + h 在水平排列方式下,将光标切换到当前文件左面的一个文件中 Ctrl + w + l(小写L) 在水平排列方式下,将光标切换到当前文件右面的一个文件中 :qa 退出所有打开的文件 :qa! 不保存,强制退出所有打开的文件 :wqa 保存并退出所有打开的文件