vim是一种比vi更加强大的模式化的全屏文本编辑器。vim在工作过程中有三种模式:编辑模式、插入模式、末行模式。
编辑模式(默认):又称命令模式,其工作内容包括移动光标、剪切、粘贴、删除等 输入模式:亦可称为插入模式,主要是在文件中修改文本内容 末行模式:亦称扩展命令模式,主要是执行vim内置命令的
vim三种模式之间的切换:如下图
(1)编辑模式 --> 输入模式
i: 在光标所在处输入 I:在当前光标所在行的行首 输入 a: 在光标所在处后面输入 A:在当前光标所在行的行尾 输入 o: 在当前光标所在行的下方打开一个新行 O:在当前光标所在行的上方打开一个新行
(2)输入模式 ----> 编辑模式
按ESC键
(3)编辑模式 ----> 末行模式
:(冒号)
(4)末行模式 ----> 编辑模式
按ESC键
1、vim的基本操作
(1)vim语法即其常用选
vim [options] [file ..] option: -b:以二进制方式打开文件 -d:后接多个文件表示打开并比较多个文件 -m:以只读方式打开文件 -e:直接进入末行模式
(2)打开文件
+#:表示打开文件后,直接让光标处于第#行的行首 +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN 匹配到的行的行首 如:vim ‘+/UUID‘ /etc/fstab +:打开文件后,光标处于文件的最后一行
(3)退出文件
1)末行模式中退出
:q 表示退出 :q! 表示强制退出 :wq 表示保存退出 :x 表示保存退出 :w /PATH/TO/SOMEFILE 不退出,而是将文件保存至指定文件
2)编辑模式退出
ZZ:表示保存退出 ZQ:表示不保存退出
(4)光标移动(编辑模式中)
1)字符间移动
h:一次向左移动一个字符 j:一次向下移动一个字符 k:一次向上移动一个字符 l:(小写L)一次向右移动一个字符 上下左右箭头键亦可实现上述操作 还可以用#+{h,j,k,l}来表示移动几个字符,如“3h”表示向左移动3个字符
2)单词间移动
w:移动到下一个单词的词首 e:移动到当前或下一个单词的词尾 b:移动到当前或下一个单词的词首 #+{w,e,b}表示动到第#个字符的词首(词尾)
3)当前页面内的移动
H:移动到当前页的第一行行首 M:移动到当前页面的中间行的行首 L:移动到当前页面的最后一行的行尾
4)行内移动
^:跳至当前行首的第一个非空白字符 0:跳至当前行的行首(绝对行首) $:跳至当前行的行尾
5)行间移动
G:跳至文件的最后一行的行首 1G(gg):跳至文件的第一行行首 #G:跳至指定的定#行行首
6)句间移动(以空行来划分)
):向下移动一句 (:向上移动一句
7)段落间移动(以空行来划分 ####)
{:向下移动一段 }:向上移动一段
(5)翻屏操作
Ctrl+f: 向文件尾部翻一屏 Ctrl+b: 向文件首部翻一屏 Ctrl+d: 向文件尾部翻半屏 Ctrl+u: 向文件首部翻半屏
2、vim的编辑模式的命令
(1)字符删除
x: 删除光标处的字符 #x: 删除光标处起始的#个字符 d:删除(剪切)命令,需要结合光标移动字符使用(w/b/e/$/0/^等)如:“d$”表示删除光标以后的内容,“3dw”表示删除光标后的3个单词 dd:删除光标所在处的行 D:从当前光标位置一直删除到行尾,等同于d$ xp: 交换光标所在处的字符及其后面字符的位置 ~: 转换大小写
(2)字符替换
r:替换光标所在处的字符,一次只能替换单个字符 R:切换成REPLACE模式,可以逐个字符替换
(3)复制
y:复制命令,可以结合光标移动字符使用(w/b/e/$/0/^等)如:“y0”表示复制光标所在处到行首的内容,“0y$”表示整行。 yy:复制整行 #yy:一次复制#行
(4)粘贴(配合d或y命令使用)
p:(小写)如果复制为整行,则将复制的内容粘贴到当前光标所在行的下方;如果复制的是行的部分内容,则将复制的内容粘贴至当前光标所在处的后面 P:(大写)如果复制为整行,则将复制的内容粘贴到当前光标所在行的上方;如果复制的是行的部分内容,则将复制的内容粘贴至当前光标所在处的前面
(5)修改,即先删除在变为输入模式
c:修改命令,可以结合光标移动字符使用(w/b/e/$/0/^等) cc:删除当前行并输入新内容 C:删除当前光标到行尾的内容,并切换成插入模式
(6)撤销与重复操作
u:撤销最近的修改,一次只撤销一个操作 #u:一次撤销#个操作 Ctrl+r:撤销上一次的撤销操作 .:重复前一个操作 n.:重复前n个操作
(7)其他编辑操作
1)可视化模式
v:按字符选定 V:按行选定 Ctrl+v:按块选定
2)一次输入n次同样的内容,示例说明
100iwang [ESC]:先输入100,在输入i,然后输入wang,最后按ESC键,即输入100个wang字符
3、vim的末行模式操作(记得“:”)
(1)地址定界
1)#: 具体第#行,如2 表示第2 行; 2)#,#: 从左侧#表示行起始,到右侧# 表示行结尾,如3,8表示第3到第8行 3)#,+#: 左侧#示的行起始,加上右侧# 表示的行数,如2,+3 表示2到5行 4). : 当前行 5)$: 最后一行 6)% :全文, 相当于1,$ 7)/pattern1/,/pattern2/ : 第一次被pattern1模式匹配到的行开始,一直到第一次被pattern2匹配到的行结束 8)w /PATH/TO/SOMEFILE : 表示将范围内的内容另存到指定文件中 9)r /PATH/FROM/SOMEWHERE : 表示将外部指定文件的内容调入到指定的位置中
(2)查找
/PATTERN:从当前光标所在处向文件尾部查找 ?PATTERN:从当前光标所在处向文件首部查找 N:上一个,与命令反方向 n:下一个,与命令同方向
(3)查找与替换
s///:查找并替换,分隔符可以自定如:[email protected]@@,s###。 格式:s/ 要查找的内容/ 替换为的内容/ 修饰符 要查找的内容:可使用模式 替换为的内容:不能使用模式,但可以使用\1, \2, ...等后向引用符号;还可以使用“&” 引用前面查找时查找到的内容 修饰符: i : 忽略大小写 g : 全局替换;默认情况下,每一行只替换第一个匹配到的内容 gc : 全局替换,每次替换前询问
4、vim的寄存器(在编辑模式下)
1)有26个命名寄存器和1个无命名寄存器,常存放不同的剪贴版内容,可以不同会话间共享 2)26个命名寄存器由26个英文字母一一对应,用a ,b,…,z 表示, 用“字母 表示寄存器,放在数字和命令之间,如“3"ayy” 表示复制3 行到a 寄存器中,“"ap”表示将a寄存器的3行内容粘贴到光标处的下一行 3)未指定名字,将使用无命名寄存器,直接使用3yy即可复制 4)有10个数字寄存器用0,1,…,9表示,0存放最近复制的内容,1存放最近删除的内容。当新的文变更和删除时,1 转存到2 ,2 转存到3 ,以此类推。数字寄存器不能在不同会话间共享。
5、打开多个文件
vim FILE1 FILE2 FILE3 ... 各个文件间的切换:(在编辑模式下) :next 跳至下一个文件 :prev 跳至前一个文件 :first 跳至第一个文件 :last 跳至最后一个文件 :wall 保存所有文件但不退出 :qall 退出所有文件 :wqall 保存并退出所有文件
6、多窗口模式
(1)多文件分割
vim -o |-O FILE1 FILE2 FILE3 ... -o:水平分割 -O:垂直分割 Ctrl+w切换窗口
(2)单文件分割
Ctrl+w,s: split, 水平分割() Ctrl+w,v: vertical, 垂直分割 ctrl+w,q :取消相邻窗口 ctrl+w,o : 取消全部窗口 :wqall 退出
7、定制vim的工作特性
(1)自动缩进
启用:set ai 禁用:set noai
(2)高亮搜索
启用:set hlsearch 禁用:set nohlsearch
(3)语法高亮
启用:syntax on 禁用:syntax off
(4)忽略字符大小写
忽略:set ic 不忽略:set noic
(5)设置行号
显示:set nu 不显示:set nonu
(6)括号成对匹配
启用:set sm 禁用:set nosm
(7)配置文件(使定制的特性永久生效)
全局设置:/etc/vimrc 个人设置:~/.vimrc
(8)文件格式
启用unix格式:fileformat=unix 启用dos格式:fileformat=dos ### (9)设置文本宽度 ### :set textwidth=65 :set wrapmargin=15
8、习题
(1)如何设置tab 缩进为4 个字符
在末行模式输入:set ts=4即可,如果要永久生效可以写入配置文件
(2)复制/etc/rc.d/init.d/functions 文件至/tmp 目录;替换/tmp/functions 文件中的/etc/sysconfig/init 为/var/log;
在末行模式输入:%[email protected]/etc/sysconfig/[email protected]/var/[email protected]
(3)删除/tmp/functions 文件中所有以# 开头,且#后面至少有一个空白字符的行的行首的# 号;
在末行模式输入:%[email protected]^#[[:space:]]\[email protected]@g
(4)将/etc/yum.repos.d/CentOS-Base.repo文件中所有的enable=0替换enable=1,所有gpgcheck=0替换为gpgcheck=1;
在末行模式输入:%[email protected]\(enabled\|gpgcheck\)[email protected]\[email protected]
时间: 2024-10-05 08:53:05