前言
之前学习过vim编辑器,这是一款很棒的编辑器,它在很多Linux系统中有提供,使我们可以在shell中编辑文件。然而某些环境下只提供了vi编辑器,而vi编辑器的操作和vim有部分不同,所以我花了点时间将基本操作整理了一下。不要求自己完全掌握这两款工具,只为保证遇到只有vi的环境可以编辑文件。
vi / vim最最最基本的操作流程:使用vi或vim后跟随文件名打开文件,在此时所处的命令模式下通过方向键找到要修改的地方,按shift+x向前删除内容,按a进入插入模式,使用键盘输入要改的内容。输入完成后按ESC回到命令模式,输入 :wq 按回车保存退出,弄烂了不想保存则输入:q! 按回车强行退出。
创建文件:
创建文件是很简单的操作,我们可以使用系统内置的 touch
命令创建一个文件。
touch test.txt
也可以使用vi或vim来创建,如果此处没有这个文件。如果有这个文件的话执行此命令是打开文件。此命令后面的参数可以是相对路径也可以是绝对路径。
# vi:
vi test.txt
#vim:
vim test.txt
此命令执行后vi或vim会打开并处于命令模式,想要正式保存退出,可以按 Esc键
确保进入命令模式,然后按 :
进入底行(扩展命令)模式,输入 wq
命令按回车键创建保存退出。
编辑器工作模式:
使用vi和vim编辑器首先要了解工作模式的概念,类似的,它们均提供了常用的三大模式。此处列表对比:
vi |
vim |
命令模式(Command Mode): 打开时默认模式,按Esc 进入 用于一般按键命令操作,如快速移动光标、复制删除等。 |
命令模式(Command Mode): 打开时默认模式,按Esc 进入 用于一般按键命令操作,如快速移动光标、复制删除等。 |
插入模式( INSERT Mode): 命令模式下按 a 或 i 进入 用于文本输入 |
插入模式( INSERT Mode): 命令模式下按 a 或 i 进入 用于文本输入 |
末行模式(Last line Mode): 命令模式下按 : 进入 扩展的命令输入,比如保存和退出(wq )。 |
扩展命令模式(Extended Command Mode): 命令模式下按 : 进入 扩展的命令输入,比如保存和退出(wq )。 |
vi 无此模式 |
可视模式(VISUAL Mode): 命令模式下按 v 进入 此模式包含可视内容选择操作。 |
vi和vim在打开时默认处于命令模式,此模式用于移动光标,定位编辑点,复制删除内容。当我们将光标移动到目标编辑点后,进入插入模式以使用键盘键入内容。若完成某位置内容键入后想要移动光标,则回到命令模式重复操作。若完成编辑需要退出,也是先回到命令模式,然后进入扩展命令模式,输入相关命令退出。命令模式是一切的开始,其他模式都需要从此进入,退出其他模式也将回到命令模式。
vi和vim在工作模式方面操作基本一致,只是vim多了一个可视模式。此功能在我们简单编辑文件时意义不大。以上大致的说明了编辑过程中三大模式该在什么阶段使用。
插入模式:
所谓插入模式就是能够打字输入的模式。使用 i
键进入插入模式,光标保持不动;而使用 a
键进入插入模式将使光标自动后退一位,退出模式时光标会前进一位。顺便一提, 按键 I、A、O
均有进入插入模式的功能,且分别使用大小写键入时效果不同,有兴趣可自行尝试或参阅:vim非完全学习手册。
注意:部分环境中的vi(例如处于vi兼容模式下的vim)无法在插入模式下通过方向键移动光标,其表现为按 上下右左
键会出现字符ABCD
,这可能与我们常见编辑器的操作不同。此时我们可能需要按 Esc
键回到命令模式才可通过方向键移动光标。以上不难看出,使用 a
键进入插入模式明显更符合大多操作习惯。
注:导致以上问题原因可能有很多,也有不同办法可以处理,如果是vim处于vi兼容模式导致的此问题,可以在扩展命令模式执行set nocp 命令使其退出兼容模式解决。参考链接中提供了一篇相关文档供参考。
命令模式:
vi和vim编辑器打开时默认处于命令模式,vim可能会在左下角标记-- INSERT --
以指示插入模式,但vi可能没有。如不在或不确定是否处于命令模式,请按Esc
键进入。
注意:vi和vim编辑器命令模式下输入的命令,无论单字符还是组合键,都是大小写敏感的,操作时请注意大小写!
光标的移动:
事实上,简单的编辑并不需要了解太详细的光标移动操作,会使用方向键移动光标也能完成。了解光标移动可以快速定位编辑位置,追求尽快开始使用可以跳过本节。
- 使用键盘上的方向键移动光标,但考虑更高效的使用,也可尝试学习vim的命令键:
h
(左)j
(下)k
(上)l
(右)。
- 按键
0
快速跳至当前行首;使用按键 $
快速跳至当前行末。(注意:$
需使用Shift+4
实现)
- 使用
gg
按键快速跳至首行;使用 G
按键快速跳至末行。(注意前者时按两次g
,后者通过Shift+G
实现)
- 使用
Ctrl+f
向后翻一整页,使用 Ctrl+b
向前翻一整页。(使用键盘上的 Page Up
和 Page Down
也可实现)
- 使用
7 G
按键快速跳至第七行;即通过按出 行号
后再加大写字母 G
(即Shift+G
),即可快速跳转至指定一行。
- 可以使用
/string
命令从内容中查找关键词;string表示字符串,即输入关键字进行查找;我们可以使用(n/N)在查询到的多个结果中上下移动箭头。我们可以使用 /^string
这种,关键字前加 ^
符号,指定搜索以此关键字开始的行; 使用/string$
这种,关键字后加$符号,指定搜索以此关键字结尾的行。
编辑命令:
- 按
x
键可删除光标所在字符,按 X
键(大写,即 Shift + x )删除光标前的一个字符。注意,虽然大多版本的 vi 或 vim 中可以直接按 Backspace
键向前删除,但某些环境中的 vi 、或某些版本的 vi 中Backspace
是无效的,所以需要牢记标准操作。追求尽快开始使用着本节剩余内容可以跳过。
- 使用
dd
剪切光标所在行内容;使用 5dd
剪切光标及以后共5行。此命令常用于删除行。
- 使用
yy
复制光标所在行内容,使用 p
键将复制或剪切的内容粘贴(paste)到光标处。
- 使用
u
撤销(undo)之前的操作,使用 Ctrl+r
组合键重做(redo)撤销的操作。
退出:
- 命令模式下,按住
Shift
键按两次 z
键,即输入 ZZ
即保存并退出。安全考虑,此方法不建议使用,建议使用扩展命令模式下的退出命令。
扩展命令模式:
在命令模式下按 :
(即Shift+;
) 键进入扩展命令模式。此模式亦有人称其为末行模式或底行模式(可能于命令于末行输入有关)。在扩展命令模式下,输入扩展命令然后按回车键执行命令。如需从此模式回到命令模式,按 Esc
键。
保存与退出:
- 在扩展命令模式下,输入
w
回车可保存文件。
- 在扩展命令模式下,输入
q
回车可退出,但文件有未保存更改时会失败。
- 在扩展命令模式下,输入
wq
回车可保存并退出。
- 在扩展命令模式下,输入
w!
回车可强行保存。
- 在扩展命令模式下,输出
q!
回车可强行退出,不保存退出。
- 在扩展命令模式下,输入
wq!
回车可强行保存并退出。
- 在扩展命令模式下,输入
x
回车可保存并退出,此处x
为小写,大写X
为添加密码,慎用!
环境配置:
vi/vim编辑器的设置,称之为环境配置。注意某些vi编辑器可能没有此功能。
# 设置显示行号
set nu
# 取消显示行号
set nonu
# 关闭 vi 兼容模式
set nocp
总结:
想要vi和vim都用的好,建议养成以下操作习惯:避免在插入模式使用方向键移动光标,使用 a
键进入插入模式而不是使用 i
键,使用 x
键或 X
键(大写,即 Shift + x )删除字符,而不是使用 Backspace
。
参考: