vim编辑器:
Linux使用文本文件来保存配置;文本编辑器用来编辑纯ASCII文件
Linux下常见的文本编辑器emacs、vi、nano
vi(Visual Interface) 全屏文本编辑,模式化的编辑器(在不同的模式间转换)
vim(vi improved) vi的增强版
vim的配置文件:
全局配置文件:/etc/vimrc、/etc/virc
用户配置文件:~/.vimrc、~/.virc 文件默认不存在可以自己手动创建
使用vim打开文件:
vim File 打开或新建文件,并将光标置于第一行首
vim +N File 打开文件,并将光标置于第N行首
vim + File 打开文件,并将光标置于最后一行首
vim +/Pattern File 打开文件,并将光标置于第一个与"Pattern"匹配的字符串处
vim -r File 在上次正用vim编辑时发生系统崩溃,恢复"File"
vim -b File 二进制方式打开文件
vim -d File1 File2…比较多个文件(如果有不同的话会做出标注)
vim File1 File2… 打开多个文件,依次编辑
vim -m File 只读打开文件,只能查看文件不能修改
打开多文件时文件间跳转
:n或:next 编辑下一个文件
:N或:prev 编辑上一个文件
:first 编辑第一个文件
:last 编辑最后一个文件
:files 查看当前打开的所有文件信息
:qall 退出所有打开的文件
:wqall 保存退出所有打开的文件
:saveas /Path/To/File 另存为文件(sav)
vim的模式:
命令模式:键盘操作通常被解析为编辑命令(编辑模式)
输入模式:(插入模式)
末行模式:vim的内置的命令行接口,执行vim内置命令
输入模式切换到命令模式 按ESC键
命令模式切换到末行模式 输入":"
末行模式切换到命令模式 按两次ESC键
末行模式与输入模式不能直接切换
末行模式常用命令:
:q 退出vi
:q! 强制退出,不保存并退出
:w 保存当前文件
:wq 保存并退出
:x 保存并退出
:e File 打开文件"File"进行编辑
:e! 放弃对文件修改,重新载入该文件编辑
:!command 执行shell命令command
:r!command 将命令command的输出结果放到当前行
ZZ 命令模式保存退出
ZQ 命令模式不保存退出
vim窗口属性设置
:set all 列出当前所有选项设置情况
:set term 设置终端类型
:set list 显示制表位(Ctrl+I)和行尾标志($)
:set report 显示由面向行的命令修改过的数目
:set terse 显示简短的警告信息
:set warn 在转到别的文件时若没保存当前文件则显示NO write信息
:set nomagic 允许在搜索模式中,使用前面不带转义""的特殊字符
:set nowrapscan 禁止vim在搜索到达文件两端时,又从另一端开始
:set mesg 允许vim显示其他用户用write写到自己终端上的信息
:set cindent C语言格式里面的自动缩进
:set sm/nosm 显示对应的括号()、{}、[]
:set number/nonumber 显示/不显示行号(简写nu)
:set ruler/noruler 显示/不显示标尺(显示光标所在行号和所在行的第几个字符)
:set hlsearch/nohlsearch 开启/关闭搜索关键字高亮显示
:syntax on/off 开启/关闭语法高亮
:set tabstop=4 设置tab键所占的字符数为4(简写ts)
:set autoindent/noautoindent 开启/关闭自动缩进(简写ai)
:set ignorecase/noignorecase 开启/关闭搜索字符串时忽略大小写(简写ic)
命令模式操作
光标移动:
单字符移动:
h或#h 向左移动1个或#个字符
l或#l 向右移动1个或#个字符
j或#j 向下移动1行或#行
k或#k 向上移动1行或#行
space 光标右移一个字符
Backspace光标左移一个字符
fa 向右移动光标到当前行的字符a上
Fa 向左移动光标到当前行的字符a上
单词间移动(可以结合数字):
w或W 光标右移到下一个单词至词首
b或B 光标左移到当前或上一个单词的词首
e或E 光标右移到当前或下一个单词至词尾
ge或gE 光标左移到上一个单词至词尾
注意:
W、B、E 命令操作的单词是以空白字符(空格、Tab、换行)为分隔字符串,比如字符串"str1-str2 str3-str4",对 W、B、E 命令来说是2个单词,而对 w、b、e 命令来说则是10个单词
行内移动:
0 移动到当前行绝对行首
^ 移动到当前行第一个非空白字符
$ 移动到当前行绝对行尾
句子、段落间移动:
) 光标移至句尾
( 光标移至句首
} 光标移至段落开头
{ 光标移至段落结尾
% 光标移动至与之匹配的括号上去()、{}、[]、<>
行间移动:
#G 移动到第#行(或者#gg)
gg 移动到第1行
G 移动到最后一行
H 移动到屏幕首行
M 移动到屏幕中间行
L 移动到屏幕尾行
Enter 移动到下一行
n$ 移动至当前行向下第n行行尾(包含当前行)
翻屏类命令:
Ctrl+u 向文件首翻半屏
Ctrl+d 向文件尾翻半屏
Ctrl+f 向文件尾翻一屏
Ctrl+b 向文件首翻一屏
zt 把当前行置于屏幕顶部
zb 把当前行置于屏幕底部
zz 把当前行置于屏幕中间
命令模式切换到输入模式:
i 在当前光标所在处的前面输入
I 在当前光标所在行的行首输入
a 在当前光标所在处的后面输入
A 在当前光标所在行的行尾输入
o 在光标所在行的下方新增一行空白行输入
O 在光标所在行的上方新增一行空白行输入
r 替换当前光标所在字符
R 替换当前光标所在字符及其后的字符,如果没按ESC键退出一直替换
s 替换(删除)当前光标所在字符,并进入输入模式
S 替换(删除)当前光标所在行,并进入输入模式
修改命令
cw 修改当前单词(删除当前光标到词尾的内容进入输入模式)
cb 修改当前单词(删除当前光标到词首的内容进入输入模式)
ncw或ncW 修改指定数目的单词(删除n个单词进入输入模式)
c$ 修改到行尾(也可以用C,删除当前光标到行尾的内容进入输入模式)
c^ 修改到行首(删除当前光标到行首的内容进入输入模式)
cc 修改当前行(删除当前行进入输入模式)
ncc 修改指定数目的行(删除n指定的行进入输入模式)
删除命令 :
x或X 删除一个字符,x删除光标后的,而X删除光标前的
dw 删除光标之后的一个单词
dnw 删除光标之后的n个单词
de 删除光标到单词的尾部
dne 删除光标之后的n个单词
db 删除光标之前的一个单词
d0 删至行首
d^ 删除到非空行首
d$ 删至行尾(也可以用D)
dd 删除一行
ndd 删除当前行及其后n-1行
dnl 向右删除n个字母
dnh 向左删除n个字母
dnj 向下删除n行
dnk 向上删除n行
shift+j 删除行尾的换行符,下一行接上来了
复制粘贴:
ynw 复制n个单词
yy 复制一行
ynl 复制n个字符
y$ 复制当前光标至行尾处
nyy 复制n行
p 缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面
P 缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面
撤销:
u 撤销前一次的操作
shif+u(U)撤销光标所在位置到行尾的所有操作
ctrl+r 重复执行上一次操作(撤销上一次的撤销命令)
查找 :
/pattern 从光标开始处向文件尾搜索pattern
?pattern 从光标开始处向文件首搜索pattern
n 在同一方向重复上一次搜索命令
N 在反方向上重复上一次搜索命令
替换:
定界符号:
. 表示当前行
$ 表示最后一行
$-2 表示倒数第3行($-2表示倒数余下2行,所以指倒数第3行)
% 全部内容
/Pat1/,/Pat2/ 从当前光标所在行往下搜索,第一次被模式1匹配的行到第一次被模式2匹配的行
绝对定界例子:
:3,10d 删除第3行到第10行的内容
相对定界例子:
:.,+9y 复制当前行开始数10行的内容
:.,3d 删除当前行开始数3行的内容
:9,$-2 删除第9行到倒数第3行的内容
:地址定界s/查找模式/替换为的内容/gic
g 一行内查找到多个匹配项时全部替换,如果不加g只替换每行的第一个匹配项
i 忽略查找字符的大小写
c 替换前都会需要确认是否替换
:s/p1/p2/ 替换当前行第一个p1为p2
:s/p1/p2/g 替换当前行所有p1为p2
:n1,n2s/p1/p2/g 将第n1至n2行每一行中所有p1替换为p2
:1,$s/string1/string2/g 在全文中将string1替换为string2
1 用于在替换为的内容中引用前面第一个左括号以及与之对应的右括号中的模式查找匹配到的所有内容
& 用于在替换为的内容中引用前面查找匹配到的所有内容
例子:
查找1至30行中以非#开头的行,并在行首加上#;&引用了前面查找到的所有内容
:1,30s/^[^#].*/#&/g
注意:
1、当要查找的内容中包括分隔符"/"就需要转义,如果不想转义可以使用其它符号替代当前分隔符"/",用@、#等
:地址定界s@查找模式@替换为的内容@gic
2、其中的查找模式可以是正则表达式
替换示例:
:%s/this/This/g 全文查找this替换为This
:1,20s/this/THIS/ig 查找1到20行中的this,然后替换为THIS,并且查找时要忽略字符大小
:%s@/cgroup/systemd@/etc/sysconfig@g 全文查找/cgroup/systemd替换为/etc/sysconfig
:%s@<t([[:alpha:]]+)>@T1@g 全文查找以t开头的单词,替换为T打头的单词
:%s@<t[[:alpha:]]+>@&er@g 全文查找以t开头的单词,并在词尾加er
:%s/^#// 全文查找以#开头的行,并删除开头的#号
:%s@(enabled|gpgcheck)=0@1=1@g 全文查找并替换enabled=0或者gpgcheck=0为=1
vim的Visual模式(可视化模式)
v 先按v键,在通过上下左右跳转命令选择区块,按照光标走过的区域选择
V 先按V键,在通过上下跳转命令选择区块,按照光标走过的行选择
vim的Visual Block模式
Ctrl+v进入Visual Block模式,在通过上下左右跳转命令选择区块(可以方便的在连续的多行前面加上#注释)
o 在选择的区块上快速上下跳转光标位置
O 在选择的区块上快速左右跳转光标位置
例子:在所有行行首添加上注释符#
1、Ctrl+v进入Visual Block模式
2、光标向下移动,选择所有行第0列
3、按I键将光标跳到了代码块的开头处并进入insert 模式,输入注释符#
4、按Esc键,所选区块前都输入了注释符#
行方式命令:
:n1,n2 co n3 将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3 将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d 将n1行到n2行之间的内容删除
:n1,n2 w!command 将文件中n1行至n2行的内容作为command的输入并执行之 ;若不指定n1,n2,则表示将整个文件内容作为command的输入
窗口操作:
:split 水平分割一个窗口
:split File1 为另一个文件file.c分隔窗口
:nsplit File1 为另一个文件file.c分隔窗口,并指定其行数(n为行数)
:close 关闭当前窗口
分窗口打开多个文件:
vim -o File1 File2 水平分割打开多个文件;按Ctrl+w松开,在按左右箭头切换窗口
vim -O File1 File2 垂直分割打开多个文件;按Ctrl+w松开,在按上下箭头切换窗口
分割当前窗口:
Ctrl+w, s (水平分割)
Ctrl+w, v (垂直分割)
Ctrl+w, q 关闭当前窗口
帮助:
:help 查看帮助文档,在这之中,按CTRL+] 进入超连接,按CTRL+O 返回。
:help subject 看某一主题的帮助,ZZ 退出帮助
vim查找替换练习:
1、复制/etc/grup.conf至/tmp目录,删除/tmp/grub.conf文件中行首的空白符
:%s/^[[:space:]]{1,}//g
2、复制/etc/rc.d/rc.sysinit至/tmp目录。将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行,行首加#号
:%s@^[[:space:]]{1,}.*@#&@g
3、删除/tmp/rc.sysinit文件中以#开头且后面跟了至少一个空白字符的行的行首的#和空白符
:1,%s@^#[[:space:]]{1,}@@g
4、为/tmp/grub.conf文件中的前三行的行首加#号
:1,3s@^@#@g
5、将/etc/yum.repos.d/CentOS-Media.repo中enable=0一行最后的0改为1;
:%@(enabled=)[0-9]@11@g
Vim桌面背景图