vim模式
vim模式分为编辑模式(命令模式),输入模式,末行模式。
模式互相切换:
输入模式 --> 编辑模式:ESC
编辑模式 --> 末行模式::
末行模式 --> 编辑模式: ESC
编辑模式 --> 输入模式:
i: insert(在光标前输入字符)
a: append(在光标后输入字符)
o: 在光标当前行下面增加一行,在新加的行中输入数据
O: 与o相反,在光标当前行上面新增一行,同时在新加的行中输入数据
I: 在光标的行首输入字符
A: 在光标的行尾输入字符
打开vim:
vim /FILEPATH
vim +NUM /FILEPATH:光标跳转到NUM行并编辑该文件
vim +/SEARCH /FILEPATH:光标跳转到search模式并编辑该文件
关闭vim:
:q 直接退出
:q! 不保存强行退出,当文件已经修改了,而你不想保存,:q是退出不了的,所以运用该项
:wq 保存并退出
:x 保存并退出
:wq和:x区别:
:wq:即使文件没有被修改也强制写入,并更新文件的修改时间。
:x: 仅当文件被修改时才写入,并更新文件修改时间,否则不会更新文件修改时间。
光标跳转:
字符间跳转:
h|←:左
l|→:右
k|↑:上
j|↓:下
单词间跳转:
w:后单词的词首
e:当前或后一个单词的词尾;
b:当前或前一单词的词首;
行内跳转:
^: 跳转至行首的第一个非空白字符;
0:跳转至行首;
$: 跳转至行尾;
行间移动:
#G: 第#行
1G, gg:回首行
G:回尾行
句间移动:
):移到下一句
(:移到上一句
段落移动:
}:移到下一段落
{:移到上一段落
编辑命令:
字符编辑:
x: 删除光标所在处的字符
#x:删除光标所在处的#个字符
xp:替换当前字符和下一个字符的位置
r: 替换光标所在处的字符
删除命令:
d^:删除光标到行首的第一个非空白字符
d0:删除光标到行首
d$:删除光标到行尾
dd:删除光标所在行(还有剪切功能)
#dd:删除光标之后的#行
注意:删除的内容会被vim编辑器保存至缓冲区当中;
粘贴:p (paste, put)
如果此复制或删除的内容不是一个完整行
p:粘贴至当前光标所在处后面;
P:粘贴至当前光标所在处前面;
如果复制的内容是完整行(可不止一行)
p: 粘贴至当前光标所在行下方;
P:行上方;
复制命令:y, yank
y^:复制光标到行首的第一个非空白字符
y0:复制光标到行首
y$:复制光标到行尾
yy:复制光标所在行(还有剪切功能)
#y:复制光标之后的#行
改变命令:c, change(删除指定内容,并在当前光标处进入输入模式)
同样有c$, c^, c0, cc, #cc
撤消此前的编辑操作:
u: undo 撤销之前的操作
ctrl+r : 恢复此前的撤消操作
. : 重复前一个编辑操作
翻屏操作:
Ctrl+f: 向后一屏;
Ctrl+b:向前一屏;
Ctrl+d: 向后半屏
Ctrl+u: 向前半屏
vim的末行模式
(1) 地址,定界
:start_pos,end_pos
#:第#行;
m,n:第m行到n行
m,+n:第m行到m行之后n行
.: 当前行
$: 最后一行
%: 全文,相当于1,$
/pat1/:第一次被此模式所匹配到的行;
#,/pat1/:第#行到下一个pat1模式匹配到的行
/pat1/,/pat2/:第pat1匹配到的行到第pat2匹配到的行
后可跟编辑命令:d,y,w,r
(2) 查找
/PATTERN:向尾部进行
?PATTERN:向首部进行
n: 与命令同方向
N:与命令反方向
(3) 查找替换
s: 在末行模式下,在地址定界的范围内完成查找替换操作;
s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用模式
替换为的内容:不能使用模式,但可以使用后向引用符号,以引用前面模式中的分组括号所匹配到的内容;
\1, \2, ...
&:引用“要找的内容”匹配到的整个内容;
修饰符:
i: 忽略大小写
g: 全局替换(如果不加一行只会替换一个匹配到的内容)
/:用于分隔符,所以,要查找的内容或替换为的内容中出现此符号,要使用\对其转义,使用格式:\/
分隔符可替换为其它字符:例如@,#等;
多文件模式:
vim FILE1 FILE2 ...
:next 跳转下一个文件
:first 跳转第一个文件
:prev 跳转上一个文件
:last 跳转到最后一个文件
:wqall 保存退出所有文件
:q!all 强制不保存退出所有文件
多文件窗口分割:
vim -o|-O FILE1 FILE2 ...
-o 水平分割窗口
-O 垂直分割窗口
ctrl + w, ↑↓←→ 切换窗口
单文件窗口分割:
Ctrl+w, s: split, 水平分割
Ctrl+w, v: vertical, 垂直分割
定制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
:help 获取帮助
:help SUBJECT
特性设定的永久生效方式:
全局配置文件:/etc/vimrc
用户个人的配置文件:~/.vimrc
vim的可视化模式
v:进入字符可视化模式,此时只要移动光标,移到的字符都会高亮显示,之后可以d,y之类的操作.
V:进入行可视化模式.此时可以选中n行
ctrl + v:进入块可视化模式.
ESC:退出可视化模式
实战:
1、复制/etc/grub.conf配置文件至/tmp目录,用查找替换命令删除/tmp/grub.conf文件中的行首的空白字符;
解答:
1.cp /etc/grub.conf /tmp
2.vim /tmp/grub.conf
3.输入:%s/^[[:space:]]\+//g
4.最终结果如下图
2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;
解答:
cp /etc/rc.d/init.d/functions /tmp
vim /tmp/functions
:%s/^[[:space:]]/#&/g
3、替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;
解答: :%s#/etc/sysconfig/init#/var/log#g
4、删除/tmp/functions文件中所有以#开头,且#后面至少跟了一个空白字符的行的行首#;
解答: :%s/^#\([[:space:]]\+\)/\1/g