Vim简介:
Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。VIM是纯粹的自由软件。
Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。1999 年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢得了Slashdot Beanie的最佳开放源代码文本编辑器大奖,又将Emacs推至二线, 总的来看, Vim和Emacs同样都是非常优秀的文本编辑器。
全屏幕的编辑器:VIM,又称,visual interface,是一款文本编辑器,vi, vi iMproved
Vim模式:
编辑模式:命令模式
输入模式:
末行模式:
使用Vim:
vim [options] [file ..]
# vim
# vim /PATH/TO/SOMEFILE
+#:#为行号;
+:快速定位至最后一行
+/PATTERN:快速匹配到文档
模式间转换:
编辑模式 --> 输入模式:
i: 当前光标输入,
a:当前光标的下一位输入,
o:新插入一行输入,
I: 行首输入,
A:行尾输入,
O:上方新建行输入,
输入模式 --> 编辑模式
ESC
编辑模式 --> 末行模式
:
末行模式 --> 编辑模式
ESC
关闭vim:
末行模式:
:q 退出;
:q! 强制退出;
:wq 保存并退出;
:x 保存并退出;
编辑模式:
ZZ:保存退出;
光标跳转:
注:以下操作需在编辑模式完成;
字符间跳转:
k:
h: l: (k,上)(j,下)(h,左)(l,右)
j:
#COMMAND: #号代表数字,5k(表示5个字符)
单词间跳转:
w:下一个单词的词首;
e:当前或后一个单词的词尾;
b:当前或前一单词的词首;
#COMMAND:
行内跳转:
^:跳转至行首的第一个非空白字符;
0:跳转至绝对行首;
$:跳转至绝对行尾;
行间移动:
#G: 5G (跳转到第五行)
1G,gg
G:文本的文尾(最后一行)
gg:文本的文首(第一行)
句间移动:
)
(
段落间移动:
}
{
编辑命令和操作:
注:以下操作需在编辑模式完成;
字符编辑:
x: 删除光标所在处的字符
#x: 5x (删除光标所在处后5个字符)
xp: 删除并复制
r: 替换光标所在处的字符,R;
删除命令:
d: 删除命令
d^:删除光标至行首
d$:删除光标至行尾
d0:删除光标至行首的所有字符
dw, de, db
dd:删除当前光标的所在行(整行)
#COMMAND:#代表数字
注:删除的内容会被vim编辑器保存至缓冲区当中;
粘贴命令:p (paste, put)
如果此复制或删除的内容不是一个完整行
p:粘贴至当前光标所在处后面;
P:粘贴至当前光标所在处前面;
如果复制的内容是完整行(可不止一行)
p: 粘贴至当前光标所在行下方;
P:粘贴至当前光标所在行上方;
复制命令:y, yank
y:复制命令
y$, y^, y0
ye, yw, yb
yy:复制行
#COMMAND:5yy(复制5行)
修改命令:c, change
c$, c^, c0
cb, ce, cw
cc: 删除当前行,并移至行首,开启输入模式
#COMMAND:5cc(删除光标以下5行,并开启输入模式)
撤销命令:
u: undo;撤消此前编辑操作;
#u:#代表撤销次数
Ctrl+r:恢复此前的撤消操作(撤销撤销,还原撤销)
.: 重复前一个编辑操作
翻屏操作快捷键:
Ctrl+f: 向后一屏;
Ctrl+b:向前一屏;
Ctrl+d: 向后半屏;
Ctrl+u: 向前半屏;
多文件模式:
打开文件:vim [OPTIN]...[FILE]...
:next 下一个文件
:first 第一个文件
:prev 上一个文件
:last 前一个文件
:wqall 全部保存并退出
:q!all 全部强制退出
多文件窗口分割:
打开文件:vim -o|-O FILE1 FILE2 ...
Ctrl+w:切换窗口,多文件编辑窗口切换
单文件窗口分割:
Ctrl+w, s: split, 水平分割
Ctrl+w, v: vertical, 垂直分割
VIM内建教程:
[root@localhost ~]# vimtutor
VIM末行模式操作和命令:
注:如下如何操作均在末行模式完成
1、地址,定界
:start_pos,end_pos
#:第#行;
#,#
#,+#
.: 当前行
$: 最后一行
%: 全文,相当于1,$
/pat1/:第一次被此模式所匹配到的行;
#,/pat1/
/pat1/,/pat2/
后可跟编辑命令:
d, y
w, r
2、查找
/PATTERN:向尾部进行
?PATTERN:向首部进行
n: 与命令同方向
N:与命令反方向
3、查找替换
s: 在末行模式下,在地址定界的范围内完成查找替换操作;
s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用模式
替换为的内容:不能使用模式,但可以使用后向引用符号,以引用前面模式中的分组括号所匹配到的内容;
\1, \2, ...
&:引用“要找的内容”匹配到的整个内容;
修饰符:
i: 忽略大小写
g: 全局替换
/:用于分隔符,所以,要查找的内容或替换为的内容中出现此符号,要使用\对其转义,使用格式:\/分隔符可替换为其它字符:例如@,#等;
4、在vi中执行命令和导入文件
在末行模式下:
导入文件: r FILENAME
执行命令: !COMMAND
导入执行命令的结果: r!COMMAND
定制vim的某些工作特性
1、行号
显示:set nu
禁用:set nonu
2、括号匹配
显示: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、:help 获取帮助
特性设定的永久生效方式:
全局配置文件:/etc/vimrc
用户个人的配置文件:~/.vimrc
练习题:
1、复制/etc/grub.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符;
答:%s/^[[:space:]]//g
2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;
答:%s/^[[:space:]][[:space:]]/#/g
3、替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;
答:%s/\/etc\/sysconfig\/init/\/var\/log/g
4、删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#;
答::%s/^#[[:space:]]//g