Vim编辑器是功能强大的跨平台文本文件编辑工具,继承自Unix系统的Vi编辑器,支持Linux/Mac OS X/Windows系统,利用它可以建立、修改文本文件。进入Vim编辑程序,可以在终端输入下面的命令:
~~~
$vim [filename]
~~~
其中filename是要编辑器的文件的路径名。如果文件不存在,它将为你建立一个新文件。
## Vim使用
### vim:模式化编辑器
~~~
基本模式:编辑模式,命令模式,输入模式,末行模式(内置的命令行模式)
打开文件:
# vim [OPTION]...FILE...
+#:打开文件后,直接让处于第#行的行首
模式转换:
ESC键:
编辑模式-->输入模式:
i: 在光标所在处的前方转换为输入模式
a: 在光标所在的后方转换为输入模式
o: 在光标所在行的下方新建一个空行并转换为输入模式
I: 跳转至行首
A:跳转至行尾
O: 光标所在行的上方新建一个空白行
输入模式-->编辑模式
ESC
编辑模式-->末行模式
:
末行模式-->编辑模式
ESC
~~~
### 关闭文件:
~~~
:q:退出
:q! 强制退出,丢弃做出的修改
:wq 保存退出
:x 保存退出
:wq! 强制保存退出
:w :/PATH/TO/SOMEWHERE
ZZ:保存退出
~~~
### 光标移动:
#### 字符间移动:h,j,k,l
~~~
h:左
l:右
j:下
k:上
#{h|j|k|l}: 跳#个字符
~~~
#### 单词间移动
~~~
w: 下一个单词词首
e: 当前单词或下一个单词词尾
b: 当前单词或前一个单词词首
#{w|e|b}:跳#个单词
~~~
#### 行内移动
~~~
^: 跳转至行首第一个非空白字符
0:跳转至绝对行首
$: 跳转至绝对行尾
~~~
#### 行间移动:
~~~
#G: 直接跳转至第#行;
G:最后一行
1g,gg:回至第一行
句子间移动:
)
(
段落间移动:
}
{
~~~
### vim编辑命令
#### 字符编辑:
~~~
x: 删除光标所在处的字符
#x:删除光标起始的#字符
~~~
#### 替换命令
~~~
r:替换光标所在处的字符
~~~
#### 删除命令
~~~
d:结合光标跳转字符使用,删除跳转范围内的字符
d$:删除光标所在行
d^:删除空格
dw:删除一个字符
de:向后删除一个单词
db:向前删除一个单词
dd: 删除光标所在行
#dd:多行删除
~~~
#### 粘贴命令
~~~
p:缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在的后面;
P:缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在的前面;
~~~
#### 复制命令
~~~
y:复制,工作行为与d相似
yy:复制行
#yy:复制多行
~~~
#### 改变命令
~~~
c:修改,工作行为与d相似
编辑模式-->末行模式
cc:删除并输入新内容
#cc:
~~~
#### 可视化模式
~~~
v:按字符选定
V:按行选定
~~~
#### 撤销操作
~~~
u(undo):撤销此前的操作
#u:撤销指定撤销次数
撤销此前的撤销:
ctrl+r
重复前一个编辑操作:.
~~~
#### 翻屏操作
~~~
Ctrl+f: 向文件尾部翻一屏
Ctrl+b: 向文件首部翻一屏
Ctrl+d: 向文件尾部翻半屏
Ctrl+u: 向文件首部翻半屏
~~~
### vim中的末行模式
地址定界
~~~
:start_pos,end_pos
#:具体第#行,例如2表示第2行
#,#:从左侧#表示行起始,到右侧#表示行结尾
#,+#:从左侧#表示的行起始,加上右侧#表示的行数
.:当前行
$:最后一行
%:全文,相当于1,$
/pat1/,/pat2/:
从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束
使用方式:
后面跟一个编辑模式
d
y
w /PATH/TO/SOMEWHERE:将范围内的行另存至指定文件中
r /PATH/FROM/SOMEFILE:在指定位置插入指定文件中的所有内容
~~~
### 查找
~~~
/PATTERN:从当前光标所在处向文件尾部查找
?PATTERN:从当前光标所在处向文件首部查找
n:与命令同方向
N:与命令反方向
~~~
###查找并替换
~~~
s:在末行模式下完整查找替换操作
s/要查找的内容/替换为的内容/修饰符
要查找的内容:可使用模式
替换为的内容:不能使用模式,但可以使用\1,\2...等后向引用符号;还可以使用“&”引用前面查找到的整个内容
修饰符:
i:忽略大小写
g:全局替换;默认情况下,每一行只替换第一次出现
~~~
### 练习:
~~~
1、复制/etc/grub2.cfg至/tmp/目录,用查找替换命令删除/tmp/grub.cfg文件中的行首的空白字符
%s/^[[:space:]]\+//g
2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查的替换命令为/tmp/functions的每行开头为空白字符的行行首添加一个#号;
%s/^[[:space:]]/#&/
~~~
### 多文件模式:
~~~
vim FILE1 FILE2 FILE3....
:next 下一个
:prev 前一个
:last 最后一个
:first 第一个
:wall 保存退出
:qall 退出所有
~~~
### 多窗口模式
~~~
多文件:
vim
-o: 水平分割
-O: 垂直分割
Ctrl+w, Arrow
单文件:
Ctrl+w, s: 水平分割
Ctrl+w, v: 垂直分割
~~~
### 定制vim的工作特性
~~~
配置文件:永久有效
全局:/etc/vimrc
个人:~/.vimrc
末行:当前vim进程有效
(1)行号
显示:set number,简写为set nu
取消显示:set nonumber ,简写set nonu
(2)括号匹配
匹配:set showmatch 简写 set sm
取消:set nosm
(3)自动缩进
启用:set ai
禁用:set noai
(4)高亮搜索
启用:set hlsearch
禁用:set nohlsearch
(5)语法高亮
启用:syntax on
禁用:syntax off
(6)忽略字符大小写
启用:set ic
不忽略:set noic
~~~
- 文章翻译
- Large-scale cluster management at Google with Borg
- Borg Omega and kubernetes
- scaling kubernetes to 7500 nodes
- bpf 的过去,未来与现在
- Demystifying Istio Circuit Breaking
- 知识图谱
- skill level up graph
- 一、运维常用技能
- 1.0 Vim (编辑器)
- 1.1 Nginx & Tengine(Web服务)
- 基础
- 1.2 zabbix
- 定义
- 登录和配置用户
- 1.3 RabbitMQ(消息队列)
- 原理
- RabbitMQ(安装)
- 1.4虚拟化技术
- KVM
- 1.5 Tomcat(Web中间件)
- 1.6Jenkins
- pipline
- 1.7 Docker
- network
- 1.8 Keepalived(负载均衡高可用)
- 1.9 Memcache(分布式缓存)
- 1.10 Zookeeper(分布式协调系统)
- 1.11 GitLab(版本控制)
- 1.12 Jenkins(运维自动化)
- 1.13 WAF(Web防火墙)
- 1.14 HAproxy负载均衡
- 1.15 NFS(文件传输)
- 1.16 Vim(编辑器)
- 1.17 Cobbler(自动化部署)
- 二、常用数据库
- 2.1 MySQL(关系型数据库)
- mysql主从复制
- 2.2 Mongodb(数据分析)
- 2.3 Redis(非关系数据库)
- 三、自动化运维工具
- 3.1 Cobbler(系统自动化部署)
- 3.2 Ansible(自动化部署)
- 3.3 Puppet(自动化部署)
- 3.4 SaltStack(自动化运维)
- 四、存储
- 4.1 GFS(文件型存储)
- 4.2 Ceph(后端存储)
- 五、运维监控工具
- 5.1 云镜
- 5.2 ELK
- 六、运维云平台
- 6.1 Kubernetes
- 6.2 OpenStack
- 介绍
- 安装
- 七、Devops运维
- 7.1 理念
- 7.2 Devops运维实战
- 八、编程语言
- 8.1 Shell
- 书籍《Wicked Cool Shell Scripts》
- 8.2 Python
- 8.3 C
- 8.4 Java
- leecode算法与数据结构
- 九、杂记
- 高优先级技能
- 知识点
- JD搜集
- 明显的短板
- 1.0 Python
- 1.1 Kubernetes
- 1.18.2 《kubernetes in action》
- 遗漏知识点
- 1.18.3 GCP、azure、aliyun
- Azure文档
- 1.18.5 《program with kubernetes》
- Istio
- HELM
- 《Kubernetes best practice》
- Kubernetes源码学习
- Scheduler源码
- 调度器入口
- 调度器框架
- Node筛选算法
- Node优先级算法
- pod抢占调度
- 入口
- 主要代码结构
- new
- 文章翻译
- Flannel
- 从二进制集群搭建
- 信息收集
- docker优化
- 1.2 shell
- 面试题
- grep awk sed 常见用法
- shell实践
- 1.3 Data structure(数据结构)
- Calico
- Aliyun文档以及重点模块
- git
- 大数据组件
- 前端,后端,web框架
- cgroup,namespace
- 内核
- Linux搜集
- crontab
- centos7常用优化配置
- centos Mariadb
- eBPF
- ebpf的前世今生
- Linux性能问题排查与分析
- 性能分析搜集
- 性能分析常用10条
- 网络性能优化
- 文本处理命令
- sql
- Iptables
- python面试题
- iptables
- iptables详细
- zabbix面试题,proj
- prometheus
- web中间件
- nginx
- Haproxy
- grep sed awk
- Linux常用命令
- 云平台
- 书籍Linux应用技巧
- kafka
- kafka面试题
- ETCD
- Jenkins
- 3天补充的点
- K8s源码
- K8s
- k8s实操
- etcd
- test
- BPF
- PSFTP使用
- StackOverflow问答精选
- 问题
- 我对于学习思考
- 修改ssh超时时间
- 课程目录
- 运维与运维开发
- The Person
- 个人杂谈
- mysql主从复制
- 对于工作的认识与思考