- 一、基本使用流程
- 二、普通命令模式
- (一)切换到插入模式(编辑/写入/输入)
- (二)切换到可视模式(选择文本模式)
- (三)切换至底行命令模式
- (四)替换/修改
- 1. 切换到替换模式
- 2. 替换命令
- 3. 修改替换(删除旧的,输入新的)
- (五)互换位置
- (六)字符大小写切换
- (七)选择文本
- (八)复制
- (九)粘贴/恢复
- (十)删除/剪切
- (十一)重复前一个操作
- (十二)标记(其实没啥用)
- (十三)多行合并
- (十四)文本行移动/缩进
- (十五)撤回/撤销
- (十六)游标移动
- 1. 以词为单位移动
- 2. 以字符为单位移动
- 3. 按句子移动
- 4. 按段移动
- 5. 移动游标到匹配字符
- 6. 查看游标所在行号
- (十七)跨行移动文本内容/剪切文本内容
- (十八)屏幕滚动命令
- 1. 滚屏命令
- 2. 分页命令
- (十九)文档状态/统计文档信息
- (二十)查找/搜索字符串
- (二十一)查看历史命令
- (二十二)查看历史搜索记录
- (二十三)保存退出
- (二十四)宏录制
- (二十五)打开光标所在词的使用手册
- 三、可视模式
- (一)字符可视模式
- 1. 选择文本
- 2. 复制文本
- 3. 删除文本
- 4. 修改替换
- 5. 文本行移动
- 6. 大小写切换
- 7. 合并多行
- 8. 加密文本
- 9. 保存文本
- 10. 文本排序
- 11. 移动光标
- 12. 切换到插入模式
- 13. 退出可视模式
- (二)行可视模式
- 1. 选择文本
- 2. 复制文本
- 3. 删除文本
- 4. 修改替换
- 5. 文本行移动
- 6. 大小写切换
- 7. 合并多行
- 8. 加密文本
- 9. 保存文本
- 10. 文本排序
- 11. 移动光标
- 12. 切换到插入模式
- 13. 退出可视模式
- (三)块可视模式
- 1. 选择文本
- 2. 复制文本
- 3. 删除文本
- 4. 修改替换
- 5. 文本行移动
- 6. 大小写切换
- 7. 合并多行
- 8. 加密文本
- 9. 保存文本
- 10. 文本排序
- 11. 移动光标
- 12. 切换到插入模式
- 13. 退出可视模式
- 四、底行命令模式
- 五、插入模式
- (一)选择文本
- (二)复制文本
- (三)粘贴文本/插入寄存器的内容
- (四)运算表达式
- (五)删除文本
- (六)移动文本
- (七)移动光标
- (八)临时切换到普通命令模式
- (九)修改/替换
- (十)搜索
- (十一)退出插入模式
- (十二)自动补全
- (十三)翻页
- 六、vim 命令打开文件及选项参数说明
- 七、寄存器
- 八、查看 vim 编辑器的帮助文档
下面讲解的 vim 功能都是基于以下的系统环境和软件版本:
Linux 内核版本:4.18.0-193.6.3.el8_2.x86_64 Linux 发行版本:CentOS Linux release 8.2.2004 (Core) VIM 版本:8.0.1763 注:查看 vim 的各个选项使用说明:vim -h 或 vim --help;查看 vim 的版本信息:vim -v 或 vim --version
一、基本使用流程Linux 系统的命令终端中,经常会使用 vi 或者 vim 编辑器编辑文件,基本操作流程如下:
- 在命令终端输入
vim /etc/liaowenxiong.txt
打开指定的文件,默认进入 vim 的“普通命令模式”(Normal Mode) - 在“普通命令模式”下输入
i
进入编辑界面,也就是 vim 的“插入模式”(Insert Mode) - 编辑好之后按
Esc
返回到 vim 的“普通命令模式” - 按冒号
:
进入 vim 的“底行命令模式”(Last Line Command Mode or Ex Command Mode) - 输入
q!
或者wq
返回到命令终端(也叫控制器)
normal mode.
vi/vim 的默认模式就是普通命令模式,启动 vi/vim 就进入普通命令模式,在插入模式和底行模式下按 Esc
回到普通命令模式,该模式下常用的命令如下:
i
切换到插入模式,i
在当前游标前(就是游标左边)插入字符I
在行首插入a
切换到插入模式,a
在当前游标后(就是游标右边)插入字符A
在行末插入o
切换到插入模式,o
在当前行后(就是当前行的下面)插入一个新行O
在当前行前(就是上面)插入一个新行
技巧: 假如我要一次性输入 30
个等号 =
,可以在普通命令模式下,输入:30i=
,就是先输入数量 30
,接着按 i
切换到插入模式,接着输入 1
个等号 =
,最后按 esc
返回普通命令模式,就成功插入 30
个等号 =
啦!这在插入分割线时非常有用哦~
:
切换到底行模式,可以在最底一行输入命令
(四)替换/修改
1. 切换到替换模式
命令说明R
按下大写的 R 键,屏幕左下角出现 --REPLACE--
字样,说明你已经处于“替换模式”。此时输入字符可以连续替换光标及其后面的内容。注意:退格键(Backspace)在替换模式中被解释为:如果左边的内容被替换过,则恢复到原来的样子;如果没有被替换过,则光标向左移动。修改完毕后,按下 Esc 键回到“普通命令模式”。若新输入的字符数超过原有对应字符数,则多出部分就附加在后面。#R
若在命令 R 之前加上一个数字,例如 5R,则表示新输入的文本重复出现 5 次,但只取代一个被输入文本所覆盖的字符序列,当前行中未被覆盖的内容仍保留下来,只是位置相应右移。这个命令其实没有意义
2. 替换命令
命令说明r
r 命令用于替换光标所在位置的字符,具体操作是,先将光标移动到需要替换的字符处,按一下 r 键,然后输入新的字符,就完成了一次替换。再次替换需要再次按下 r 键才可以。注意,全程不会进入插入模式。其实整个操作还是在“普通命令模式”下完成的,所以这个命令并不算是切换到“替换模式”下#r
光标所在位置的字符起 #
个字符被 r 后所输入的新字符替换掉
3. 修改替换(删除旧的,输入新的)
文本内容的修改是指在编辑过程中,可以对文本中的某些字符,某些行进行修改,即用新输入的文本代替需要修改的老文本,它等于先用删除命令删除需要修改的内容,然后再利用插入命令插入新的内容。所以在使用修改命令后,vi/vim 进入到“插入模式”下,当输入完新的内容后,再按 Esc
回到“普通命令模式”。
s
该命令表示用随后输入的文本替换当前游标所在的字符。如果只用一个新字符替换游标所在字符,则s
命令与r
命令功能类似,如sh
与rh
的作用都是将游标所在字符变为h
。但二者也有区别,r
命令是在命令模式下替换,而s
命令的工作模式是先删掉游标所在字符后进入插入模式,在插入模式
下输入文字完成替换。#s
以输入的文本替换光标之后 #
个字符,包含光标所在位置的字符。即用 s
后输入的文本替换从光标所在字符开始及其后的 #-1
个字符(共 #
个字符)S
表示用新输入的文本内容替换光标当前行(整行,不管光标位于何列)。输入S
后,光标所在行成为空行,切换到“插入模式”,光标停在行的开头#S
表示用新输入的文本替换光标所在行及其下面 #-1
行的文本内容。例如 3S
,则表示有 3 行(包括光标当前行及其下面 2 行)要被 S
命令之后输入的正文所替换cw
输入该命令后,光标所在位置到词尾之间的字符被删除,并切换到“插入模式”,然后可以输入所需要的字符,输入完成之后按 Esc
回到“普通命令模式”,这样就完成了用所输入的内容替换光标位置至词尾的所有文本内容c#w
或 #cw
替换游标后面 #
个词,包含游标所在位置的词在内。例如:c6w
,就会删除游标后 6 个词,同时切换到插入模式中,接着可以输入新的内容。什么意思呢?就是游标所在位置的词以及后面的 5 个词被删除了,然后切换到插入模式,接着输入的内容就相当于是替换掉被删的 6 个词的内容。c#l
或 #cl
修改(改写/替换)游标后的 #
个字母,包含游标所在位置的字符在内。c3j
j
表示向下,表示将游标所在行和下面3
行都删除,即游标所在行到往下数的第 3 行之间的文本删除,然后进入“插入模式”c3G
输入c3G
,游标所在行到第 3 行之间的文本删除,然后进入“插入模式”,注意是整个文档的第 3 行c3k
k
表示向上,表示将游标所在行和上面3
行都删除,会进入“插入模式”c$
修改从游标当前位置开始到本行末尾范围内的内容,先删除旧内容,进入“插入模式”,再输入新内容完成修改替换C
C
命令和c$
命令相同,可以修改从游标当前位置开始到行尾的内容。#C
当在命令C
之前加上数字 #
时,表示可以修改指定行数的内容。例如,3C
,表示把游标所在位置起之后(注意不是整行)直到下面两个整行的内容删除,替换成随后输入的内容cc
和 S
相同,修改游标所在行(不管游标处于该行的何列)的内容,即先删除光标所在行的文本内容成为空行,再进入“插入模式”,光标会跳到行首准备输入#cc
在cc
之前加上数字 #
,表示要从游标当前行算起,往后面数,一共修改 #
行的内容。例如,5cc
表示先删除游标所在行及其下面的 4
行,然后输入新的内容#ch
或 c#h
改写游标前 #
个字符,包含游标所在位置的字符在内
(五)互换位置
命令说明xp
光标位置的字符和光标后面一个字符位置互换
(六)字符大小写切换
命令说明~
反转光标下字符的大小写gu
直接输入 gu 将游标所在行及其下一行的英文字母转成小写gU
直接输入 gU 将游标所在行及其下一行的英文字母转成大写guG
游标所在行到文档的最后 1 行的英文字母转成小写gu0
或者 gu^
游标所在位置到行首的英文字母转成小写,不包含游标所在位置的字符gu$
游标所在位置到行尾的英文字母转成小写gU$
游标所在位置到行尾的英文字母转成大写gu5k
游标所在行及其上面 4 行中的英文字母转成小写,大写同理gu5j
游标所在行及其下面 4 行中的英文字母转成小写,大写同理gu3l
游标所在位置的字符及其右边的2个字符中的英文字母转成小写,大写同理guH
游标当前行至屏幕所显示文本的第 1 行的英文字母转成小写,大写同理gUG
游标所在行到文档的最后 1 行的英文字母转成大写guL
游标当前行至屏幕所显示文本的最后 1 行的英文字母转成小写,大写同理
总结:往左边的基本不包含游标所在位置的字符,而往右边的基本都会包含游标所在位置的字符
(七)选择文本 命令说明ggvG按下 ggvG ,除了最后一行,选中剩余的全部文本,并进入可视模式下,选中的文本高亮显示ggVG按下 ggVG 才是真正的全选文本,并进入可视模式下,选中的文本高亮显示 (八)复制Vim 的拷贝与大家预期的方式可能略有不同。拷贝命令不是大家料想的 c。因为 c 表示“修改”,已经被占用了。Vim 用拉取(yank)来表示拷贝,简写为 y。
命令说明yw
将游标所在位置的字符到词尾的字符复制到缓冲区中#yw
或 y#w
复制游标所在位置的词及其后面的 #-1
个词到缓冲区yy
复制游标所在行到缓冲区,所谓的缓冲区就是剪贴板,或者叫寄存器y0
从游标所在位置复制到行首y$
从游标所在位置复制到行尾#yy
例如:6yy
表示拷贝从游标所在行往下数
6行文字yl
复制游标后面的 1
个字符#yl
或 y#l
复制游标所在位置及其后面 #-1
个字符yh
复制游标前面的 1
个字符#yh
或 y#h
复制游标所在位置及其前面 #-1
个字符9,15 copy 16
或 9,15 co 16
或 9,15 t 16
将第 9
行至第 15
行的文本内容,复制到第 16
行的后面9,15 move 16
或 9,15 m 16
将第 9
行至第 15
行的文本内容,移动(剪切)到第 16
行的后面6 t .
把第 6 行复制到当前行下面6 t
同上,只是省略了 .
. t $
把当前行复制到文本末尾t $
同上. m $
将当前行移动到文本末尾ggyG
按下 ggyG 复制全部文本,注意:G 必须大写y1G
或 ygg
复制游标所在行及其上面的所有行yG
复制游标所在行及其下面的所有行yaw
复制游标所在位置的词yiw
复制游标所在位置的词,好像和 yaw
效果一样yas
复制游标所在位置的句子yit
复制游标所在位置的标签的内容。例如:sfd
,假设当前游标落在标签
上,那么按下 yit
则会复制 sfd
yft
复制游标所在行上从游标位置算起到后面第 1 个字符 t
。注意:指定字符也复制yFt
复制游标所在行上从游标位置算起到前面第 1 个字符 t
。注意:指定字符也复制ytk
复制游标所在行上从游标位置算起到后面第 1 个字符 t
的前一个字符yTk
复制游标所在行上从游标位置算起到前面第 1 个字符 t
的后一个字符y/t
复制游标所在行上从游标位置算起到后面第 1 个字符 t
之间的文本内容 。注意:指定字符没有被复制
(九)粘贴/恢复
命令操作说明p
将缓冲区(寄存器)的内容粘贴到游标所在位置的后面P
将缓冲区(寄存器)的内容粘贴到游标所在位置的前面#p
粘贴指定的寄存器的内容,常用来恢复被删除的内容,其中 #
为寄存器的名称,详见《vim 的寄存器/剪贴板》
(十)删除/剪切
命令说明x
删除游标所在位置的字符,注意此时没有进入“插入模式”,依旧是在“命令模式”下,相当于 dl
X
删除游标所在位置前面的 1 个字符,相当于 dh
Shift + x
删除游标所在位置前面的 1 个字符#x
删除游标所在位置的字符及其右边 #-1
个字符,共计删除 #
个字符。相当于 #dl
。例如:6x
表示删除游标所在位置的字符及其后面的 5
个字符,共计删除 6
个字符;即游标所在位置的及其右侧 5
个字符,共计 6
个字符被删除。注意:包含游标所在位置的字符#X
表示删除/剪切游标所在位置的字符及其前面 #-1
个字符,共计删除 #
个字符。例如:6X
表示删除游标所在位置的字符以及前面的 5
个字符,共计删除 6
个字符#dh
或 d#h
表示删除/剪切游标所在位置的字符及其前面 #-1
个字符,共计删除 #
个字符。#dw
删除游标所在位置的词及其后面的 #-1
个词,共计删除 #
个词。例如:输入 3dw,会将游标位置起后面的 3 个词的内容删除,包含游标所在位置的词dw
删除从游标位置起到词尾的字符,包含游标所在位置的字符dd
删除游标所在的行#dd
从游标所在行开始向后删除 # 行,例如:2dd 表示删除游标所在的行以及下面的 1 行,合计删除 2 行;3dd 表示删除游标所在的行,以及下面的 2 行,合计删除 3 行D
删除游标所在位置的字符到行尾d$
效果和D
一样,删除至行尾,游标位置的字符一起删除d0
删除(剪切)游标所在位置到行首的内容,游标所在位置的字符保留d^
删除至行首,游标所在位置的字符保留dj
删除游标所在的行和下面的一行d+回车
和 dj
一样。删除游标所在的行和下面的一行dG
删除游标所在行至文档结尾处,游标所在行也删除1dG
或 d1G
删除游标所在行至文档开始处,游标所在行也删除dgg
删除游标所在行至文档开始处,游标所在行也删除d)
删除从光标位置起到本句尾的全部字符,包含光标所在位置的字符d}
删除从光标位置起到本段落尾的全部字符,包含光标所在位置的字符dH
使用命令 dH
将会删除从“游标所在行”至“屏幕所显示文本的首行”的全部内容,“游标所在行”也删除dM
使用命令 dM
将会删除从“游标所在行”至“屏幕所显示文本的中间行”的全部内容,“游标所在行”也删除dl
删除游标所在位置的字符,类似 x
#dl
或 d#l
删除游标所在位置的字符及其右边 #-1
个字符,共计删除 #
个字符。dL
使用命令 dL
将会删除从“游标所在行”至“屏幕所显示文本的底行”的全部内容,“游标所在行”也删除daw
删除游标所在位置的词das
删除游标所在位置的句子d/f
它将删除当前游标所在位置到下一个字符 f
之间的内容。输入完 d/f
后,要按下“回车键”才行。注意:指定字符保留dfk
删除游标所在位置到下一个字符 k
。注意:指定字符也删除了dFk
删除游标所在位置到上一个字符 k
。注意:指定字符也删除了dtk
删除游标所在位置到下一个字符 k
的前一个字符。注意:指定字符也删除了dTk
删除游标所在位置到上一个字符 k
的后一个字符。注意:指定字符也删除了
(十一)重复前一个操作
命令说明.
不要怀疑,这就是小数点,意思是重复前一个动作
(十二)标记(其实没啥用)
使用标记可以快速移动。到达标记后,可以用 Ctrl + o
返回原来的位置,按下 Ctrl + i
游标跳到后一个标记处
m{a-z}
使用小写英文字母标记光标所在位置,这是局部标记,只用于当前文件。貌似标记的名称只能取英文字母或者数字,而且是单个字符。例如:按下 m + a
,是指按下 m
键,然后再按 a
键,则表示在光标所在位置打了一个标记,该标记取名为 a
m{A-Z}
使用大写英文字母标记光标所在位置,这是全局标记。标记之后,退出 Vim,重新启动,标记仍然有效`{a-z}游标移动到标记位置。例如:按下撇符号,再按下标记名称 a,游标则会移动到标记 a 所在的字符上。其实打标记,就是给某个字符打标记'{a-z}
移动到标记行的行首。例如:按下单引号,再按下标记名称 a
,游标就会移动到标记 a
所在的行的行首,这里的行首是指行的第 1
个字符``双撇号,移动到上次编辑的位置。" 也可以,不过 `` 是精确到列,而 " 精确到行 。如果想跳转到更老的位置,可以按 Ctrl + o
,跳转到更新的位置用 Ctrl + i
`"移动到上次离开的地方`.移动到最后改动的地方
(十三)多行合并
命令说明J
合并游标所在行及下一行为一行。合并后留有空格。如果在 J 命令之前给出一个数字n,例如3,则表示把光标当前行及其后面的2行(共3行)合并为一行gJ
合并游标所在行及下一行为一行。合并后不留空格
(十四)文本行移动/缩进
命令说明>>
将光标所在行右移 8
个空格。如果在 >>
命令之前给出一个数字 n
,例如 4
,则表示光标当前行及其下面的 3
行(共 4
行)都右移 8
个空格
命令相同,只是移动方向相反>G
光标所在行至文件末尾之间的所有行向右移动 8
个空格
按下 >
被选中的行向右移动8个空格,并返回到“普通命令模式”下
被选中的行向右移动8个空格,并返回到“普通命令模式”下
被选中的行向右移动8个空格,并返回到“普通命令模式”下
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?