备注:此总结来自马哥课堂笔记,本人后总结。
时间:2015.09.3
linux-vim详解
vim
俗称全屏文本编辑器。
其可分为三种模式:编辑模式、输入模式、末行模式
解释:
编辑模式:可以移动光标、删除字符等
输入模式:在此模式下可以输入字符,按ESC将回到输入模式
末行模式:可以保存文件、退出vi、设置vi、查找等功能(低行模式也可以看作是命令模式里的)
相互切换
编辑模式---->输入模式
i 光标所在的前面进行插入字符
a 光标所在的后面进行插入字符
o 光标所在行另起一行进行插入字符
I 大写I是在光标的行首开始插入字符
A 大写A是在光标的行尾开始插入字符
O 大写O在光标所在行的上面新起一行进行插入字符
输入模式---->编辑模式
ESC 即可
编辑模式下的操作
dd 删除光标所在的行
3dd 删除连同光标所在的行删除3行
编辑模式----->末行模式
: 进入末行模式
末行模式---->编辑模式
ESC 连续两次是直接回到编辑模式
打开vim
vim
vim /PATH/To/SOMEFILE
这里如果文件不存在将直接创建文件
+# #号为行号 如果vim +3 那么就是vim打开之后光标在第3行的行首
+/PATTERN 表示第一次打开文件是光标所在位置在匹配行的行首
关闭vim
备注在末行模式下
:q 不保存,退出
: q! 强制不保存,退出
: w 保存不退出
: wq 保存退出
: wq! 强制保存并退出
: x 保存退出
ZZ :两个大写的ZZ是保存退出 备注要在编辑模式下
光标跳转
字符间跳转
h 向左一个字符
l 向右跳转
j 光标向下逐行跳转
k 光标向上逐行跳转
结合数字跳转
3h 向左跳转3个字符
3j 向下跳转3行
单词间跳转
w:跳转至后一个单词的词首
e:跳转至后一个单词的词尾
b:跳转至前一个单词的词首
单词跳转也支持加数字 例:3w 就是向后条个单词
行内跳转
^:跳转至行首的第一个非空白字符
$:跳转至行尾(绝对行尾)
0:跳转至绝对行首
行间移动
G:单个大写的G跳转至文件尾部,
1G:跳转至文件的首部,2个小写的gg也是跳转至首部
句间移动
) 跳转至下一句
( 跳转至上一句
段落间移动
} 跳转至下一段的段首
{ 跳转至上一段的段首
编辑命令
字符编辑操作
x:即表示删除光标所在处的位置
也可以加数字,即表示光标所在之处之后的几个数字,例:4x 就是光标所在出向后算上光标字母4个字符
xp:表示光标所在位置的字符与后面字符的位置调换
r:替换光标所在处的字符 例子 r n就是把贯标所在位置的字符替换为n
删除命令
d:
d$ 删除光标所在行光标位置至行尾的字符
d^ 删除光标所在行光标位置至行首的字符
dw 删除光标所在位置的单词
db 删除光标至所在位置的单词除光标的单词的字符然后光标移至上一单词的词尾
d0 删除光标所在行光标所在位置至行首的所有字符
de 删除光标所在行光标所在位置连同光标在内向后的一个单词
dd 删除光标所在的行
以上命令也支持与数字结合。
注意:删除命令会被vim编辑器保存至缓冲区当中
粘贴命令
如果复制或删除的内容不是一个完整的行
p:粘贴至当前光标所在处的后面
P:粘贴至当前光标所在处的前面
如果复制的内容是完整的行(备注:不是一行)
p:粘贴至当前光标所在行的下方
P:粘贴至当前光标所在行的上方
复制命令
y:
y$: 复制光标所在处到行尾的内容
y^:复制光标所在处到行首的内容
y0:复制光标所在处到绝对行首的内容
ye:复制光标所在处的字符和后面的字符复制的时候使其前后位置交换
yw:复制光标所在位置的单词,向后复制
yb:复制光标所在位置的单词,向后复制
yy:复制光标所在位置的单词 但至复制光标所在位置之前此单词的字符
以上命令也支持与数字的结合
改变命令
此命令直接让用户从编辑模式到输入模式
支持命令有
cc:改变光标所在的行,光标到本行的行首,进入插入模式等待在此行输入新的字符
c$:改变光标所在的位置至行尾,进入插入模式等待在输入新的字符
c^:改变光标所在的位置至行首,进入插入模式等待在输入新的字符
c0:改变光标所在的位置至绝对行首,进入插入模式等待在输入新的字符
ce:改变光标所在的位置的单词(向后一个单词),进入插入模式等待在输入新的字符
cw:改变光标所在的位置至本单词尾,进入插入模式等待在输入新的字符
cb:改变光标所在的位置向前匹配一个单词,进入插入模式等待在输入新的字符
以上命令也支持与数字的结合
撤销命令
u
撤销此前编辑的操作
支持数字加u
Ctrl+r 恢复撤销
. 恢复之前的操作
翻屏操作
Ctrl+f:向后一屏
Ctrl+b:向前一屏
Ctrl+f:向后半屏
Ctrl+f:向前半屏
vim的末行模式命令
(1) 地址,定界
命令格式:开始行,结束行
#:第#行 表示光标移到第几行
#,#
使用方法20,30d 删除20行到30;或者使用5d就是删除第5行
#,+#
使用方法100+3d 意思就是删除100行和此行向下再数3行的行
特殊字符
. 表示当前行
$ 表示最后一行
% 表示全文
字符匹配
/Pat1/ 表示第一次被模式所匹配到的行
#,/Pat1/ 表示从数字# 开始第一次匹配到Pat1的字符
/pat1/,/pat2/ 表示第一次被pat1匹配到的行到第一次被pat2匹配到的行的内容
这些地址定界之后都可以跟上编辑命令,如:
d 删除字符
y 复制字符
w 保存匹配的字符保存至另一个文件夹中;
例:3,100w /123/a 意思是将匹配到的行保存至/目录下的a文件中
r 插入另一个文本至此正在编辑的文本中
例:r /123/a 读入根目录下123目录下的a文件内容至光标所在行的下面
(2) 查找功能
/PATTERN:向尾部进行查询
?PATTERN:向头部进行查询
备注,查找到的内容也是第一个被匹配的字符,我们可以使用n来查找与命令同方向的字符,使用大写的N则相反。
(3) 查找替换
s: 在末行模式下,在地址定界的范围内完成查找替换工作;
例 s/要查找的内容/替换的内容/修饰符
要查找的内容:可使用模式
替换为的内容:不能使用模式,但可以使用后向引用的符号,以引用前面模式中的分组括号所匹配到的内容
\1,\2,...
&:引用“要查找的内容”匹配到的整个内容
修饰符
i:忽略大小写
g:全局替换
/:用于分隔符,要是查找的内容或替换为的内容中出现此符号,要使用\对其转义,使用格式为:\/
分隔符可替换为其它字符 例 @ # 等
例 查找光标所在行至后19行所有以#开头的行,把#号去掉
: .,+19s/^#//g
多文件模式
一次打开多个文件
格式:vim file1,file2,file3
默认打开的是第一个文件
next进入下一个文件,
first进入第一个文件,
last 跳转至最后一个文件
prev 跳转至前一个文件
wqall 保存退出所有文件
q!all 退出所有文件
打开多个文件可以实现文件间的复制粘贴
多窗口打开文件
vim -o 水平分割多个窗口
vim -O垂直分割多个窗口
Ctrl+w 上下左右箭头来进行窗口切换
单文件窗口分割
Ctrl+w,s 水平分割
Ctrl+w,v垂直分割
vim定制工作特性
(1) 行号
显示:set number
禁用: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
好了,vim的基本操作基本上就这些了,下面来做几个练习题吧!
1、复制/etc/grub2.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub2.cfg文件中行首的空白字符
2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;
3、替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;
4、删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#;