在 Linux 江湖, 最常用到的编辑器非 VIM 莫属, VIM 的功能很强大.
1. VIM 简介
在 Linux 世界中, 最长用到的而且功能比较强大的是 VIM 编辑器. VIM 编辑器是在内存缓冲区中处理数据.
VIM 文件名 or vi 文件名
都可以通过 VIM 打开文件
一般 VIM 打开文件功能更多一些, 特别是对于 shell 脚本这种文本, 会有不同字符的高亮显示.
如果启动 VIM 时未指定文件名, 或者指定的文件名不存在, VIM 会开辟一段新的缓冲区域来编辑.
VIM /etc/passwd
VIM tt
2 VIM 模式介绍
VIM 编辑器有两种模式:
普通模式
插入模式
2.1 普通模式
当刚打开要编辑的文件或新建一个文件时, VIM 首先进入的是普通模式. 在普通模式中, VIM 会将案件解释程命令.
在普通模式下, 可以用方向键在文本区域移动光标. VIM 有用来移动光标的命令:
h: 左移一个字符
j: 下移一行(文本的下一行)
k: 上移一行(文本的上一行)
l: 右移一个字符
PageDown(或 Ctrl+F): 下翻一屏
PageUp(或 Ctrl+B): 上翻一屏
G: 移动到缓冲区的最后一行
num G: 移动到缓冲区的第 num 行
gg: 移动到缓冲区的第一行
2.2 普通模式的命令行模式
VIM 编辑器在普通模式下有个特特别的功能叫命令行模式. 命令行模式提供了一个交互式命令行, 可以输入额外的命令来控制 VIM 的行为. 要进入命令行模式, 在普通模式下按下冒号键 ":", 光标会移动到消息航, 然后出现冒号, 等待输入命令.
在命令行模式下有几个命令时可以退出缓冲区:
:q 如果未修改缓冲区数据, 退出.
:q! 取消所有对缓冲区数据的修改并退出.
:w filename 将文件保存到另一个文件中.
:wq 将缓冲区数据保存到文件中并退出
3 编辑数据
在普通模式, 输入 i, 就会进入到插入模式, 然后就可以编辑和数据的插入. 如图:
在普通模式下, VIM 提供了一些命令来编辑缓冲区中的数据.
命令 | 描述 |
x | 删除当前光标所在位置的字符 |
dd | 删除光标所在的行 |
dw | 删除当前光标所在的单词 |
d$ | 删除当前光标所在位置至行尾的内容 |
J | 删除当前光标所在行行尾的换行符(拼接符) |
u | 撤销前一编辑命令 |
a | 在当前光标后追加数据 |
A | 在当前光标所在行尾追加数据 |
r char | 用 char 替换当前光标所在位置的单个字符 |
R text | 用 text 覆盖当前光标所在位置的数据,知道按下 ESC 键 |
4 复制和粘贴
VIM 在删除数据时, 实际上会将数据保存在单独的一个寄存器中. 可以用 p 命令取回数据. 而复制操作在 VIM 中是 y(代表 yank), 可以在 y 后面使用和 d 命令相同的第二字符(yw 代表复制一个单词, y$ 代表复制到行尾). 复制文本后, 把光标移动到希望放置文本的地方, 输入 p 命令, 复制的文件就会出现在该位置.
复制的过程你无法知道自己到底复制了多少内容, 知道粘贴后才明白复制的内容是什么, 可视模式可以解决这个问题, 可视模式会在你移动光标时就高亮显示需要复制的文本的内容. 要进入可视模式, 将光标移动到开始复制的位置, 然后按下 v 键, 你会注意到光标所在位置的文本已经被高亮显示. 下一步, 移动光标来覆盖希望复制的文本, 高亮显示会覆盖所有你移动的行文本, 然后按下 y 键进行复制, 寄存器中已经有了要复制的文本, 将光标移动到希望放置文本的位置, 使用 p 键来粘贴, 这样就完成了复制粘贴操作.
选中后输入 y 复制, 然后选择需要粘贴的地方, 输入 p 粘贴
如图:
然后就复制成功粘贴了!
5 查找和替换
5.1 查找
在 VIM 中可以通过按下斜线 (/) 键. 光标会跑到消息航, 然后 VIM 会显示出斜线, 然后输入需要查找的关键字符, 按下回车键, VIM 会在文本中查找要查找的文本.
通常会出现三种回应:
如果要查找的文本出现在光标当前位置之后, 则光标会跳转到该文本出现的第一个位置.
如果要查找的文本未在光标当前位置之后出现, 而且在之前出现, 则光标会染过文件末尾, 出现在该文本所在的第一个位置(并用一条消息指明)
输出一条错误消息, 说明在文件中没有找到要查找的文本.
如果要继续查找同一个单词, 按下斜线, 然后按回车, 挥着使用 n 键, 表示下一个(next).
5.2 替换
替换命令允许你快速的用一个单词来替换文本中的另一个单词. 必须进入命令模式才能使用替换命令. 替换命令的格式:
:s/old/new
VIM 会跳到 old 第一次出现的地方, 并用 new 来替换.
对这个命令进行一些修改可以替换多处文本:
:s/old/new/g 可以替换掉第一行出现的所有 old, 替换成 new.
:n,ms/old/new/g 替换行号 n 和 m 之间的所有 old
:%s/old/new/g 替换整个文件中的所有 old 最常用到
:%s/old/new/gc 替换整个文件中的所有 old, 但在每次出现时提示.
来源: https://www.cnblogs.com/nanshanjushi/p/11332148.html