vi/vim基本操作命令
vi 编辑器是所有 Unix 及 Linux 系统下标准的编辑器,初学者可以当作类似于 windows 上的文本文档差不多的东西。本文只是简单地介绍下 vi/vim 的基本用法和一部分指令,满足普通用户正常使用!vi 和 vim 它们都是多模式编辑器,不同的是 vim 是 vi 的升级版本,它不仅兼容 vi 的所有指令,而且还有一些新的特性在里面。例如语法高亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、 windows。
vi的基本概念
基本上 vi 可以分为三种状态,各模式的功能区分如下:
命令行模式(command mode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入插入模式
或底行模式
。插入模式(Insert mode)
只有在插入模式下,才可以进行文字输入,该模式下按ESC
键可回到命令行模式。底行模式(last line mode)
将文件保存
或退出
,也可以设置编辑环境,如寻找字符串、列出行号……等。 不过一般我们在使用时把 vi 简化成两个模式,就是将底行模式
也算入命令行模式
。
vi的基本操作
只要懂得这三项基本操作使用基本上就掌握 vi 使用了,其它命令只是帮助你更高效的使用 vi。能全部记住自然最好,记不住也没关系,用到的时候查下资料就好,如果经常使用相比不用刻意记也会记住的。
进入 vi
比如我要编辑一个名为myfile
的文本文件,只要输入vi myfile
即可进入这个文件的vi编辑界面。刚进入vi是处于命令行模式,这时是不能编辑文本的,需要切换到插入模式才能够输入或删除文字。切换至插入模式编辑文件
在命令行模式下按一下字母i
就可以进入插入模式,这时你就可以↑↓←→移动光标到对应位置,然后输入或删除文本了。顺带一体,使用 putty 这个 SSH 客户端时,不要用小键盘输入数字,会出错。退出 vi 和保存文件
在命令行模式下,输入:
键进入底行模式,例如::w newname
(将文件重命名为 newname 保存):wq
(保存并退出 vi,后面加入 ! 如:wq!
则是强制保存退出):q
(不保存退出 vi,后面加入 ! 如:q!
则是强制不保存退出,有时必须加!才能退出)
命令行模式功能键
插入模式
要进入插入模式有以下三种选择- 按
i
进入插入模式后,是从光标当前位置开始输入文件 - 按
a
进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字 - 按
o
进入插入模式后,是插入新的一行,从行首开始输入文字。
- 按
从插入模式切换为命令行模式
按ESC
键。移动光标
vi 可以直接用键盘上的↑↓←→
来移动光标,但正规用法是使用小写英文字母h
、j
、k
、l
来控制光标左、下、上、右移一格。
按ctrl+b
:屏幕往“后”移动一页。
按ctrl+f
:屏幕往“前”移动一页。
按ctrl+u
:屏幕往“后”移动半页。
按ctrl+d
:屏幕往“前”移动半页。
按数字0
:移到文章的开头。
按G
:移动到文章的最后。
按$
:移动到光标所在行的“行尾”。
按^
:移动到光标所在行的“行首”
按w
:光标跳到下个字的开头
按e
:光标跳到下个字的字尾
按b
:光标回到上个字的开头
按#l
:光标移到该行的第 # 个位置,如:5l,56l。删除文字
x
:每按一次,删除光标所在位置的“后面”一个字符。#x
:例如,「6x」表示删除光标所在位置的“后面”6个字符。X
:大写的X,每按一次,删除光标所在位置的“前面”一个字符。#X
:例如,「20X」表示删除光标所在位置的“前面”20个字符。dd
:删除光标所在行。#dd
:从光标所在行开始删除#行复制
yw
:将光标所在之处到字尾的字符复制到缓冲区中。#yw
:复制#个字到缓冲区yy
:复制光标所在行到缓冲区。#yy
:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。p
:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。替换
r
:替换光标所在处的字符。R
:替换光标所到之处的字符,直到按下ESC
键为止。返回上一步操作
u
:比如你在插入模式下误删了文本内容,想返回上一步,需先按ESC
键进入命令行模式,然后按下u
键,回到上一个操作。按多次u
可以执行多次恢复。恢复撤销操作
ctrl+r
:如果按u
不小心返回过头了,那么可以按下ctrl+r
恢复上一步撤销操作,同样可执行多次。更改
cw
:更改光标所在处的字到字尾处c#w
:例如,「c3w」表示更改3个字跳至指定的行
ctrl+g
列出光标所在行的行号。#G
:例如,「15G」,表示移动光标至文章的第15行行首。
底行模式下命令简介
在使用底行模式之前,请记住先按 ESC
键确定您已经处于命令行模式下后,再输入 :
即可进入底行模式。
- 列出行号
set nu
:在文件中的每一行前面列出行号。 - 跳到文件中的某一行
#
:#
号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了 - 查找字符
/关键字
:先按/
键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按n
向后查找。?关键字
:先按?
键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按n
向前查找。 - 保存文件
w
:冒号后输入字母w
就可以将文件保存起来 - 退出 vi
q
:退出不保存,如果按q
无法退出vi,可以在后面加个!
强制退出 viwq
:保存并退出,记住w在前要先保存才能退出
vi 命令列表
下表列出命令模式下的一些键的功能h
左移光标一个字符l
右移光标一个字符k
光标上移一行j
光标下移一行^
光标移动至行首0
数字“0”,光标移至文章的开头G
光标移至文章的最后$
光标移动至行尾Ctrl+f
向前翻屏Ctrl+b
向后翻屏Ctrl+d
向前翻半屏Ctrl+u
向后翻半屏i
在光标位置前插入字符a
在光标所在位置的后一个字符开始增加o
插入新的一行,从行首开始输入ESC
从输入状态退至命令状态x
删除光标后面的字符#x
删除光标后的#个字符X
(大写X),删除光标前面的字符#X
删除光标前面的#个字符dd
删除光标所在的行#dd
删除从光标所在行数的#行yw
复制光标所在位置的一个字#yw
复制光标所在位置的#个字yy
复制光标所在位置的一行#yy
复制从光标所在行数的#行p
粘贴u
取消操作cw
更改光标所在位置的一个字#cw
更改光标所在位置的#个字
下表列出行底行模式下的一些指令w newname
将正在编辑的文件重命名为 newname 并保存wq
保存并退出 viq
放弃所有修改,退出viset nu
显示行号/
或 ?
查找,在 / 后输入要查找的内容n
与 /
或 ?
一起使用,如果查找的内容不是想要找的关键字,按 n
或向后(与 /
联用)或向前(与 ?
联用)继续查找,直到找到为止。