vi: Visual Interface 可视化接口
vim: VI iMproved
vim是vi的升级,最大的功能是有高亮显示提升使用可视性
--------------------------------------------------------------------------
vim模式:
编辑模式 可以理解的为开始对整体文件的操作,输入模式
输入模式 是真的在文档中写入内容,同样编辑和末行模式是不能用的
末行模式 vim最强大的功能,可以对接相当多的功能也能直接使用sed正则表达式
--------------------------------------------------------------------------
模式转换:
编辑模式-->输入模式:
i: 在当前光标所在字符的前面,转为输入模式;
a: 在当前光标 后面, 输入模式;
o: 在 光标所在字符行的下方,新建一行,并转为输入模式;
I: 在当前光标所在行的行首,转换为输入模式
A:在当前光标所在 尾,转换为输入模式
O:在当前光标 行的上方,新建一行,并转为输入模式;
输入模式-->编辑模式:
ESC
编辑-->末行:
:
末行-->编辑:
ESC, ESC (按Esc键)
一、打开文件
# vim /path/to/somefile
vim +#打开文件,并定位于第#行
vim + 打开文件,定位至最后一行
vim +/PATTERN 打开文件,定位至第一次被PATTERN匹配到的行
默认处于编辑模式
二、关闭文件
1、末行模式关闭文件
:q 退出
:wq 保存并退出
:q! 不保存并退出
:w 保存
:w! 强行保存
:wq --> :x (等价)
2、编辑模式下退出
ZZ: 保存并退出 (大写)
三、移动光标(编辑模式)
1、逐字符移动:
h: 左
l: 右
j: 下
k: 上
#h: 移动#个字符 (#代表的数字的多少,一下不再赘述)
2、以单词为单位移动
w: 移至下一个单词的词首
e: 调至当前或下一个单词的词尾
b: 跳至当前或前一个单词的词首 (e,b两个是相对的前进后退)
#w: 移动#个单词
3、行内跳转
0:绝对行首
^: 行首的第一个非空白字符
$: 绝对行尾
4、行间跳转(大写G)
#G:跳转至第#行
G : 最后一行
末行模式下,直接给出行号即可
四、翻屏
Ctrl+f: 向下翻一屏
Ctrl+b: 向上翻一屏
Ctrl+d: 向下翻半屏
Ctrl+u: 向上翻半屏
五、删除单个字符
x: 删除光标所在处的单个字符
#x: 删除光标所在处及向后的共#个字符 (先输入数字然后在输入x)
六、删除命令:d
d命令跟跳转命令组合使用;
#d,#de, #db
dd: 删除当前光标所在行
#dd: 删除包括当前光标所在的行在内的#行;
末行模式下,
startADD,endADDd (当前地址,结束地址)
. 表示当前行
$ 最后一行
+# 向下的#行
七、粘贴命令 p
p 如果删除或复制为整行内容,则粘贴至光标所在行下方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的后面;(小写向下)
P 如果删除或复制为整行内容,则粘贴至光标所在行上方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的前面;(大写向上)
八、复制命令 y
用法同d
九、修改;先删除内容,在转换为输入模式
c 用法同d命令
十、替换 R
R: 替换模式
十一、撤销编辑操作 u
u 撤销前一次的编辑操作
连续u命令可撤销此前的n次操作(最多50次,我没试过)
#u: 直接撤销最近#次编辑操作
撤销最近一次撤销操作:Ctrl+r (撤销u命令的撤销)
十二、重复前一次编辑操作
. (没有看错,就是一个点)
十三、可视化模式
v 按字符选取 (小V少)
V 按矩形选取 (大V多)
十四、查找替换
/PATTERN
?PATTERN 反向查找 (从光标所在行方向往上查找)
n 从上向下
N 反向 向上查找
十五、查找并替换
在末行模式下使用s命令
ADDR1,[email protected]@[email protected] (地址1,地址2s/内容/修改内容/全局替换g)
:.,$-1s/he/HE/g (内容在末行模式下将全文he替换为HE)
% 表示全文内容(不用特意在标明)
练习:
1、将/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/g (\为转义)
%[email protected]://instructor\.example\.com/[email protected]://172.16.0.1/[email protected] (同上等价,一样实现)
十六、使用vim编辑多个文件 (末行模式切换)
vim FILE1 FILE2 FILE3
:next 切换至下一个文件
:prev 切换至前一个文件
:last 切换至最后一个文件
:first 切换至第一个文件
:qa 全部退出
十七、分屏显示一个文件
Ctrl+w, s: 水平拆分窗口 (先按下Ctrl+w键在选择按s/v)
Ctrl+w, v: 垂直拆分窗口
在窗口间切换光标:
Ctrl+w, ARROW(上下左右键)
:qa 关闭所有窗口
十八、分窗口编辑多个文件
vim -O FILE1 FILE2 FILE3
vim -o : 水平分割显示
vim -O : 垂直分割显示
十九、将当前文件中部分内容另存为另外一个文件
末行模式下使用w命令
:w
:ADDR1,ADDR2w /path/to/somewhere
地址1,地址2/路径
二十、将另外一个文件的内容填充在当前文件中(末行模式)
:r /path/to/somefile
二十一、跟shell交互
:! COMMAND (回车返回编辑窗口)
二十二、高级话题
1、显示或取消显示行号
:set number
:set nu
:set nonu 取消
2、显示忽略或区分字符大小写
:set ignorecase
:set ic
:set noic
3、设定自动缩进
:set autoindent
:set ai
:set noai
4、查找到的文本高亮显示或取消
:set hlsearch
:set nohlsearch
5、语法高亮
:syntax on
:syntax off
二十三、配置文件
/etc/vimrc 全局生效
~/.vimrc 当前用户生效 直接vim ~/.vimrc 输入内容就可以了,有这个文本就打开了,没有就自动创建一个,一样生效。
vim文件编辑后未保存,错误关闭,再次打开文件报错
1、以只读打开 2、无路如何都开始编辑 3、恢复为保存内容 4、删除前内容 5、退出终止 6、退出
未保存的文件会以“这个文件名.swp为后缀的形式出现在文件目录中
vim -r filename 直接将.swp相关内容写入file中。
如果确定没有问题就在目录中 rm 文件就可以了。(数据无价!删除提前确认)
在末行模式编辑下千万不用按小键盘区的数字键会坑自己的~(惊喜等待自己去发觉)