Vim (vi) 编辑器快捷键大全【图解】,各种操作,指令大全 | 从无到有 | linux | mac | terminal

极客探秘
• 阅读 26634
1-7 基础版图片可以从这里下载到,还有 svg 矢量版
http://www.viemu.com/a_vi_vim...

前言:

最近发现 vim 是个好强大的文本编辑工具,有多强大,看下面就知道。几乎涵盖了所有可能的操作。
我会在前面七张图片下面摘写一些有用常用的指令

举个例子证明它的强大

Vim (vi) 编辑器快捷键大全【图解】,各种操作,指令大全 | 从无到有 | linux | mac | terminal

这上图中,我需要删除文件里的 ( svg | png ) 这一段文字。
只需要下面几个操作就好了,以下是步骤,和步骤解释:

步骤 指令 解释
1 /type( / 搜索该字段前面的 type( 将光标定位到此
2 f( 将光标移动到 (
3 df) d 删除指令,删除当前位置到下一个 ) 的字符
4 :wq 保存并退出

0 基础开始

vi (vim) 是 linux 系统下一个命令行文本编辑器,使用的时候直接 vi 后接文件名

vi test.txt
## 编辑 test.txt 文件,文件存在就编辑它,不存在就新建一个文件并编辑

vi 的最常用的两种模式: 普通模式 | 输入模式


普通模式

是你打开文件时的样子

Vim (vi) 编辑器快捷键大全【图解】,各种操作,指令大全 | 从无到有 | linux | mac | terminal

这个时候你可以直接使用本文章中提到的指令操作文本,此时你按键盘上的键会被编辑器接收,作为指令来执行,而不是输入到文本中。
如直接输入 :wq 来保存并退出文件。
:w 存储文本
:q 退出文本,如果你对文本做了改动,这个是退不出去的。需要下面:
:q! 退出不保存文本
:wq 保存并退出文本

:set nu 显示行号
:set nonu 不显示行号

:syntax enable 语法高亮 (如果支持的话)
:set filetype=html 文档格式,配合上面语句


输入模式

Vim (vi) 编辑器快捷键大全【图解】,各种操作,指令大全 | 从无到有 | linux | mac | terminal

按 指令 i 后会在光标位置开始输入,这时候左下角会有 --- INSERT --- 提示,表示当前正在输入模式。
此时你键盘的所有按键操作都会写入到文本中。
要切换到 普通模式 只需要按一下键盘的最左上角 esc 键即可。


Vim (vi) 编辑器快捷键大全【图解】,各种操作,指令大全 | 从无到有 | linux | mac | terminal

基础编辑,移动光标

指令 解释
$ 行尾
^ 行首
w 下一个单词 (词首)
e 下一个单词(词尾)
b 前一个单词
x del 删除后一个字符
X backspace 删除前一个字符
u 撤销
ctrl + r 重做
k
h
g
l
i 插入,开始写东西
s 覆盖
esc 退出输入模式,进入普通模式,可执行各种命令

Vim (vi) 编辑器快捷键大全【图解】,各种操作,指令大全 | 从无到有 | linux | mac | terminal

操作和重复操作

指令 解释
f 查找字符,按f后再按需要移动到的字符,光标就会移动到那
f; 就会移动到下一个 ;的位置
F 反向查找字符
. 重复上一个操作
v 选择模式,用上下左右选择文本,按相应的指令直接执行,:选中后执行 d 就直接删除选中的文本
ctrl + v 块状选择模式,可以纵向选择文本块,而非以行的形式
d 高级删除指令:
dw 删除一个单词
df( 配合 f ,删除从光标处到 ( 的字符,单行操作
dd 删除当前行
d2w 删除两个单词
d2t, 删除当前位置到后面第二个 , 之间的内容,不包含 , (t = to

Vim (vi) 编辑器快捷键大全【图解】,各种操作,指令大全 | 从无到有 | linux | mac | terminal

复制 和 粘贴

指令 解释
y 复制
yy 复制当前行
p 粘贴到后面
P 粘贴到前面
o 在当前行的下一行添加空行并开始输入
O 在当前行的上一行添加空行并开始输入

所有经过 d x e 处理的字符串都已经复制到了粘贴板上。


Vim (vi) 编辑器快捷键大全【图解】,各种操作,指令大全 | 从无到有 | linux | mac | terminal

搜索

指令 解释
/ 从当前位置向后搜索
从当前位置后前搜索
n 搜索完之后,如果有多个结果,跳到 下一个匹 配项
N 跳到 上一个 匹配项
* 直接匹配当前光标下面的字符串,移到下一个匹配项,跟/ ? 没有关系
# 上一个匹配项

Vim (vi) 编辑器快捷键大全【图解】,各种操作,指令大全 | 从无到有 | linux | mac | terminal

标记 和 宏

标记

m 后跟 a - z 任意字符来设置一个标记
` 后跟 字符来跳到这个标记点
大写 A - Z 是全局的,小写 a - z
'. 代表最后编辑位置

q 后接 a - z 开始录制宏
q 结束宏的录制
@ 后接 a - z 读取宏
@@ 代表最后一个宏

Vim (vi) 编辑器快捷键大全【图解】,各种操作,指令大全 | 从无到有 | linux | mac | terminal


高级移动

% 在配对的 () [] 之间移动
H M L 移动到编辑器可视范围的头部,中间,尾部
G 到文件的尾部,前面添加数字再按 G 跳到输入的行,写行号的时候是看不见的
- + 跳到上一行,下一行
( ) 跳到当前句子的 首 / 尾
{ } 跳到 前一个 / 后一个 空行
[[ jumps to the previous { in column 0
]] jumps to the next } column 0


Vim (vi) 编辑器快捷键大全【图解】,各种操作,指令大全 | 从无到有 | linux | mac | terminal

高级指令

J 合并当前行与下一行。合并已选中的所有行。
r 替换当前字符到下一个输入的字符。如: r 后接 4 会把当前字符替换成 4
Cc$ 的缩写:修改从光标到结尾
Dd$ 的缩写:删除从光标到结尾
Yyy 的缩写:复制当前行
s 删除光标下字符,并开始编辑
S 删除当前行,并开始编辑

< 向前缩进,一行,或多行,范围设置在前面提到了,t等等
> 向后缩进,一行,或多行
= 格式化,一行,或多行

~ 切换光标下的字符大小写

规则

上面 7 张合起来就是这样的

Vim (vi) 编辑器快捷键大全【图解】,各种操作,指令大全 | 从无到有 | linux | mac | terminal

任何指令前输入的数字,都会作为指令的重复值:5d, 2u, d2w
重复指令会在当前行执行: dd 删除当前行,yy 复制当前行
ZZ 保存并退出
ZQ 退出不保存

zt 滚动光标到顶部,光标在文件中的位置不变,只是改变光标在屏幕上的位置
zb 光标滚动到底部

ctrl + F/B PageUp / PageDown




高级

Vim (vi) 编辑器快捷键大全【图解】,各种操作,指令大全 | 从无到有 | linux | mac | terminal

入门

Vim (vi) 编辑器快捷键大全【图解】,各种操作,指令大全 | 从无到有 | linux | mac | terminal

现代

Vim (vi) 编辑器快捷键大全【图解】,各种操作,指令大全 | 从无到有 | linux | mac | terminal

文字

Vim (vi) 编辑器快捷键大全【图解】,各种操作,指令大全 | 从无到有 | linux | mac | terminal

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(