vim编辑器及练习题

vim工作原理.jpg

命令用法:

vim [OPTION]… FILE… 

+#: 打开文件后,直接让光标处于第#行的行首 

                                例如:[root@localhost ~]# vim +15 /etc/passwd

+/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首

                                例如:[root@localhost ~]# vim +15/^rpc /etc/passwd

vim + file 直接打开file,光标在最后一行 

                                例如:[root@localhost ~]# vim + /etc/passwd

vim –b file 二进制方式打开文件 

                                例如:[root@localhost ~]# vim -b /bin/cat

vim –d file1 file2…  比较多个文件 ;窗口模式退出之后,会自动标注至不匹配的编辑模式

                                例如:[root@localhost tmp]# vim -d passwd.out passwd

vim  -m file  只读打开文件;防止误操作,只能查看内容,不能修改内容

                                例如:[root@localhost tmp]# vim -m passwd.out

ex  file 或 vim –e  直接进入ex模式;

如果该文件存在,文件被打开并显示内容 如果该文件不存在,当编辑后第一次存盘时创建它

击键行为是依赖于 vim的 的“模式” 

三种主要模式:

命令模式(默认):移动光标,剪切/粘贴文本 

插入(编辑)模式:修改文本 

扩展命令模式:保存,退出等 

·Esc键 退出当前模式

Esc键 Esc键 总是返回到命令模式

vi: Visual Interface,文本编辑器;文本:ASCII, Unicode 

命令模式 –> 插入模式 

i: insert, 在光标所在处输入 

I:在当前光标所在行的行首输入 

a: append, 在光标所在处后面输入 

A:在当前光标所在行的行尾输入 

o: 在当前光标所在行的下方打开一个新行 

O:在当前光标所在行的上方打开一个新行

模式转换方式:

插入模式 —-> 命令模式 ESC

命令模式 —-> 扩展模式 : 

扩展模式 —-> 命令模式 ESC

锁定和解锁:CTRL+s,Ctrl+q

扩展模式: 

按“:”进入Ex模式

创建一个命令提示符:,处于底部的屏幕左侧

:q 退出 

:q! 强制退出,丢弃做出的修改 

:wq 保存退出 

😡  保存退出 

w  写(存)磁盘文件 

wq 写入并退出 

x  写入并退出 

q  退出 

q!不存盘退出,即使更改都将丢失 

r filename 读文件内容到当前文件中 

w filename  将当前文件内容写入另一个文件 !command r!command

命令模式:

ZZ: 保存退出 

ZQ:不保存退出

字符间跳转:

h: 左

l: 右 

j: 下 

k: 上 

#COMMAND:跳转由#指定的个数的字符; 

单词间跳转: 

w:下一个单词的词首 

e:当前或下一单词的词尾 

b:当前或前一个单词的词首 

#COMMAND:由#指定一次跳转的单词数 

当前页跳转: 

H:页首 

M:页中间行 

L:页底

行首行尾跳转: 

^:  跳转至行首的第一个非空白字符; 

0:        跳转至行首 

$:       跳转至行尾 

行间移动: 

 #G: 扩展模式:

#:   跳转至由#指定行 

G:  最后一行 

1G,gg:    第一行 

句间移动: (按住ctrl实现效果)

):下一句 (:上一句 

段落间移动:(按住ctrl实现效果)

}:下一段 {:上一段

命令模式翻屏:

 Ctrl+f: 向文件尾部翻一屏

 Ctrl+b: 向文件首部翻一屏

 Ctrl+d: 向文件尾部翻半屏

 Ctrl+u:向文件首部翻半屏

字符编辑: 

 x: 删除光标处的字符; 

 #x: 删除光标处起始的#个字符 

 xp: 交换光标所在处的字符及其后面字符的位置

 ~:转换大小写

替换命令(r, replace) 

 r: 替换光标所在处的字符 

 R:切换成REPLACE模式

删除命令:

 d: 删除命令,可结合光标跳转字符,实现范围删除; 

 d$: 删除到行尾 

 d^:删除到非空行首 

 d0:删除到行首 

 dw: de: db: #COMMAND

 dd: 删除光标所在的行 #dd:多行删除

 D:从当前光标位置一直删除到行尾,留空行,等同于d$

复制命令(y, yank): 

 y: 复制,行为相似于d命令 

 yy:复制行 #yy: 复制多行 

 Y: 复制整行

粘贴命令(p, paste):

 p:缓冲区存的如果为整行,则粘贴当前光标所在行的下 方;否则,则粘贴至当前光标所在处的后面 

 P:缓冲区存的如果为整行,则粘贴当前光标所在行的上 方;否则,则粘贴至当前光标所在处的前面

改变命令(c, change) 

 c: 修改后切换成插入模式 

命令模式 –> 插入模式 

 c$ 删除此行光标之后并插入

 c^ 删除此行光标之前并插入

 c0 删除此段光标之后并插入

 cb 删除此段光标之前并插入

 ce 删除此行光标之后的段并插入

 cc 删除当前行并输入新内容 

 C  删除当前光标到行尾,并切换成插入模式

命令使用方法:

 100iluyubo [ESC] 粘贴“luyubo”100次 

 <start position><command><end position> 

 Command: 

 y 复制、d 删除、gU 变大写、gu 变小写 

 例如 0y$ 命令意味着: 

 0 → 先到行头 

 y → 从这里开始拷贝 

 $ → 拷贝到本行最后一个字符 

 ye 从当前位置拷贝到本单词的最后一个字符

撤消更改:

 u撤销最近的更改 

 #u撤销之前多次更改 

 U 撤消光标落在这行后所有此行的更改 

 按Ctrl – r重做最后的“撤消”更改 

 . 重复前一个操作 

 n.重复前一个操作n次

扩展模式:

地址定界:

 #: 具体第#行,例如2表示第2行; 

 #,#: 从左侧#表示行起始,到右侧#表示行结尾 

 #,+#: 从左侧#表示的行起始,加上右侧#表示的行数 :

 2,+3  表示2到5行 

 .: 当前行 

 $: 最后一行 

 .,$-1 当前行到倒数第二行 

 %:全文, 相当于1,$

 /pat1/,/pat2/ 从第一次被pat1模式匹配到的行开始,一直到第一次被 pat2匹配到的行结束 #,/pat/ /pat/,$

使用格式:(后跟一个编辑命令)

 w file: 将范围内的行另存至指定文件中 

 r file:在指定位置插入指定文件中的所有内容

查找并替换:

 /PATTERN:从当前光标所在处向文件尾部查找 

 ?PATTERN:从当前光标所在处向文件首部查找 

 n:与命令同方向 

 N:与命令反方向

 s: 在扩展模式下完成查找替换操作 格式:s/要查找的内容/替换为的内容/修饰符 要查找的内容:可使用模式 替换为的内容:不能使用模式,但可以使用\1, \2, … 等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容  格式:s///,s@@@,s$$$

修饰符: 

 i: 忽略大小写 

 g: 全局替换;默认情况下,每一行只替换第一次出现 

 gc:全局替换,每次替换前询问

 查找替换中的分隔符/可替换为其它字符,例如 s@/etc@/var@g s#/boot#/#i

vim寄存器介绍:

 有26个命名寄存器和1个无命名寄存器,常存放不同的 剪贴版内容,可以不同会话间共享。 

 用a,b,…,z表示,用“寄存器表示,放在数字和命令之间 如:3"tyy 表示复制3行到t寄存器中 "tp  表示将t寄存器内容粘贴 

 未指定,将使用无命名寄存器 

 有10个数字寄存器,用0,1,…,9表示,0存放最近复 制内容,1存放最近删除内容。当新的文本变更和删除 时,1转存到2,2转存到3,以此类推。数字寄存器不能 在不同会话间共享。

编辑二进制:

 以二进制方式打开文件 vim –b binaryfile 

 扩展命令模式下,利用xxd命令转换为可读的十六进制 :%!xxd 

 扩展命令模式下,利用xxd命令转换回二进制 :%!xxd –r 

 保存退出

可视化模式:

 允许选择的文本块 

 v 面向字符 

 V 面向行 

 ctrl-v 面向块 

 可视化键可用于与移动键结合使用: w, ) , } ,箭头等 

 突出显示的文字可以被删除,复制,变更,过滤,搜索/替换 等

多文件模式:

 vim FILE1 FILE2 FILE3 … :

 :next  下一个 

 :prev  前一个 

 :first 第一个 

 :last  最后一个 

 :wall  保存所有 

 :qall  退出所有 

 :wqall 保存所有并退出

多文件分割:

 vim -o|-O FILE1 FILE2 … 

 -o: 水平分割 

 -O: 垂直分割 

 在窗口间切换:Ctrl+w, Arrow 

单个文件窗口分割:

 Ctrl+w,s: split, 水平分割 

 Ctrl+w,v: vertical, 垂直分割 

 ctrl+w,q:取消相邻窗口 

 ctrl+w,o:取消全部窗口 

 :wqall 退出

定制vim的工作特性:

配置文件:

  永久有效 全局:/etc/vimrc 

  个人:~/.vimrc 

扩展模式:

当前vim进程有效 

(1) 行号:

显示:set number, 简写为set nu 取消显示:set nonumber, 简写为set nonu 

(2) 括号成对匹配:

匹配:set showmatch, 简写为set sm 取消:set nosm

(3) 自动缩进 

启用:set ai 

禁用:set noai 

(4) 高亮搜索

启用:set hlsearch 

禁用:set nohlsearch 

(5) 语法高亮 

启用:syntax on 

禁用:syntax off

(6) 忽略字符的大小写 

启用:set ic 

不忽略:set noic

(7) 文件格式

启用:fileformat=unix 

不忽略: fileformat=dos 

(8) 设置文本宽度

:set textwidth=65 (vim only) 

:set wrapmargin=15 

:help option-list 

:set or :set all

练习案例:

1、复制/etc/profile至/tmp/目录,用查找替换命令删除 /tmp/profile文件中的行首的空白字符

[root@localhost tmp]# vim profile
扩展模式输入:%s@^[[:space:]]\+@@

2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查 找替换命令为/tmp/functions的每行开头为空白字符的行的 行首添加一个#号

[root@localhost tmp]# vim functions 
扩展模式输入:%s@^[[:space:]]@#$@

3、如何设置tab缩进为4个字符? 

set ts=4

4、复制/etc/rc.d/init.d/functions文件至/tmp目录;替换 /tmp/functions文件中的/etc/sysconfig/init为/var/log; 

[root@localhost tmp]# vim functions 
:%s@/etc/sysconfig/init@/var/log:@

5、删除/tmp/functions文件中所有以#开头,且#后面至少 有一个空白字符的行的行首的#号;

[root@localhost tmp]# vim functions 
:%s@^#[[:space:]]\+@#@g

6、将/etc/yum.repos.d/CentOS-Base.repo文件中所有的enabled=0替换为enabled=1,所有gpgcheck=0替换为gpgcheck=1

:%s@\(gpgcheck\|enabled\)=1@\1=0@

原创文章,作者:闹钟哥,如若转载,请注明出处:http://www.178linux.com/32837