1 普通模式
以下命令请在普通模式
执行
1.1 进入命令模式命令
vi filename
: 打开或新建文件,并将光标置于第一行首vi +n filename
:打开文件,并将光标置于第n行
首vi + filename
:打开文件,并将光标置于最后一行首vi +/pattern filename
:打开文件,并将光标置于第一个与pattern匹配的串处vi -r filename
:在上次正用vi编辑时发生系统崩溃,恢复filenamevi filename....filename
:打开多个文件,依次编辑
1.2 移动光标
j
:向下20j
: 向下移动 20 行k
:向上h
:向左l
:向右0
:数字0
,到行首^
:到行首第一个字符,如果前面有空格的话$
:到行尾n$
:光标移至第n行尾gg
:快速到文件头G
:快速到文件尾50G
:跳转到第 50 行n+
:光标下移n行n-
:光标上移n行w
:光标跳到下个字的开头e
:光标跳到下个字的字尾b
:光标回到上个字的开头#l
:光标移到该行的第#个位置,如:5l,56l。ctrl+ b
:屏幕往后
移动一页。ctrl + f
:屏幕往前
移动一页。ctrl + u
:屏幕往后
移动半页。ctrl + d
:屏幕往”前”移动半页。ctrl + g
列出光标所在行的行号space
:光标右移一个字符Backspace
:光标左移一个字符)
:光标移至句尾(
:光标移至句首}
:光标移至段落开头{
:光标移至段落结尾H
:光标移至屏幕顶行M
:光标移至屏幕中间行L
:光标移至屏幕最后行
注意:
请不要在插入模式
进行光标移动,效率很低下
1.3 复制
yy
:复制一行#yy
:例如,6yy
表示拷贝从光标所在的该行往下数6行文字
8yy
:向下复制8行yw
:复制光标开始的一个单词#yw
:复制#个字到缓冲区y$
:复制光标到行尾yfA
:复制光标到第一个大写A中间的内容y2fA
:复制光标到第二个大写A中间的内容n,my
:指定n到m行复制
1.4 剪切
x
:向后剪切一个一个字符,如果是在行尾,则为向前剪切4x
:剪切4个xp
:非行尾交换两个字符,如从bs变成sb
1.5 删除
dd
:删除一行100dd
:删除100行dw
:删除一个单词df"
:删除到出现的第一个双引号d^
:删除至行首#dd
:从光标所在行开始删除#行
x
:每按一次,删除光标所在位置的后面
一个字符。#x
:例如,6x
表示删除光标所在位置的后面
6个字符。X
:大写的X,每按一次,删除光标所在位置的前面
一个字符。#X
:例如,20X
表示删除光标所在位置的前面
20个字符。Ctrl+u
:删除输入方式下所输入的文本
注意:
删除的内容会放到剪贴板,按p
即可粘贴到其他地方。
1.6 粘贴
p(小写)
:粘贴复制或剪切的内容,将缓冲区内的字符贴到光标所在位置。
在光标下一行粘贴
注意:所有与y
有关的复制命令都必须与p
配合才能完成复制与粘贴功能5p
:将复制或剪切的内容粘贴5次P(大写)
:在光标上一行粘贴(插入)
1.7 替换和撤销
r+<待替换字母>
:将游标所在字母替换为指定字母R
:连续替换,直到按下Esc
cc
:替换整行,即删除游标所在行,并进入插入模式cw
:替换一个单词,即删除一个单词,并进入插入模式c#w
:例如,c3w
表示更改3个字u{n}
:撤销一次或n次操作U(大写)
:撤销当前行的所有修改Ctrl+r
:redo,即撤销undo的操作
1.8 查找并替换
替换光标所在行第一个匹配的字符串:
# 语法
:s/旧字符串/新字符串
# 实例
:s/one/two
替换光标所在行所有旧字符串为新字符串:
# 语法
:s/旧字符串/新字符串/g
替换第几行到第几行中所有字符串:
# 语法
:n,m s/旧字符串/新字符串/g
# 实例
:2,4 s/one/two/g
最常用的就是全文替换了:
# 语法
:%s/旧字符串/新字符串/g
2 命令模式
以下命令请在命令模式
下执行
在普通模式下,输入:
即可进入。
2.1 退出编辑器
wq
:保存当前文件并退出或者x
wqa
:保存所有文件并退出q!
: 不保存,强制退出qa!
: 有多个文件被打开,同时退出
2.2 调整文本
%s/$/sth/
:在行尾追加sth
%s/^M//g
:替换掉dos
换行符,\^M
使用ctrl+v + Enter
即可输入:g/^\s$/d*
:删除空行以及只有空格的行%s/#.*//g
:删除#
之后的字符,没错,这里使用的是正则。ce
:使本行文本内容居中ri
:使本行文本内容靠右le
:使本行文本内容靠左
2.3 查找字符串
/ 关键字
:从光标开始处向文件尾
搜索,先按/
键,再输入想寻找的字符,如果第一次找的关键字不是想要的,可以一直按n
会往后寻找到要的关键字为止。? 关键字
:从光标开始处向文件首
搜索,先按?
键,再输入想寻找的字符,如果第一次找的关键字不是想要的,可以一直按n
会往前寻找到要的关键字为止
在普通模式下,按下/
直接进入查找,输入相应的字符串按确定即可
n
:查找下一个匹配N
:查找上一个匹配2n
:查找下面第二个匹配
3 vim的3种模式的关系图
- 命令行模式command mode) :
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。 - 插入模式(Insert mode)
只有在Insert mode下,才可以做文字输入,按ESC
键可回到命令行模式i, I
进入输入模式Insert mode
:i
为从目前光标所在处输入
,I
为在目前所在行的第一个非空格符处开始输入
;a, A
进入输入模式Insert mode
:a
为从目前光标所在的下一个字符处开始输入
,A
为从光标所在行的最后一个字符处开始输入
;o, O
进入输入模式Insert mode
:o
为在目前光标所在的下一行处输入新的一行
;O
为在目前光标所在处的上一行输入新的一行
- 底行模式(last line mode)
将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等
4 vim时其他命令
4.1 显示隐藏行号
:set number
或者 :set nu
显示行号:set nonumber
或者 :set nonu
隐藏行号#
:#
号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15
,再回车,就会跳到文章的第15行
4.2 底行模式下命令
选项设置
:set all
:列出所有选项设置情况:set term
:设置终端类型:set ignorance
:在搜索中忽略大小写:set list
:显示制表位(Ctrl+I)和行尾标志($):set number
:显示行号:set report
:显示由面向行的命令修改过的数目:set terse
:显示简短的警告信息:set warn
:在转到别的文件时若没保存当前文件则显示NO write信息:set nomagic
:允许在搜索模式中,使用前面不带“\”的特殊字符:set nowrapscan
:禁止vi在搜索到达文件两端时,又从另一端开始:set mesg
:允许vi显示其他用户用write写到自己终端上的信息