vim,一个纯文本(纯文本信息,ASCII text)编辑器,Vi(Visual Interface) IMproved,是一个模式化的编辑器。
>vim有自带的教程,也是linux的一个内置命令
~]# vimtutor
## 一、基本模式分类
1 编辑模式(命令模式)
2 输入模式(插入模式)
3 末行模式(vim内置的命令行接口)
## 二、模式转换
1 编辑模式 �C> 输入模式
快捷键 | 含义
――― | ――
i | insert,在光标所在处输入
a | append,在光标所在处后方输入
o | 在光标所在处下方新建一行并开始输入
I | 在光标所在行的行首输入
A | 在光标所在行的行尾输入
O | 在光标所在行的上方新建一行并开始输入
2 输入模式 �C> 编辑模式
键入ESC键即可
3 编辑模式 �C> 末行模式(命令行模式)
键入:即可
4 末行模式 �C> 编辑模式
键入ESC键即可
## 三、进入文件编辑界面
vim [options] [file ..]
动作 | 含义
―― | ――-
\(什么都不加) | 使用vim打开文件,并且默认将光标放在第一行行首上
+# | 打开文件后,直接让光标处于第#行的行首
+/PATTERN | 打开文件后,直接将光标处于第一个被PATTERN匹配到的行的行首
例如:
`~]# vim +10 /etc/rc.d/init.d/functions` # vim打开文件,并且将光标自动放在第10行行首
`~]# vim + /etc/rc.d/init.d/functions` # vim打开文件,并且将光标自动放在末行行首
快捷键 | 含义
――― | ――
ZZ | 保存并退出
:q | 退出,但不保存
:q! | 强制退出,丢弃做出的修改
:wq | 保存并退出
:w /path/to/somefile | 保存至指定文件中
| 保存并退出
快捷键 | 含义
――― | ――
h | 光标向左跳转一个字符
l | 光标向右跳转一个字符
j | 光标向下跳转一个字符
k | 光标向上跳转一个字符
Num | 与字符跳转快捷键一同使用,向指定方向跳转字符的个数,例如10h,向左跳转10个字符
2 单词间跳转
快捷键 | 含义
――― | ――
w | 跳转到下一个单词的词首
e | 跳转到当前或下一个单词的词尾
b | 跳转到当前或前一个单词的词首
Num | 与单词跳转快捷键一同使用,向指定方向跳转单词的个数,例如10w,向后跳转10个单词
3 行首行尾跳转
快捷键 | 含义
――― | ――
^ | 跳转至行首的第一个非空白字符
0 | 跳转至一行绝对的行首,Tab字符不算,如果行首有Tab键,则会跳到Tab键之后
$ | 跳转至一行的绝对的行尾
4 行间跳转
快捷键 | 含义
――― | ――
#G | 跳转至第#行的行首
1G或gg | 跳转至第一行行首
G | 跳转至末行行首
5 句间跳转
快捷键 | 含义
――― | ――
) | 跳转至下一句
( | 跳转至前一句
Num | 与句跳转快捷键一同使用,向指定方向跳转句的个数,例如10),向后跳转10句
6 段间跳转
快捷键 | 含义
――― | ――
} | 向后跳转一个段落
{ | 向前跳转一个段落
Num | 与段落跳转快捷键一同使用,向指定方向跳转的段落个数,例如2},向后跳转2个段落
## 六、翻屏操作
快捷键 | 含义
――― | ――
Ctrl+f | 向文件尾部翻一屏
Ctrl+b | 向文件首部翻一屏
Ctrl+d | 向文件尾部翻半屏
Ctrl+u | 向文件首部翻半屏
Enter | 向文件尾部逐行移动
##七、编辑命令
1 字符编辑
快捷键 | 含义
――― | ――
x | 删除光标所在处的字符
#x | 删除光标所在处起始的#个字符
xp | 交换光标所在处及其后面的字符的位置
2 替换命令
快捷键 | 含义
――― | ――
r | 替换光标所在处的字符
3 删除命令
快捷键 | 含义
――― | ――
d | 删除命令,可结合光标跳转字符,实现范围删除
d$ | 删除当前光标所在处至行尾的全部字符
d^ | 删除当前光标所在处至行首的全部字符
dw | 删除当前光标所在处至下一个单词的词首的字符,支持加数字
de | 删除当前光标所在处至下一个单词的词尾的字符,支持加数字
db | 删除当前光标所在处至前一个单词的词首的字符,支持加数字
dd | 删除光标所在行的整行,支持加数字
#dd | 删除光标所在行开始往下的#行字符
4 粘贴命令
快捷键 | 含义
――― | ――
p | 如果缓冲区中缓冲的是整行,则将缓冲区中的内容拷贝至当前光标所在行的下方;如果缓冲区中缓冲的不是整行,则将缓冲区中的内容拷贝至当前光标所在处的后方
P | 如果缓冲区中缓冲的是整行,则将缓冲区中的内容拷贝至当前光标所在行的上方;如果缓冲区中缓冲的不是整行,则将缓冲区中的内容拷贝至当前光标所在处的前方
5 复制命令(yank,y)
快捷键 | 含义
――― | ――
y | 复制命令,可结合光标跳转字符
y$ | 复制当前光标所在处至行尾的全部字符
y^ | 复制当前光标所在处至行首的全部字符
yw | 复制当前光标所在处至下一个单词的词首的字符,支持加数字
ye | 复制当前光标所在处至下一个单词的词尾的字符,支持加数字
yb | 复制当前光标所在处至前一个单词的词首的字符,支持加数字
yy | 复制光标所在行的整行,支持加数字
#yy | 复制光标所在行开始往下的#行字符
6 改变命令(change,c)
功能:编辑模式 �C> 输入模式,实现删除操作的同时进入输入模式
快捷键 | 含义
――― | ――
c | 删除并切换至输入的命令,可结合光标跳转字符
c$ | 删除当前光标所在处至行尾的全部字符,并转成输入模式
c^ | 删除当前光标所在处至行首的全部字符,并转成输入模式
cw | 删除当前光标所在处至下一个单词的词首的字符,并转成输入模式,支持加数字
ce | 删除当前光标所在处至下一个单词的词尾的字符,并转成输入模式,支持加数字
cb | 删除当前光标所在处至前一个单词的词首的字符,并转成输入模式,支持加数字
cc | 删除光标所在行的整行,并转成输入模式,支持加数字
#cc | 删除光标所在行开始往下的#行字符,并转成输入模式
## 八、其他命令
1 可视化模式
功能:像windows的文本编辑工具一样,可以通过鼠标进行范围选定,然后进行操作
快捷键 | 含义
――― | ――
v | 从光标所在字符开始,根据鼠标选定的范围,以字符为单位进行选择
V | 从光标所在行开始,根据鼠标所选定的范围,以行尾单位进行选择
> 注意:
可视化模式经常要结合编辑命令:d(删除)、c(删除并进入输入模式)、 y(复制)。
2 撤销操作 �C undo
功能:对之前进行的操作进行撤销,默认在没有进行手动强制保存之前,可以撤销之前的50个操作。
快捷键 | 含义
――― | ――
u | 逐次撤销之前的操作
#u | 一次撤销之前操作的#次操作
3 恢复此前的撤销
快捷键 | 含义
――― | ――
Ctrl+r | 恢复此前的撤销操作
4 重复此前的操作
快捷键 | 含义
――― | ――
. | 重复上一次执行的操作动作
## 九、末行模式
### 1 地址定界
:start_pos[,end_pos]
表现形式 | 含义
―――― | ――
# | 指定特定的第#行,例如,:5即第5行
. | 则表示光标当前所在行
$ | 表示最后一行,例如,:.,$-1表示从当前行到倒数第2行
% | 表示全文,相当于:1,$
m,n | 指定行范围,m为起始行,n为结束行,例如,:5,8即从第5行到第8行
m,+n | 指定行范围,左侧为起始行的编号,右侧为相对左侧行号的偏移量,例如,:5,+3即从第5行到第8行
/PATTERN/ | 从光标所在位置开始向后查找,找到第一个匹配PATTERN的行
/PATTERN/,$ | 从光标所在位置开始向后查找,找到所有匹配PATTERN的行
/PATTERN1/,/PATTERN2/ | 从光标所在位置开始向后查找,范围是从第一次被PATTERN1所匹配到的行开始,至第一次被PATTERN2所匹配到的行结束之间的内容
注意:
上述各种表现形式均可同编辑命令一同使用,实现编辑操作:
操作 | 含义
―― | ――
d | 将框定范围内的文本删除
y | 将框定范围内的文本复制
c | 将框定范围内的文本修改,也就是删除后立即进入输入模式
w /path/to/somefile | 将框定范围内的文本保存至某指定文件
r /path/from/somefile | 将指定的文件中的文本读取并插入至框定位置
### 2 查找功能
表现形式 | 含义
―――― | ――
/PATTERN | 从光标当前所在处向文件尾部查找能够被当前模式匹配到的所有字符串;其中,n(下一个匹配的位置,与命令方向相同)、N(上一个匹配的位置,与命令方向相反)
?PATTERN | 从光标当前所在处向文件首部查找能够被当前模式匹配到的所有字符串;其中,n(下一
个匹配的位置,与命令方向相同)、N(上一个匹配的位置,与命令方向相反)
### 3 查找并替换
**功能**:查找匹配到的内容,并替换为想替换的内容,默认仅替换每一行中第一次匹配到的内容
**格式**:s/要查找的内容/替换为的内容/修饰符
> 注意:
查找并替换模式使用”/”来做为每个部分的分隔符,但是如果某一部分中的字符中也出现了”/”,可以把分隔符替换为其他非常用字符,比如#、@等,使之变成:
s#要查找的内容#替换为的内容#修饰符
s@要查找的内容@替换为的内容@修饰符
其中,
**要查找的内容**:可使用正则表达式;
**替换为的内容**:不能使用正则表达式,但可以引用,例如: \1,\2的分组引用
> 如果“要查找的内容”部分在模式中使用分组符号,在“替换为的内容”中使用后向引用匹配到的内容;
如果“要查找的内容”部分在模式中没有使用分组符号,在“替换为的内容”中则直接引用查找模式匹配到的全部文本,要使用&符号;
**修饰符**:
修饰符 | 含义
――― | ――-
i | 查找时忽略大小写
g | 全局替换,意味着一行中如果匹配到多次,则均替换;
**示例**:
表现形式 | 含义
―――― | ――
:%s/this/This/ | 从全局搜索this字串,并把每一行中第一次匹配到的字串替换为This
:%s/this/This/g | 从全局搜索this字串,并把每一个匹配到的字串都替换为This
:%s/this/This/gi | 从全局搜索this字串,并且在查找时忽略字符大小写,并把每一个匹配到的字串都替换为This
:%s/\\/cgroup\\/systemd/\\/etc\\/sysconfig/g | 从全局查找/cgroup/systemd字串,并把每一个匹配到的字串都替换为/etc/sysconfig,其中的代表路径的”/”需要加转义符”\\”
:%s@/cgroup/systemd@/etc/sysconfig@g | 从全局查找/cgroup/systemd字串,并把每一个匹配到的字串都替换为/etc/sysconfig
:%s@\\<t\\([[:alpha:]]\\+\\)\\>@T\\1@g | 从全局搜索以t开头的单词,并把所有匹配到的单词的t全部替换为T
:%s@\\t[[:alpha:]]\\+\\>@&er@g | 从全局搜索以t开头的单词,并把所有匹配到的单词后全部加上er
**练习题**:
(1) 复制/etc/grub2.cfg文件至/tmp目录中,用查找替换命令删除/tmp/grub2.cfg文件中以空白字符开头的行的行首的空白字符;
“`
~]# cp /etc/grub2.cfg /tmp/
~]# vim /tmp/grub2.cfg
末行模式下执行
方法1: :%s@^[[:space:]]\+\([^[:space:]]\+\)@\1@g
方法2: :%s@^[[:space:]]\+@@g
“`
(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/grub2.cfg文件的前三行的行首加#号
“`
~]# vim /tmp/grub2.cfg
在末行模式下执行 :1,3s@.*@#&@
“`
(4) 将/etc/yum.repos.d/CentOS-Base.repo文件中所有的enabled=0替换为enabled=1,所有的gpgcheck=0替换为gpgcheck=1
“`
~]# vim /etc/yum.repos.d/CentOS-Base.repo
末行模式下执行
方法1:
:%s/enabled=0/enabled=1/g
:%s/gpgcheck=0/gpgcheck=1/g
方法2:
:%s@\(enabled\|gpgcheck\)=0@\1=1@g
“`
## 十、vim的多文件功能
### 1. 多文件
**格式**:vim FILE1 FILE2 …
**功能**:
(1) 一个vim命令编辑多个文件;
(2) 一次只能编辑一个;
(3) 需要进行向前或向后切换;
(4) 能够实现跨文件复制;
切换命令 | 含义
―――― | ――
prev | 向前切换一个文件
next | 向后切换一个文件
first | 切换至第一个
last | 切换至最后一个
退出命令 | 含义
―――― | ―�C
:wqall | 保存所有文件并退出
:wall | 保存所有文件
:qall | 退出所有文件
### 2. 多窗口
在使用vim打开文件时,可以通过选项设置同时打开多个窗口。
选项 | 含义
―― | ――
-o | 水平分割窗口
-O | 垂直分割窗口
切换命令(Ctrl+w)
同时按住Ctrl+w后松开,然后按方向键进行切换,详情如下:
命令 | 含义
―― | ――
↑ | 向上切换文件
↓ | 向下切换文件
← | 向左切换文件
→ | 向右切换文件
s | 单个文件再做水平切割,也适用于单文件修改
v | 单个文件再做垂直切割,也适用于单文件修改
## 十一、定制vim的工作特性
在末行模式下做得设定,仅对当前vim进程有效;想要永久有效,要进行配置文件修改。
永久有效的配置文件:
(1) 全局的: /etc/vimrc
(2) 个人的: ~/.vimrc
命令 | 含义
―― | ――
:set number或:set nu | 显示行号
:set nonumber或:set nonu | 取消显示行号
:set showmatch或:set sm | 括号匹配高亮显示,光标移动到括号的一边,另一边会高亮显示
:set noshowmatch或:set nosm | 取消高亮显示
:set ai | | 启用自动缩进功能
:set noai | 取消自动缩进功能
:set hlsearch | 启用高亮搜索
:set nohlsearch | 取消高亮搜索
:Syntax on | 启用语法高亮
:Syntax off | 禁用语法高亮
:set ic | 启用忽略大小写功能
:set noic | 禁用忽略大小写功能
获取帮助:
:help [subject]
设置vim中,Tab键缩进空格数:
修改~/.vimrc或/etc/vimrc文件,加入:
set ts=4
本文由马哥Linux运维学员原创,首发于178linux.com
原文链接:https://www.f2er.com/bash/390472.html