目录
vim编辑器
vi:Visual Interface
vim:Visual Interface # vim是vi的增强版
编辑模式(命令模式),默认处于编辑模式
输入模式:输入文件内容,输入的内容会被保存下来。
末行模式:在末行模式下,可以输入编辑模式以外的文件管理类的命令,末行模式所提供的命令支持能力比编辑模式更多。要想进入末行模式,必须从输入模式转到编辑模式(按ESC),之后输入 :
输入模式 <------>编辑模式<------>末行模式
模式转换:
编辑-->输入:
i:在当前光标所在字符的前面,转为输入模式;
a:在当前光标所在字符的后面,转为输入模式;
o:在当前光标所在行的下方,新建一行,并转为输入模式;
I:在当前光标所在行的行首,转为输入模式;
A:在当前光标所在行的行尾,转为输入模式;
O:在当前光标所在行的上方,新建一行,并转为输入模式
输入-->末行: 按下ESC,输入 :
10d # 删除第10行
10,20d # 删除10到20行
set nu # 显示行号
在末行模式下,使用 "! 命令",还可以在在操作当前文件的同时执行其他命令:
:! cat /etc/passwd # 执行之后可以按ENTER键返回
末行-->编辑:按ESC
一、打开文件
# vim /path/to/somefile
vim +number 文件名 # 表示打开此文件,光标并停留在该文件的第number行的行首
vim + 文件名 # 表示打开该文件时,光标在该文件的底部
vim +/PARTTERN 文件名 # 表示打开文件,定位至第一次被PARTTERN匹配到的行的行首
二、关闭文件:
1.末行模式关闭文件
:q # 仅退出,并未保存文件
:wq # 保存并退出
:q! # 不保存并退出
:w # 保存
:w! # 强行保存
:x # wq的简写,也能实现保存并退出
2.编辑模式下退出:
ZZ(shift+zz) # 保存并退出,无须转到末行模式退出
Ctrl+z
三、移动光标
1.逐字符移动:(编辑模式)
h: 左
l: 右
j: 下
k: 上
5h: 表示一次向左移动5个字符
5l: 表示一次向右移动5个字符
5j: 表示一次向下移动5行
5k: 表示一次向上移动5行
2.以单词尾单位移动:(编辑模式)
w # 表示移到下一个单词的词首
e # 跳至当前或下一个单词的词尾
b # 跳至当前或前一个单词的词首
这三个字母也支持其前加数字,表示一次跳多少个单词:
5w 5e 5b
3.行内跳转:(编辑模式)
0: 表示跳到行首(绝对行首)
^: 表示跳到行首的第一行个非空白字符(shift+6)
$: 表示跳到行尾(绝对行尾)
4.行间跳转:(编辑模式)
#G:跳转至第#行
G:最后一行
末行模式下,直接给出行号即可
四、翻屏
在编辑模式下:
Ctrl+f:向下翻一屏
Ctrl+b:向上翻一屏
Ctrl+d:向下翻半屏
Ctrl+u:向上翻半屏
五、删除单个字符(编辑模式)
x:删除光标所在处的单个字符
#x:删除光标所在处及向后的共#个字符
六、删除命令:d
按下d,表示要删除内容了,至于是从当前光标处向上还是向下删除,删除多少行,还需要指定:
d0:表示从当前光标处删到行首
d$:从当前光标处删除到行尾
#d,#dw,#db
dd:删除当前光标所在行
#dd: 删除包括当前光标所在行之内的#行
末行模式下:
startNumber,EndNumberd
.: 表示当前行
$:最后一行
+#:向下的#行
.,$-3d 表示从当前行删到倒数第2行
比如:
3,8d # 从第3行删到第8行
七、粘贴命令 p
vim删除的内容会被保存到缓冲区,最后一次删除的内容可以被粘贴到别的地方。
P: 如果删除或复制为整行内容,则粘贴至光标所在行的下方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的的后面;
p: 如果删除或复制为整行内容,则粘贴至光标所在行的上方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的的前面;
八、复制命令 y
用法同d命令
末行模式下:
1,100y # 复制从1到100行
编辑模式下:
y$:复制当前行光标处到行尾的内容
y0:复制当前行光标处到行首的内容
yy:复制当前行内容
九、先删除内容,再转换为输入模式
c(change):用法同d命令
cc:表示删除当前行内容,并再其下方再创建一行
c$: 表示删除光标当前处到行末的内容,并进入到输入模式
十、替换
r6: 表示替换当前光标处的单个字符,此处表示将当前光标处字符替换成6
十一、撤销编辑操作
u(undo):可连续撤销此前的n次操作,但只在内存缓冲区保存50次的操作,最多只能撤销50次的操作。
#u: 直接撤销最近#次编辑操作
撤销最近一次的撤销操作:Ctrl+r
十二、重复前一次编辑操作
.
十三、可视化模式
v:按字符选取
V:按矩形块选取(一次选中一行)
十四、查找 (末行模式)
/PARTTERN # 输入完后按ENTER键,会将匹配到的内容,高亮显示,这是再敲 n 键,会逐个向下显示,敲 N 键会逐个向上显示;
?PARTTERN 当前光标往首部查找
十五、查找并替换(末行模式)
g:全局替换
i:忽略大小写
:.,$-1s/c/C/g # 表示将当前行到倒数第2行的c替换成C 和sed命令相似
1,$: 表示从第1行到最后一行,表示全文查找,可以使用 % 取代 1,$
%: 表示全文
十六、使用vim编辑多个文件
vim FILE1 FILE2 FILE3
:next 切换到下一个文件
:prev 切换到前一个文件
:last 表示切换到最后一个文件
:first 切换至第一个文件
退出
:qa 全部退出
十七、分屏显示一个文件
Ctrl+w,s 水平拆分窗口 先按Ctrl+w松开,再按s
Ctrl+w ,向下箭头 #进入拆分的下一个窗口
要想退出:输入q退出当前窗口,输入 qa 退出所有窗口
Ctrl+w,v 垂直拆分窗口 先按Ctrl+w松开,再按v
Ctrl+w ,向右箭头 # 切换到另一个拆分窗口
要想退出:输入q退出当前窗口,输入 qa 退出所有窗口
十八、分窗口显示多个文件
vim -o FILE1 FILE2 # 分窗口水平显示多个文件
vim -O ILE1 FILE2 # 分窗口垂直显示多个文件
十九、将当前文件中部分内容另存为另外一个文件
末行模式下使用w命令
:w
:ADDR1,ADDR2w /path/to/somewhere
二十、将另外一个文件中的内容填充再当前文件中光标所在行下方位置
:r /path/to/flie
二十一、跟shell交互
末行模式下:
:!COMMAND # 不用退出文件的情况下执行其他命令,执行完,再次按ENTER键返回来
二十二、高级话题
1.显示或取消显示行号
:set number
:set nu 显示行号
:set nonu 取消行号
2.显示忽略或区分字符大小写
:set ignorecase
:set ic
:set noignorecase
:set noic # 取消忽略大小写
3.设定自动缩进
:set autoindent # 写脚本时自动缩进比较方便
:set ai
:set noai # 取消自动缩进
4.查找到的文本高亮显示或取消
:set hisearch
:set nohisearch # 取消搜索到的文本高亮显示
5.语法高亮
:syntax on # 开启语法高亮
:syntax off # 关闭语法高亮
二十三、vim配置文件
/etc/vimrc # 全局配置文件
~/.vim
想让某个文件在使用vim打开时自动显示行号:
在/etc/vimrc文件中,随便找个位置,添加一行:
set nu # 在这个配置文件中的设置,对所有用户都生效
如果仅想对某个用户设置行号,可以修改此用户家目录下的 .vimrc文件,此文件如果不存在,可以自己创建一个:
set nu
vimtutor: 此命令是关于vim的一个使用手册
练习:
将/etc/yum.repos.d/server.repo文件中的ftp://instructor.example.com/pub替换为http://172.16.0.1/yum
%s/ftp:\/\/instructor\.example\.com\/pub/http:\/\/172\.16\.0\.1\/yum/gi
%s@ftp://instructor\.example\.com/pub@http://172.16.0.1/yum@g