一般来说,vi命令有如下的特别:
- 字母大小写有区别.
- 在输入时不会显示在屏幕上.
- 不需要在命令后加上
Enter
键.
基本命令:
- 文件与系统基本操作
vi[filename]
:q
离开,:q!
代表强制离开.- 按下
esc
键会强制进入命令模式 ZZ
离开并保存编辑结果- 也可以用ex命令保存编辑结果,输入
:w
是保存文件但不离开vi,若无编辑动作,可输入:q
退出,输入:wq
,则是保存编辑结果并离开vi(:wq与ZZ相等). :e!
恢复上一次存储的文件内容.:q!
消除所有编辑结果然后离开vi.!df
查看磁盘剩余空间.:w newfile
可以在没有权限时,暂时将缓冲区写入一个新的文件.:!rm junkfile
删除一些大文件,空出一些空间.:w! file
会在文件已经存在时覆盖现有文件.
- 简单的文本编辑
- 进入插入模式方法:按下
i
. - 移动光标:
h,j,k,l
这4个位于键盘中心的键可以移动光标.h
向左一个字符,j
向下一行,k
向上一行,l
向右一个字符. - 设置与右边界的距离.以便自动插入换行符.这个选项是
wrapmargin(简写为wm)
,例如设置为10个字符换行.:set wm=10
. - 移到一行的开头
0
,移到一行的结尾$
. - 显示行编号,
:set nu
. w
命令使光标移动一个单词,符号和标点也算是一个单词.W
大写的使光标移动到下一个单词,没有算入标点和符号.b
和B
则相反.G
可以移动到指定的行.如42G
可移动到42行.- 文本内容修改命令.
i
表示插入,a
表示添加,c
表示更改,d
表示删除. - 移动:先用
d
做删除,再用p
进行放置. - 复制:先用
y
做”拖曳”的动作,再用p
进行放置. - 附加文本:
a
.a
与i
用法几乎相同,除了前者是在光标后面插入文本,后者是在光标之前插入文本. - 更改文本:
c
.将c
与光标移动命令一起使用,定义有多少文本需要更改.如:cw
从光标到这个单词的结尾,c2b
从光标往前2个单词.c$
从光标到本行末尾.c0
从光标到本行开头. - 更改整行文本.
cc
. - 修改单个字符,使用
r
命令.例如:r-
:使用r
命令加上要更改的字符-
. - 更改字符大小写.
~
. - 删除文本.
d
.例如,删除单词dw
,删除一行dd
与D
. - 删除整行.
dd
.D
命令会删除从光标所在位置到本行结束间的文本(D
是d$
的简写). p
放置命令会将缓冲区的文本放在光标后,大写的p
命令则会把文本放置在光标前.ctrl F 往前滚动一整屏
- ctrl B 往后滚动一整屏
- /字符串 按下enter会高亮你要搜索的字串
- ?字符串 按下enter相反方向搜索字串
因为之前的搜索串还在缓存中,继续输入n,N 或者/ ?加enter键继续重复搜索.- ctrl g 显示总行数,现在行数在页面的大致位置
输入50G 会移动到第50行
- ctrl g 显示总行数,现在行数在页面的大致位置
- 越过基础的藩篱
打开file并前进到特定的位置.
vi +n file
:在第n行打开file.vi + file
:在最后一行打开file.vi +/pattern file
:在第一个出现pattern的地方打开file.如果你的pattern中包含空格,则需要用单引号或双引号括起整个模式.+/'you make'
或者用反斜线将空格转义+/you\ make
.用只读模式显示文件
vi -R file
或者view file
.全局搜索.
:g/pattern
:寻找文件中最后一次出现pattren的地方.:g/pattern/p
:寻找并显示文件中所有包含pattern的行.:g!/pattern/nu
:寻找并显示文件中所有不包含pattern的行,也显示所有找到的行号.:60,124g/pattern/p
:寻找并显示第60行与第124行之间包含pattern的行.替换:
:s/old/new/
:将当前这一行中第一个出现的模式old改为new.:s/old/new/g
:将当前行每一个出现的old更换成new.(g
会影响一行中的每一个模式,而:g
会影响文件中的每一行.).:50,100s/old/new/g
:将第50行到第100行之间每一个出现的old更改为new.:1,$s/old/new/g
:将整个文件中的old更改为new.
也可以用%
代替1,$
.:%s/old/new/g
也会替换整个文件中的old为new.
替换全局偶尔会出错,因此可以在每次替换之前做确认,可以在替换命令的结尾加上c
以确认本次替换.如:1,30s/his/the/gc
.这样如果确认替换,必须输入y
(代表yes之意),再按下enter
如果不想替换只需按下enter
.