简介:
vi:visual interface,可视窗口,历史悠久的文本编辑器
vim:vi improved,vi编辑器增强版,增加了颜色显示,光标坐标位置显示等功能
一、vim 打开文件
- 语法:
vim [OPTION]... FILE...
- 用法:
+# file1 <!--打开文件光标直接移动至第#行行首-->
+/pattern file1 <!--打开文件光标直接移动至匹配pattern行的行首-->
-b file1 <!--打开二进制文件-->
-d file1 file2 <!--比较两个文件-->
-m file1 <!--只读打开文件-->
-
实验:
- 打开/etc/passwd文件光标直接指向第6行行首
命令:vim +6 /etc/passwd
- 打开/etc/passwd文件光标直接指向用户名以f开头的行
命令:vim +/"^f.*\>" /etc/passwd
- 比较/etc/passwd和/etc/shadow文件
命令:vim -d /etc/passwd /etc/shadow
- 打开/etc/passwd文件光标直接指向第6行行首
-
vim编辑的文件路径如果该文件存在,文件被打开并显示内容
如果该文件不存在,当编辑后第一次存盘时创建它
但是目录一定要存在,vim不具备创建目录的功能
二、vim 模式编辑器
- vim编辑器的三种模式:
- 命令模式(Normal),默认模式,功能:光标移动,文本剪切、粘贴等
- 插入模式(Insert),功能:修改文本
- 扩展命令模式(extend command),功能:保存、退出等
- Esc退出当前模式,返回命令模式
- 模式转换:
- 命令模式进入插入模式
i <!--insert, 在光标所在处输入-->
I <!--在当前光标所在行的行首输入-->
a <!--在光标所在处后面输入-->
A <!--在当前光标所在行的行尾输入-->
o <!--在当前光标所在行的下方新建一个新行-->
O <!--在当前光标所在行的上方新建一个新行-->
- 命令模式进入扩展命令模式,输入
:
:q <!--退出-->
:q! <!--强制退出,放弃做出的修改-->
:w <!--保存-->
:wq <!--保存退出-->
:x <!--保存退出-->
:w file1 <!--将当前内容保存至另一个文件,之后修改的还是之前编辑的文件-->
:r file2 <!--读文件内容至当前文件-->
:!command <!--执行命令-->
:r!command <!--读入命令执行结果-->
- 实验:
- 将当前编辑的文件另存为当前目录下的文件file3
命令::w file3
2.读取/etc/fstab文件内容至当前文件
命令::r /etc/fstab
3.在扩展命令模式下创建/app下的目录newdir,并用ls命令查看是否创建成功
命令::!mkdir /app/newdir
4.在扩展命令模式下读入/etc/password文件中用户ftp的行内容
命令::r!grep "^ftp\>" /etc/passwd
- 将当前编辑的文件另存为当前目录下的文件file3
- vim编辑器的插入模式和扩展命令模式之间不能直接相互切换,需要通过命令模式过渡,vim编辑器三种模式的转换关系如下:
三、vim 命令模式详解
(一)光标跳转
- 字符间跳转:
h <!--光标左移-->
l <!--光标右移-->
j <!--光标下移-->
k <!--光标上移-->
#COMMAND <!--跳转由#指定个数的字符-->
- 单词间跳转:
w <!--下一个单词的词首-->
e <!--当前或下一单词的词尾-->
b <!--当前或前一个单词的词首-->
#COMMAND <!--由#指定一次跳转的单词数-->
- 当前页跳转:
H <!--页首行首-->
M <!--页中间行行首-->
L <!--页底行首-->
- 行首行尾跳转:
^ <!--跳转至行首的第一个非空白字符-->
0 <!--跳转至行首-->
$ <!--跳转至行尾-->
- 行间移动:
#G <!--跳转至由#指定行-->
G <!--最后一行-->
1G, gg <!--第一行-->
- 句间移动:
) <!--下一句-->
( <!--上一句-->
- 段落间移动:
} <!--下一段-->
{ <!--上一段-->
(二)翻屏操作
Ctrl+f <!--向文件尾部翻一屏-->
Ctrl+b <!--向文件首部翻一屏-->
Ctrl+d <!--向文件尾部翻半屏-->
Ctrl+u <!--向文件首部翻半屏-->
(三)编辑操作
- 字符编辑:
x <!--删除光标处的字符,实质是剪切-->
#x <!--删除光标处起始的#个字符-->
xp <!--交换光标所在处的字符及其后面字符的位置-->
~ <!--转换大小写-->
J <!--删除当前行后的换行符-->
- 替换命令 r:
r <!--替换光标所在处的字符-->
R <!--切换成REPLACE模式-->
- 删除命令 d:
d <!--删除命令,可结合光标跳转字符,实现范围删除-->
d$ <!--删除到行尾-->
d^ <!--删除到非空行首-->
d0 <!--删除到行首-->
dw <!--删除到下个单词词首-->
de <!--删除到本单词或下个单词词尾-->
db <!--删除到本单词或上个单词的词首-->
dd <!--删除光标所在的行-->
#dd <!--多行删除-->
D <!--从当前光标位置一直删除到行尾,留空行,等同于d$-->
- 复制命令 y,语法类似删除 d:
y$ <!--复制到行尾-->
y^ <!--复制到非空行首-->
y0 <!--复制到行首-->
yw <!--复制到下个单词词首-->
ye <!--复制到本单词或下个单词词尾-->
yb <!--复制到本单词或上个单词的词首-->
yy <!--复制行-->
#yy <!--复制多行-->
Y <!--复制整行-->
- 粘贴命令 p:
p:缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面
P:缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面
- 改变命令 c,删除后切换成插入模式
c$ <!--删除到行尾,并切换成插入模式-->
c^ <!--删除到非空行首,并切换成插入模式-->
c0 <!--删除到行首,并切换成插入模式-->
cw <!--删除到下个单词词首,并切换成插入模式-->
ce <!--删除到本单词或下个单词词尾,并切换成插入模式-->
cb <!--删除到本单词或上个单词的词首,并切换成插入模式-->
cc <!--删除当前行,并切换成插入模式-->
#cc <!--删除多行,并切换成插入模式-->
C <!--删除当前光标到行尾,并切换成插入模式-->
-
100istring Esc: 粘贴字符串
string
100遍 -
撤销更改 u
u <!--撤销最近的更改-->
#u <!--撤销之前多次更改-->
U <!--撤消光标落在这行后所有此行的更改-->
Ctrl-r <!--重做最后的“撤消”更改-->
. <!--重复前一个操作-->
n. <!--重复前一个操作n次-->
四、vim 扩展命令模式详解
(一)地址定界
- 定界描述方法
# <!--具体第#行,例如`2`表示第2行-->
#1,#2 <!--从第#1行开始,到第#2行结束-->
#1,+#2 <!--从第#1行开始,到第#1+#2行结束,例如\2,+3表示2到5行-->
. <!--当前行-->
$ <!--最后一行-->
.,$-1 <!--当前行到倒数第二行-->
% <!--全文,相当于`1,$`-->
/pat1/,/pat2/ <!--从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束-->
#,/pat/ <!--从第#行开始,到第一次被pat匹配的行结束-->
/pat/,$ <!--从第一次被pat匹配的行开始到最后一行-->
- 使用方式:后跟一个编辑命令,如
1,3d
.,8y
4,+5w
8,$r
(二)查找
/PATTERN <!--从当前光标所在处向文件尾部查找-->
?PATTERN <!--从当前光标所在处向文件首部查找-->
n <!--与命令同方向-->
N <!--与命令反方向-->
(三)查找并替换 s
- 语法:
:%s/要查找的内容/替换为的内容/修饰符
- 修饰符:
i <!--忽略大小写-->
g <!--全局替换;默认情况下,每一行只替换第一次出现-->
gc <!--全局替换,每次替换前询问-->
- 查找替换中的分隔符
/
可替换为其它字符,如:%s/\/dev\/sda/\/dev\/sdb/g
可以写成:%s@/dev/sda@/dev/sdb@g
五、vim 编辑二进制文件
- 以二进制方式打开文件
vim -b binaryfile
- 扩展命令模式下,利用xxd命令转换为可读的十六进制
:%!xxd
- 扩展命令模式下,利用xxd命令转换回二进制
:%!xxd -r
- 实验:
1、vim打开/bin/cat可执行二进制文件;
2、将内容转换为可读十六进制:%!xxd
;
3、再将内容转换回二进制:%!xxd -r
;
六、vim 可视化模式 v
- 允许选择的文本块
v <!--面向字符-->
V <!--面向行-->
ctrl-v <!--面向块-->
-
可视化键与移动键(h,j,k,l.etc)结合灵活选取编辑区域
- 突出显示的文字可被删除,复制,变更,过滤,搜索,替换等
七、vim 多文件模式
- 打开:
vim FILE1 FILE2 FILE3 ...
- 操作:
:next <!--切换至下一个文件-->
:prev <!--切换至前一个文件-->
:first <!--切换至第一个文件-->
:last <!--切换至最后一个文件-->
:wall <!--保存所有文件-->
:qall <!--退出所有文件-->
:wqall <!--保存退出所有文件-->
八、vim 多窗口
- 多文件分割
vim -o|-O FILE1 FILE2 ...
-o: 水平分割
-O: 垂直分割
在窗口间切换:ctrl+w, Arrow
- 单文件窗口分割:
ctrl+w,s <!--split,水平分割-->
Ctrl+w,v <!--vertical,垂直分割-->
ctrl+w,q <!--取消相邻窗口-->
ctrl+w,o <!--取消全部窗口-->
九、vim 定制工作特性
在扩展命令模式下的修改仅对当前vim进程有效,永久有效需要修改配置文件,对系统全局有效的配置文件为
/etc/vimrc
,对当前用户有效的配置文件为~/.vimrc
- 行号
:set number 或者 :set nu <!--显示行号-->
:set nonumber 或者 :set nonu <!--取消显示行号-->
- 括号成对匹配
:set showmatch 或者 :set sm <!--匹配-->
:set noshowmatch 或者 :set nosm <!--取消匹配-->
- 自动缩进
:set ai <!--启用自动缩进-->
:set noai <!--禁用自动缩进-->
前三行每行回车后光标自动跳至行首,没有与第一行对齐;启动自动缩进后,如最后三行每行回车后光标自动与上一行对齐
- 高亮搜索
:set hlsearch <!--启用高亮搜索-->
:set nohlsearch <!--禁用高亮搜索-->
- 语法高亮
:syntax on <!--启用语法高亮-->
:syntax off <!--禁用语法高亮-->
- 忽略字符的大小写
:set ic <!--忽略字符的大小写-->
:set noic <!--不忽略字符的大小写-->
- 文件格式
:set fileformat=dos <!--启用windows格式-->
:set fileformat=unix <!--启用unix格式-->
- 设置文本宽度
:set textwidth=65 <!--设置文本宽度-->
:set wrapmargin=15 <!--设置页边距-->
十、vim 帮助
:help option-list <!--选项列表-->
:help topic <!--按照关键词搜索帮助文档-->
vimtutor <!--vim指导手册-->
网友评论