vim是Linux或者类unix系统下非常实用的文本编辑处理工具,今天将为大家介绍一下常用方法。
指令介绍
vim [option] ... file
+#n file
: 打开文件后直接让光标移动到第n行(0~文件最大行),如果未指定数字,直接移动到行尾。+/PATTERN file
: 使光标移动到与PATTERN首次匹配的行首-b file
以二进制方式打开文件。-d file1 file2 ...
比较多个文件,文件不同之处会以不同颜色标记出来,需要注意的是,在关闭文件时,选中其中一个文件,在命令模式下执行:q即可退出。-m file
以只读模式打开文件,即使写入数据,也不会被保存,以这种方式打开文件极大的保证了数据的安全性。-e/-ex file
直接进入ex模式
vim与其它普通编辑器比较特别的一个地方是在不同的模式下,相同的输入会体现出不同的输出,因此vim也可以称之为模式编辑器,vim有三种常用模式,命令模式、编辑模式和扩展命令模式,下面将分别就说明它们之间的特性。
命令模式
命令(Normal)模式也就是我们常用的模式,也可以称之为普通模式,
执行vim filename
进入该模式,该模式下主要用于移动光标、查看、复制、删除、剪切、粘贴、查找文本等,在该模式下无法插入文本。
文本查看
字符跳转
h
:左移;l
:右移;j
:下移;k
: 上移n+cmd
n表示数字,cmd
表示hjkl
,例如:3h
向左移动3个字符;3j
向下移动3行,其他组合命令类似。
单词跳转
b
: 回退到当前或者前一个单词的词首e
: 跳转到当前或者下一个单词的词尾w
: 跳转到下一个单词的词首n+cmd
n表示数字,cmd
表示b、e、w
中任意一个,例如:3b
从当前单词开始向前移动到前3个(如果光标位置在某个词的中间位置,则移动2个位)单词的词首。如果当前行不满足条件,则跳转至上一行。
页内跳转
H
: 跳转到当前页的页首M
: 跳转到当前页的页中L
:跳转到当前也的页尾zt
: 将光标所在位置移动到屏幕顶部zz
: 将光标所在位置移动到屏幕中间zb
: 将光标所在位置移动到屏幕底部
行内跳转
0
: 移动光标到行首$
: 移动光标到行尾^
: 移动至行首的第一个非空白字符, 如果没有字符则仍然跳转到行首
行间跳转
G
: 跳转至文档的最后一行1G
: 跳转第一行nG
: n表示数字,跳转至第n行gg
: 跳转至第一行
句间跳转
)
: 光标移动到下一句(
: 光标移动到上一句}
: 光标移动到下一段{
: 光标移动到上一段
页面跳转
ctrl + f
: 向后翻一屏ctrl + b
: 向前翻一屏ctrl + d
: 向后翻半屏ctrl + u
: 向前翻半屏
文本删除
x
: 删除当前光标位置所在的字符;nx
: 删除当前光标位置及之后的n个字符;xp
: 替换当前光标及其后字符的位置;~
: 大小写字符转换;J
: 删除当前行后的换行符,主要用于将相邻的两行合并。
文本替换
r
: 替换光标所在位置的字符,替换之后,下次将不能再替换,如果要多次替换,可以使用R
R
: 切换成REPLACE
模式,可以一直处于替换字符的模式,直至按下esc
键。
删除文本
d
: 结合光标移动的位置删除文本,如果左右移动,则删除单个字符,如果上下移动,则删除从当前位置和移动后的位置所在行的字符;d$
: 删除光标所在位置到行尾之间的字符;d^
: 删除至行首;d0
: 删除从光标所在位置开始到行首之间的字符;dw
: 删除单个单词;de
: 删除光标位置到下一个字符之间的字符;db
: 删除光标所在位置的到单词的开头部分或者整个单词;dd
: 删除一行字符;D
: 删除光标所在位置到行尾之间的字符,和d$
功能相同。
文本复制
y
: 范围复制字符,上下移动,则复制上下两行字符,左右移动,则复制移动范围内的单个字符;y$
:复制光标位置到行尾之间的字符;y0
:复制光标位置到行首之间的字符;ye
:复制光标位置到下一个字符之间的字符;yw
:复制单个单词;yb
:复制光标所在位置的到单词的开头部分或者整个单词yy
:复制行,nyy
:复制多行,n表示数字,Y
: 复制整行
改变文本
修改后切换成插入模式,模式从命令模式–> 插入模式
c$
: 删除当前位置到行尾之间的字符,并进入编辑模式;c^
: 删除当前位置之前到行首之间的字符,并进入编辑模式;c0
: 删除当前位置到行首之间的字符,并进入编辑模式;cb
: 删除当前位置的单词或者当前位置到单词头,并进入编辑模式;ce
: 删除当前位置到上一个单词之间的非空字符,并进入编辑模式;cw
: 删除当前光标所在位置的字符并进入编辑模;cc
: 删除当前行并输入新内容,相当于S
,nss
,n
表示数字;C
: 删除当前广味大行尾之间的字符,并进入编辑模式;
大小写切换
gU
将字符转化为大写字符gu
将字符转化为小写字符
可与其他命令搭配使用,例如:gUG
表示将光标位置开始到结束位置的字符转化为大写字符。
特别说明
很多命令支持<start> cmd <end>
模式,例如:y 复制、d 删除、gu、gU
等。
例子1:
HgUG
表示将当前页从头到位转化为大写字符
H
: 命令作用开始位置,首行,
gU
: 字符转化命令,
G
: 命令作用结束位置,尾行。
例子2: 0d$
表示删除一整行字符
0
: 命令作用开始位置,行首
d
: 删除命令;
$
: 命令作用结束位置,行尾。
di"
: 删除光标在" "之间的字符yi(
: 光标在()之间,则复制()之间的字符;vi[
: 光标在[]之间,则选中[]之间的内容;
范围选择
- 范围定位:
:start [, end]
:n
: 第n行
:m, n
: 从m行到n行
m, +n
: 从第m行到m+n行
.
:当前行
$
: 最后一行
%
: 行首到行尾,相当于1, $
搜索
/PATTERN
: 从当前光标所在位置向下查找与PATTERN匹配的内容;?PATTERN
: 从当前光标所在位置向上查找与PATTERN匹配的内容;n
: 在使用/PATTERN
或者?PATTERN
命令查找后,需要继续查找下一个匹配项;N
: 在使用/PATTERN
或者?PATTERN
命令查找后,需要继续查找上一个匹配项;
撤销修改
u
: 撤销最近一次的修改nu
: 撤销前面n次修改U
: 撤销光标落在这行后所有此行的修改;ctrl + r
重做最后的撤销.
: 重复前一个操作n.
重复前一个操作n次
文本标签
m[a-zA-Z]
: 为某些常用的位置贴上标签,可使用的为52个大小写字母'[a-zA-Z]
:跳转到标记的位置,标签之间可来回跳转,一旦标记后将永久存在,后续仍然可以继续使用,除非覆盖。
查找替换
- 在扩展命令模式下查找替换内容
格式:s/old-parttern/new-parttern/修饰符
修饰符:可省略
i
: 忽略大小写;
g
: 全局替换,默认情况下只替换第一次出现的内容;
gc
: 全局替换,每次替换前询问; - 全文替换
%s/old-parttern/new-parttern/g
- 另外,可以将
/
替换为#
,例如:%s#old-parttern#new-parttern#g
, 其他情况类型。
编辑模式
编辑(Insert)模式又称为插入模式,主要用途是修改、添加文本。
通常我们时先进入命令模式,通过一下几种方式进入编辑模式。
A
: 在当前光标所在行的行尾出插入a
: 在光标所在位置的下一个字符插入I
: 在光标所在行的行首插入i
: 在光标所在位置插入O
: 在光标所在行的上一行另起一行插入o
: 在光标所在行的下一行另起一行插入
待文件编辑完成后,输入esc健,退出编辑模式,然后进入扩展命令模式,
- 如果能确定输入无误,确定保存修改内容,输入
:wq
,即可保存; - 如果想丢弃修改的内容输入
:w!
,即丢弃已修改内容; - 如果想暂存数据。输入
w
即可; - 如果未插入任何内容,输入
:q
即可; - 还有一种保存方式是
:x
,表示强制保存,建议慎用。
扩展命令模式
扩展命令(extended command)模式又称为ex模式,用于保存,退出等。执行shift :
后进入当前模式。
常用扩展命令
:w
: 保存后,进入命令模式;:w filename
将当前文件另存为filname,并进入命令模式,并留在当前文件中;wq
: 保存后退出编辑模式,并退出当前文件;:q!
: 丢弃修改内容后退出当前文件;:r filename
读取filename中的文件到当前文件;:! cmd
执行命令;:r!cmd
读入命令的输出。:n
n在这里表示数字,表示第n行。
模式切换
模式之间是可以相互切换的,下面介绍一下它们的切换路径:
命令模式 -----(a/A、i/I、o/O)------>编辑模式
编辑模式 ------------------(esc)------------->命令模式
命令模式 ------------------(:)----------------->扩展命令模式
扩展命令模式---------(esc/enter)------------->命令模式