1. Vim基本概述
Vim: vi和Vim是Linux下的一个文本编辑工具. (可以理解为windows的记事本)
VI与Vim的区别: vi和Vim都是文本编辑器, 只不过Vim是vi的增强版, 比vi多了语法高亮显示, 其他编辑功能几乎无差,
所以使用vi还是Vim取决个人习惯. (相当于windows系统下的文本编辑软件“记事本”与”notepad++”的区别)
PS:最小化安装CentOS系统, 默认情况下没有Vim命令, 但可以使用命令: yum install Vim -y 安装.
因为Linux系统一切皆为文件, 而我们工作最多的就是修改某个服务的配置(其实就是修改文件内容).
也就是说如果没有vi/Vim, 我们很多工作都无法完成.
PS: Vim是学习linux最重要的命令之一
2. Vim模式三种模式
在使用Vim之前, 需要先了解Vim的三种模式:
普通模式、编辑模式、命令模式, 每种模式分别支持多种不同的快捷键, 要想高效率地操作文本,
就必须先搞清这三种模式的操作区别以及模式之间的切换方法.
小结: Vim编辑打开文件整体流程如下:
1.默认打开文件处于普通模式
2.从普通模式切换至编辑模式需要使用a、i、o
3.编辑模式修改完毕后需要先使用ECS返回普通模式
4.在普通模式输入”:”或”/“进入命令模式, 可实现文件的保存与退出.
PS: 在Vim中, 无法直接从编辑模式切换到命令模式.
3. Vim基本模式使用
3.1 普通模式
普通模式: 主要是控制光标移动, 可对文本进行复制、粘贴、删除等工作.
使用Vim filename 编辑一个文件时, 一进入该文件就是普通模式了.
在这个模式下, 可以进行光标移动、复制、删除、粘贴操作.
1. 命令光标跳转
G 光标跳转至文本末端
gg 光标跳转至文本顶端
Ngg 光标跳转至当前文本内第N行
$ 光标跳转至当前光标所在行的尾部
^或者0 光标跳转至当前光标所在行的首部
2. 翻页
* 文件内容较多时使用
ctrl+b 往上翻页
ctrl+f 往下翻页(行比较多)
3. 复制粘贴
yy 复制当前光标所在的行
5yy 复制当前光标以及光标向下4行
p(小写) 粘贴至当前光标下一行
P(大写) 粘贴至当前光标上一行
np(小写) 粘贴至当前光标下一行 n次
nP(大写) 粘贴至当前光标上一行 n次
4. 删除、剪贴、撤销
dd 删除当前光标所在的行(剪切不粘贴就等于删除)
4dd 删除当前光标所在的行以及往下的3行
dG 删除当前光标以后的所有行
D 删除当前光标及光标以后的内容
x 删除当前光标标记往后的字符
X 删除当前光标标记往前的字符
dd & p 先剪贴dd(number dd),后粘贴p
u 撤销上一次的操作
5. 替换
r 替换当前光标标记的单个字符
R 进入REPLACE模式, 连续替换, ESC结束
3.2 编辑模式
编辑模式: 主要进行文本内容编辑和修改
从普通模式进入编辑模式, 只需你按一个键即可(i, I, a, A, o, O)
当进入编辑模式时, 会在屏幕的最下一行会出现 “INSERT”标记
从编辑模式回到普通模式只需要按键盘左上方的 ESC 键即可.
i 进入编辑模式,光标不做任何操作
a 进入编辑模式,将当前光标往后一位
o 进入编辑模式,并在当前光标下添加一行空白内容
I 进入编辑模式,并且光标会跳转至本行的头部
A 进入编辑模式,将光标移动至本行的尾部
O 进入编辑模式,并在当前光标上添加一行空白内容
3.3 末行/命令模式
末行模式(命令模式): 主要用于保存或退出文本.
在普通模式下, 输入 “:” 或者 “/“ 即可进入命令模式.
在命令该模式下, 可进行的操作有, 显示行号、搜索、替换、保存、退出.
1. 文件保存与退出
:w 保存当前状态
:w! 强制保存当前状态
:q 退出当前文档(文档必须保存才能退出)
:q! 强制退出文档不会修改当前内容
:wq 先保存, 在退出
:wq! 强制保存并退出
:x 先保存, 在退出
ZZ 保存退出, shfit+zz
:number 跳转至对应的行号
:set nu 显示行号
:set nonu 不显示行号
2. 文件内容查找
/string 需要搜索的内容(查找)
n 按搜索到的内容依次往下进行查找
N 按搜索到的内容依次往上进行查找
3. 文件内容替换
:1, 5s#sbin#test#g 替换1-5行中包含sbin的内容为test
:1, 5s#sbin#test# 只替换1-5行中第一个包含sbin的内容为test
:%s#sbin#test#g 替换整个文本文件中包含sbin的替换为test
:%s#sbin#test#gc 替换内容时时提示是否需要替换
4. 文件内容另存
:w /root/test.txt 将所有内容另存为/root/test.txt文件中
5. 文件内容读入
:r /etc/hosts 读入/etc/hosts文件至当前光标下面
:5r /etc/hosts 指定插入/etc/hosts文件至当前文件的第五行下面
4. 视图模式
(从普通模式进入视图模式), 主要进行批量操作
ctrl+v 进入可视块模式, 选中需要注释的行
1.插入:按shift+i进入编辑模式, 输入#, 结束按ESC键
2.删除:选中内容后, 按x或者d键删除
3.替换:选中需要替换的内容, 按下r键, 然后输入替换后的内容
shift+v 进入可视行模式,选中整行内容
1.复制:选中行内容后按y键及可复制.
2.删除:选中行内容后按d键删除.
5. Vim扩展知识
5.1 环境变量临时生效
:set nu 显示行号
:set ic 忽略大小写, 在搜索的时候有用
:set ai 自动缩进
:set list 显示制表符(空行、tab键)
:set no[nu|ic|ai…] 取消临时设定的变量
5.2 环境变量永久生效
~/.Vimrc 个人环境变量(优先级高) /etc/Vimrc 全局环境变量
Vim ~/.Vimrc
# 在文本中添加下列代码, 当下次再打开文件自动显示行号并忽略大小写
set nu
set ic
如果个人Vim环境没有配置, 则使用全局Vim环境变量配置.
如果个人Vim环境和全局环境变量产生冲突, 优先使用个人Vim环境变量.
5.3 同时编辑多个文件
Vim -o file1 file2 水平分割
Vim -O file1 file2 垂直分割
ctrl+ww 文件间切换
5.4 文件差异对比
相同文件之间差异对比, 通常用于对比修改前后差异
diff 文件对比
Vimdiff 以Vim方式打开两个文件对比,高亮显示不同的内容
5.5 Vim非正常退出
ctrl+z 挂起或强制退出终端没关闭Vim后
假设打开filename文件被以外关闭,需要删除同文件名的.swp文件即可解决
rm -f .filename.swp
6. Vim练习
6.1 基础练习
1. 将/etc/passwd 复制到/root/目录下, 并重命名为test.txt
2. 用Vim打开test.txt并显示行号
3. 分别向下、向右、向左、向右移动5个字符, 分别向下、向上翻两页
4. 把光标移动到第10行, 让光标移动到行末, 再移动到行首, 移动到test.txt文件的最后一行, 移动到文件的首行
5. 搜索文件中出现的 root 并数一下一共出现多少个, 不区分大小写搜索
6. 把从第一行到第三行出现的root 替换成–od–, 然后还原上一步操作
8. 把整个文件中所有的root替换成–od–
9. 把光标移动到20行, 删除本行, 还原上一步操作
10. 删除第19行, 还原上一步操作
11. 删除从5行到10行的所有内容, 还原上一步操作
12. 复制2行并粘贴到11行下面, 还原上一步操作(按两次u)
13. 复制从11行到15行的内容并粘贴到8行上面, 还原上一步操作(按两次u)
14. 把13行到18行的内容移动文件的尾部, 还原上一步操作(按两次u)
15. 光标移动到首行, 把/sbin/nologin改成/bin/bash
16. 在第一行下面插入新的一行, 并输入”# Hello!”
17. 保存文档并退出
6.2 示例练习
[root@www ~]
server {
Listen 8080;
Server_Name Vim.OldboyEDU.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forward-for;
proxy_intercept_errors on;
proxy_next_upstream error timeout;
proxy_next_upstream_timeout 3s;
proxy_next_upstream_tries 2;
error_page 500 502 403 404 = /proxy_error.html;
}
location = /proxy_error.html {
root /code/proxy;
}
}
1. 使用Vim打开proxy.conf文件
2. 修改Listen为listen小写, 并将8080修改为80
3. 修改ServerName为server_name小写.
4. 修改Vim.OldboyEDU.com为Vim.oldboy.com
5. 在server_name行下插入一行 root /code;
5. 复制5-14行的内容, 然后将其粘贴到14行下面
6. 删除与proxy_set_header相关的两行全部删除
7. 如上操作完成后, 在13-20行前面加上#号
8. 删除21-23的行, 然后保存当前文件
———————————————— 文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低. 文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低. 文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低. 文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低. 文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低. 文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低. 文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低. 文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低. 文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低. 文章的段落全是代码块包裹的, 留言是为了避免文章提示质量低. ————————————————
|