Linux - 2. Vi / Vim 笔记

vi / vim

所有的 Unix Like 系统都会内建 Vi 文本编辑器,其他的文本编辑器则不一定会存在。但是目前使用比较多的是 Vim 编辑器。

Vim 具有程序编辑的能力,可以看做是 Vi 的增强版本,可以主动地以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富。

下述快捷键的表述约定:

  • :代表按键,如 Space 为 空格键;命令模式下为命令。
  • Num:代表输入数字
  • String:代表字符串
  • +:代表同时按键
  • 紧邻:代表依次按

1. 模式

基本上 Vi 、Vim 共分为四种模式,分别是正常模式(Normal mode)插入模式(Insert mode)命令模式(Command-line mode)可视模式(Visual mode)

1.1. 正常模式

  • 作用:浏览文件,也包括一些复制、粘贴、删除等操作。
  • 进入此模式的方式:当使用 Vim 打开一个文本文件时,便默认进入此模式。打开文本文件的命令:vim 文件路径

1.2. 可视模式

  • 作用:批量选取文本。进入可视模式后,终端左下角会有VISUAL 或者 VISUAL LINE 提示,出现提示便可以移动光标选取文本内容。
  • 从正常模式进入到此模式:vVCtrl + V
  • 从此模式退出到正常模式:ESC

1.3. 插入模式

  • 作用:插入文本。进入插入模式后,终端左下角会有 INSERTREPLACE 提示,只有出现这两种提示时才可以输入字符。
  • 从正常模式进入到此模式:按下 iIoOaArR 中的任何一个字母之后会进入插入模式,每个键的作用在细节上有些许区别,见下表:
按键作用
i在目前光标处输入
I在目前光标所在行的第一个非空格符处开始输入
a从目前光标处的下一个字符处开始输入
A从目前光标所在行的最后一个字符处开始输入
o为在目前光标所在行的下一行处输入新的一行
O为在目前光标所在行的上一行处输入新的一行
r只会取代光标所在的那一个字符一次
R会一直取代光标所在的字符,直到按下 ESC 为止
  • 从此模式退出到正常模式:ESC

1.4. 命令模式

  • 作用:执行一些输入并执行一些 Vim 或插件提供的指令,就像在shell里一样。这些指令包括设置环境、文件操作、调用某个功能、离开Vim等等。
  • 从正常模式进入到此模式:: 键 或 /
  • 从此模式退出到正常模式:ESC

1.5. 模式转换

在这里插入图片描述

2. 快捷键

2.1. 正常模式

2.1.1. 移动光标
按键作用
h 或 向左箭头键()光标向左移动一个字符
j 或 向下箭头键()光标向下移动一个字符
k 或 向上箭头键()光标向上移动一个字符
l 或 向右箭头键()光标向右移动一个字符
Ctrl + f屏幕『向下』移动一页,相当于 Page Down 按键
Ctrl + b屏幕『向上』移动一页,相当于 Page Up 按键
Ctrl + d屏幕『向下』移动半页
Ctrl + u屏幕『向上』移动半页
+光标移动到非空格符的下一行
-光标移动到非空格符的上一行
Num Space光标在当前行向右移动的 Num 个字符
0Home移动到这一行的最前面字符处
$End移动到这一行的最后面字符处
H光标移动到这个屏幕的最上方那一行的第一个字符
M光标移动到这个屏幕的中央那一行的第一个字符
L光标移动到这个屏幕的最下方那一行的第一个字符
G移动到此文档的末行
Num G移动到此文档的第 Num 行
g g移动到此文档的首行,相当于1G
Num Enter光标向下移动 Num 行
2.1.2. 简单编辑

动词代表了我们打算对文本进行什么操作。例如:

  • d:删除(delete)
  • y:复制(yank)
  • p:粘贴(paste)
  • r:替换(replace)
  • c:修改(change)
  • v:选取(visual select)

介词界定了待编辑文本的范围或者位置。例如:

  • i:在…之内(inside)
  • a:环绕…(around)
  • t:到…位置前(to)
  • f:到…位置上(forward)

名词代表了我们即将处理的文本。Vim 中有一个专门的术语叫做文本对象(text object),示例:

  • w:单词(word)
  • s:句子(sentence)
  • p:段落(paragraph)
  • t:标签(tag)
  • 文本块:成对的分隔符包括 小、中、大括号,双引号,单引号,反引号,以及HTML中的标签所包含的文本

文本编辑命令的基本语法如下:

  • 动词+介词+名词
  • 动词+介词/数词+名词
  • 数词+动词+名词
按键作用
x向后删除一个字符(相当于 del 键)
X向前删除一个字符(相当于 backspace 键)
Num x执行“向后删除一个字符”Num次
d d删除光标所在行
Num d d执行“删除光标所在行”Num次
d g g删除光标所在行到首行的所有字符
d G删除光标所在行到末行的所有字符
d 0删除游标所在处到该行首的所有字符
d $删除游标所在处到该行尾的所有字符
y y复制光标所在行
Num y y执行“复制光标所在行”Num次
y g g复制光标所在行到首行的所有字符
y G复制光标所在行到末行的所有字符
y 0复制游标所在处到该行首的所有字符
y $复制游标所在处到该行尾的所有字符
c修改,选择完毕修改目标后,会进入插入模式
c c修改此行。其余选择见上删除、复制。
pp 为将已复制的数据从光标所在行的下一行开始粘贴
PP 为将已复制的数据从光标所在行的上一行开始粘贴
J将光标所在行与其下一行的字符结合成同一行
u复原前一个动作
Ctrl + r重做上一个动作
.重复前一个动作
Z Z若修改过,保存当前文件,然后退出。效果等同于:wq
Z Q不保存,强制退出。效果等同于:q!

可视模式

进入可视模式后可以使用正常模式下移动光标的操作以及操作文本对象的方式选取文本。除此之外可以使用快捷键 o 将光标移动到已选取文本的开头或结尾。

选取文本后可以进行正常模式下删除、复制、替换等操作。

2.2. 插入模式

  • ENTER:换行
  • BACKSPACE:删除光标前一个字符
  • DELETE:删除光标后一个字符
  • 方向键:在文本中移动光标
  • HOME:移动光标到行首
  • END:移动光标到行尾
  • Page Up:上翻页
  • Page Down:下翻页
  • Insert:切换光标为输入/替换模式,光标将变成竖线/下划线

2.3. 命令模式

2.3.1. 搜索替换
按键作用
/ String向光标之下寻找一个符合条件的字符串。
? String向光标之上寻找一个符合条件的字符串。
n重复前一个搜寻的动作。
N『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
: Num1 , Num2 s / String1 / String2 / g在第 Num1 与 Num2 行之间寻找 String1 这个字符串,并将该字符串替换为 String2。
: 1 , $ s / String1 / String2 / g在 首行 与 末行 之间寻找 String1 这个字符串,并将该字符串替换为 String2。
: % s /String1 / String2/ g同上
: 1 , $ s / String1 / String2 / g c在 首行 与 末行 之间寻找 String1 这个字符串,并将该字符串替换为 String2,且在取代前显示提示字符给用户确认 (confirm) 是否需要取代。
: % s / String1 / String2 / g c同上
2.3.2. 储存、离开等指令
按键作用
:w保存文件,将文件写入硬盘。
:w!若文件属性为“只读”时,强制将文件写入硬盘,但最终能否能否写入,取决于用户权限。
:q离开 vim。
:q!不保存修改,强制离开 vim。
:wq保存后离开,若为 :wq! 则为强制保存后离开。注意:! 在 vi 当中,常常具有“强制”的意思。
:w [filename]另存为新文件。
:Num1,Num2 w [filename]将 n1 行到 n2 行的内容保存成 filename 文件。
:r [filename]将 filename 这个文档内容追加到光标所在行后面。
:! [command]暂时离开 vi 到指令行模式下执行 command 的显示结果。
例如::! ls /home,在 vi 当中察看 /home 底下以 ls 输出的目录信息。
2.3.3. Vim 环境的变更
按键作用
:set nu显示行号
:set nonu不显示行号

3. 其它快捷键

在终端下执行 vim,即进入官方文档,如下所示。
image.png

键位图:史上最全Vim快捷键键位图(入门到进阶) | 菜鸟教程

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值