这个系列的Linux教程主要参考刘遄老师的
《Linux就该这么学》
。用的系统是RHEL8,如果遇见一些命令出现问题,请首先检查自己的系统是否一致,如果不一致,可网上查一下系统间某些命令之间的差异。
目前设计的这个Linux学习系列的目录如下:(会陆续更新~)
-
Linux 学习系列一:Linux的简单介绍以及命令行的基本操作
-
Linux 学习系列二:Linux中的常用命令
-
Linux 学习系列三:管道符、重定向与环境变量
-
Linux 学习系列四:光速掌握Vim,效率提升神器
-
Linux 学习系列五:Shell命令脚本的基本语法
-
Linux 学习系列六:用户身份与文件权限
- …
\quad
\quad
在正文开始前,建议大家搜索一下Vim的好处,特别是结合一些代码编译器,Vim有多好用!具体的,在这里就不多说了,毕竟既然都点进来了,应该是了解一点Vim的吧?下面开始通关Vim吧!
Vim的基础知识
Vim概述
Vim是从vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
Vim是一个功能强大的多模式编辑器, 是 Linux/UNIX 上最常用的文本编辑器, 它的作用是建立、编辑、显示文本文件。此外,Vim 没有菜单,只有命令。
vim 的官方网站((
http://www.vim.org
)。
Vim的设计理念是命令的组合。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。同时Vim与很多快捷键设置和正则表达式类似,可以辅助记忆。并且Vim针对程序员做了优化。
Vim有许多有用的功能,可以与现代文本编辑器竞争,如Sublime Text,Atom,UltraEdit或jEdit。它们包括支持正则表达式的搜索,轻松重复命令的能力,直接记录和执行宏,自动完成,文件合并,鼠标集成,拼写检查,语法突出显示,分支撤消/重做历史,支持流行网络协议和文件存档格式等。
虽然Vim的功能令人印象深刻,但其真正的优势在于其可扩展性。 Vim有自己的脚本语言,称为Vim脚本(也称为vimscript或VimL),用户可以通过多种方式使用它来增强Vim,例如为其他编程语言启用语法高亮,自动化语法检查或将Vim与其他应用程序和服务。
除了可扩展性之外,Vim还具有高度可配置性,包含Vim核心全局设置(称为vimrc)的文件可以在各个Vim安装之间共享。如果您不想在闲暇时间搞乱设置和编辑配置文件但仍希望充分发挥Vim的优势,可以从互联网上下载许多现成配置文件中的一个,或者使用Vim等工具创建一个配置。
提到Vim,你知道他的学习曲线吗?
快来和我一起通关Vim吧~
划重点:
-
这里先浅浅的推荐一个视频:
指尖飞舞:vscode + vim 高效开发(系列视频)
,可以先去看这个视频,这个视频讲得非常好,强烈推荐! - 学习Vim的时候,建议丢掉鼠标!建议丢掉鼠标!建议丢掉鼠标!重要的事情说三遍!
Vim的四个模式
基本上,Vim有四种模式:
- 普通模式(普通模式)(Normal-mode)
- 插入模式(输入模式)(Insert-mode)
- 命令模式(末行模式)(Command-mode)
- 可视模式 (Visual-mode)
不同的教程,对这几个模式的叫法都不一样,所以我给了英文名字,由于叫习惯了,我就按着我习惯的叫法来写了。
注意:在每次运行Vim编辑器时,默认进入普通模式,此时需要先切换到插入模式后再进行文档编写工作,而每次在编写完文档后需要先返回普通模式,然后再进入命令模式,执行文档的保存或退出操作。需要注意: 在Vim中,无法直接从插入模式切换到命令模式。
任何模式互相切换,都可以先 Esc 切换到命令模式
!
下面开始学习各个模式能干啥,和切换方式。
普通模式(Normal-mode)
普通模式一般用于浏览文件,也包括一些复制、粘贴、删除等操作。这时击键时,一些组合键就是 vim 的功能键,而不会在文本中键入对应的字符。
在这个模式下,可以通过键盘在文本中快速移动光标,光标范围从小到大是字符、单词、行、句子、段落和屏幕。启动 VIM 后默认位于普通模式。不论是什么模式,按一下 键 (有时可能需要按两下,插入模式按一下 Esc ,就会切换到普通模式,命令模式或者可视模式下执行完操作以后,就会自动进入普通模式,如果进入命令模式或者可视模式没有执行任何操作,按两下 Esc 即可 )都会进入普通模式。
下面的大多命令都是在这个模式下使用的!比如光标移动、复制粘贴、删除等等。
插入模式(Insert-mode)
在普通模式中按下个别字母键,会进入插入模式。该模式启动以后,就会进入编辑状态,通过键盘输入内容。其实插入模式就可以理解为txt记事本之类的编辑器,你敲什么字符就出来什么字符。
常用的切换到插入模式的命令如下:
-
i
是在光标所在的字符之前插入需要录入的文本。 -
I
是在光标所在行的行首插入需要录入的文本。 -
a
是在光标所在的字符之后插入需要录入的文本。 -
A
是在光标所在行的行尾插入需要录入的文本。 -
o
是光标所在行的下一行行首插入需要录入的文本。 -
O
是光标所在行的上一行行首插入需要录入的文本。 -
s
删除光标所在处的字符然后插入需要录入的文本。 -
S
删除光标所在行,在当前行的行首开始插入需要录入的文本。
需要注意上面的命令的区别。比如
i
是在光标当前的字符之前的位置插入字符。比如下面的图中,光标的字符是“
f
”,那么按
i
就是在“
h
”和“
f
”之间插入字符,同理,按
a
是“
f
”和“
i
”之间插入字符。
另外,可以把
o
理解成Windows的换行操作,把
O
理解成在当前行的上一行插入新的一行进行插入。
S
是删除当前行,并进入插入模式。这些都可以去实操感受一下各个命令之间的区别,根据需求来使用会加快效率。
命令模式(Command-mode)
在普通模式中,按下
:
(冒号)键或者
/
(斜杠),会进入命令模式。在命令模式中可以执行一些输入并执行一些 VIM 或插件提供的指令,就像在shell里一样。这些指令包括设置环境、文件操作、调用某个功能等等。
举个简单的例子,在Vim里写好一个文档怎么退出?这在网上可以是个很好玩的梗~如果要退出并保存,就需要先进入命令模式,然后输入相关命令就行了,比如输入
:wq
是保存并退出,偶尔会出现权限问题,保存失败,那么可使用
:wq!
强制保存退出。如果不保存直接退出可以使用
:q
。
可视模式(Visual-mode)
在普通模式按下
v
,
V
,
<Ctrl>+v
可以进入可视模式。可视模式中的操作有点像拿鼠标进行操作,选择文本的时候有一种鼠标选择的即视感,有时候会很方便。选中文本之后,可以进行复制、删除之类的操作,这点和Windows中的操作很类似。
各个模式间的切换
四种模式之前的切换,是非常重要的,主要的切换方法,我用一张图表示出来了。
这个图应该是很清晰的,我把常用的切换命令都列出来了。
PS:Vim的这几个模式,是需要好好理解的,并且需要记一下模式的切换方法。值得一提的是,下文大多的命令都是在普通模式下的,而且其他模式一般都是从普通模式切换过去的!所以在命令不起作用的时候,记得首先看一下自己当前是出于哪个模式。
光标移动
接下来学习Vim的光标移动。这可不是你想象的只有一直狂按上下左右来移动,这样极其低效!
上下左右光标移动
首先,Vim里面上下左右分别是
hjkl
,见下图吧,应该很清晰。当然,你按键盘上的上下左右方向键也OK,不过由于方向键在偏右边的地方,其实不是很方便,记一下
hjkl
是可以提高日常使用中的效率的!
给个图,具体怎么记这四个键就看自己了。主要是
j
和
k
容易记混淆。
当然,
hjkl
肯定得是在普通模式下才有效,后文就不再强调这点了。
单词光标移动
除了简单的上下左右移动外,还有一些常用的命令可以做到以单词为单位来移动!首先看下表:
快捷键 | 用途 |
---|---|
|
跳到下一个单词开头 |
|
跳到本单词或上一个单词开头 |
|
跳到本单词或下一个单词结尾 |
|
跳到上一个单词结尾 |
画了个图,下图描述了上面四个命令具体怎么移动的,应该很容易理解吧!
另外,要注意这里的命令,包括下面的命令都是有大小写区分的。关于这里的移动还有一点技巧,这在写程序时是非常实用的:
-
如果你认为单词是由
默认方式
(默认上来说,一个单词由字母,数字和下划线组成),那么就用小写的
e
和
w
。 -
如果你认为单词是由
blank
字符分隔符,那么你需要使用大写的
E
和
W
。
如下图,什么时候用大写的,什么时候用小写的,也是有讲究的!
提到这里,说一下,在Vim里面,一般相同的大小写字母所带来的功能一般是相反的。比如
o
是换行并切换为插入模式,而
O
是换行,跳转到上一行并切换到插入模式。
行间光标移动
下面是常用的行间光标移动的命令,非常实用。
快捷键 | 用途 |
---|---|
|
跳到行首(光标所在行) |
|
跳到从行首开始第一个非空字符 |
|
跳到行尾 |
|
跳到第一行 |
|
跳到最后一行 |
|
跳转到第几行 |
注意自己多去练习哦~我就懒得去一个一个录制gif啦(懒.jpg)
再来两个非常有用的命令:
括号移动
%
: 匹配括号移动,包括
(
,
{
,
[
. (需要把光标先移到括号上)。作为显示,看下图,这个命令会在下图两个箭头来回跳动。
相同单词间移动
*
和
#
: 匹配光标当前所在的单词,(
*
是下一个,
#
是上一个)这个命令会搜索出该文档中当前光标下所有的这个单词,并且可以使光标来回移动。
Vim的进阶操作:动作+操作符
重头戏来啦!这绝对是核心中的核心!多图警告!!!首先来看下两个概念,也就是动作和操作符。
动作
动作主要就是
i
和
a
的区别,见下图。简单来说,
a
包含的内容更多。
动作可以和下面的命令配合使用:
举个例子,
iw
就是选中当前的单词,
ab
就是选中当前光标小括号里的内容(包含小括号)。具体操作还需要结合下面的操作符来使用,不要着急,好用的来了!
操作符
操作符来了,作为一个标致的程序员(啊不是),我决定先把复制粘贴列在这!(少谁这个也不能少啊.jpg)
在Vim里面,
y
表示复制(yank),
p
表示粘贴(paste)。
然后,下面再列三个常用的:
快捷键 | 用途 |
---|---|
d(delete) | 删除 (剪切) |
c(change) | 修改(删除并进入插入模式) |
v(visual) | 选中并进入 VISUAL 模式 |
d
其实可以理解为剪切(
d
把选中的内容删掉之后,把删掉的内容拷贝进了粘贴板,这个时候按
p
即可粘贴)。
c
和
d
的区别是
c
删除后还会进入插入模式,这在有些时候会更方便。
当然,【ctrl+z】肯定不能少是吧?在Vim里面,撤销与恢复撤销代表的符号如下:
快捷键 | 用途 |
---|---|
|
撤销刚才的操作 |
|
撤销光标所在行的修改 |
|
恢复撤销操作 |
下面给出重要指令的英文,用以大家辅助记忆:
动作+操作符❤❤❤
下面开始重头戏啦!上面讲了动作和操作符,实际操作中这两者往往是结合着来用的。为了较好的展现Vim的优势,下面开始疯狂举例子:
动作+操作符示例:
-
yiw
->
p
:复制一个单词
-
daw
->
p
:剪切一个单词(包括单词前后的空格)
看清楚
a
和
i
的区别了吗?
a
会同时处理前后的空格、空号之类的字符,而
i
不会。
-
di(
:删除括号里的所有内容
-
dab
:删除括号内的所有内容(包括括号本身)
-
ci"
:剪切双引号包括的内容,并且切换到插入模式,这时可以正常写入字符。
- `ya“:复制反引号(“`)包含的内容,包括反引号本身。
复制相关(为了配合复制演示,下面对应的粘贴复制的内容,也就是指令
p
)
指令例子 | 功能 |
---|---|
|
复制一个
移动经过的所有字符,还有
是复制
个
|
|
复制光标到下一个
的字符处,
同理 |
|
复制一行,
同理 |
|
复制光标到本号的结尾 |
|
复制屏幕显示的第一行文本到光标所在的行 |
|
复制光标所在行到文本的结束 |
下面一一展示这些指令:
-
yw
:回顾一下上面
单词光标移动
的
w
指令,这里的
yw
也就是从当前光标复制一个
w
移动经过的所有字符。
-
y2w
:同理,复制两个
w
的内容
-
yft
:复制光标到下一个
t
的字符处
-
yy
:复制一行
-
y$
:复制光标到本号的结尾
-
yH
:复制屏幕显示的第一行文本到光标所在的行
-
yG
:复制光标所在行到文本的结束
与删除(剪切)相关的指令:
指令例子 | 功能 |
---|---|
|
删除一个
移动经过的所有字符,还有
是删除
个
|
|
删除光标处到下一个
的字符处(
定位光标到
处 ) |
|
删除一整行 |
|
删除光标到本行的结尾 |
|
删除屏幕显示的第一行文本到光标所在的行 |
|
删除光标所在行到文本的结束 |
这里删除的用法和上面复制
y
的用法一模一样,就不再录制gif了。
删除字符操作和替换
指令例子 | 功能 |
---|---|
|
删除光标当前所在的字符 |
|
替换掉光标当前所在的字符 |
|
替换掉从光标开始以后的所有字符,除非 退出。 |
-
x
:删除光标当前所在的字符
-
r
:替换掉光标当前所在的字符
-
R
:替换掉从光标开始以后的所有字符,除非 退出。
翻页操作:
指令例子 | 功能 |
---|---|
|
查看下一页内容 |
|
查看上一页内容 |
提升技巧
重复
-
.
:(小数点) 可以重复上一次的命令,这里的命令包括查找、删除、替换之类的命令。比如:
-
N<command>
:重复某个命令N次,这个很简单,比如说
10dd
就是删除下面10行内容,
5jj
就是向下移动5行。 -
10idesu [ESC]
:快速打出
n
个一样的单词
组合命令
-
0y$
:拷贝当前行所有内容(等同于
yy
)-
0
→ 先到行头 -
y
→ 从这里开始拷贝 -
$
→ 拷贝到本行最后一个字符
-
-
ye
:从当前位置拷贝到本单词的最后一个字符。
-
y2/foo
:拷贝当前字符到第2个 “
foo
” 之间的字符串。
大小写转换
快捷键 | 用途 |
---|---|
|
将光标下的字母改变大小写 |
|
将光标位置开始的3个字母改变其大小写 |
|
改变当前行字母的大小写 |
|
将当前行的字母改成大写 |
|
将当前行的字母改成小写 |
(
) |
将光标下的单词改成大写 |
(
) |
将光标下的单词改成小写 |
-
~
:将光标下的字母改变大小写
-
g~~
:改变当前行字母的大小写
-
gUU
和
guu
:将当前行的字母改成大写(小写)
命令模式中常用的命令
命令 | 作用 |
---|---|
|
保存 |
|
退出 |
|
强制退出(放弃对文档的修改内容) |
|
强制保存退出 |
|
显示行号 |
|
不显示行号 |
|
执行该命令 |
|
跳转到该行 |
|
将当前光标所在行的第一个one替换成two |
|
将当前光标所在行的所有one替换成two |
|
将全文中的所有one替换成two |
|
在文本中从下至上搜索该字符串 |
|
在文本中从上至下搜索该字符串 |
%s
代表整个全文,
g
代表不询问,也可以用
c
代表询问。
:set nu
/
:set nonu
:显示行号与否
其余命令就不过多展示了,关于查找和替换的命令下面开始详细说。
查找/搜索/替换
单行查找操作
快捷键 | 用途 |
---|---|
f{char} | 光标跳到下个{char}所在位置 |
F{char} | 反向移动到上一个{char}所在位置 |
t{char} | 光标跳到下个{char}的前一个字符的位置 |
T{char} | 光标反向移动到上个{char}的后一个字符的位置 |
; | 重复上次的字符查找操作 |
, | 反向查找上次的查找命令 |
重点记住
f
和
F
即可。
全文查找操作
查找方式输入斜杠
/
(也是进入末行模式的方式之一)切换到命令模式,再输入要查找或搜索的关键词,然后回车。如果在一个文件中,存在多个满足条件的结果。在搜索结果中切换上/下一个结果:
-
N
:大写
N
代表上一个结果 -
n
:小写
n
代表下一个结果(next)
如果需要取消高亮,则需要在末行模式中输入
:noh
(no highlight)
文件内容的替换
操作方法:
-
第一步:首先要进入末行模式(在命令模式下输入冒号
:
) - 第二步:根据需求替换内容
下面举一些例子:
-
只替换光标所在这一行的第一个满足条件的结果(
只能替换1次
)
:s/要替换的关键词/替换后的关键词 + 回车
案例:把
hello rhel
中的
rhel
替换为
rhel8
。
首先切换光标到
hello rhel
这一行,然后输入如下指令:
:s/rhel/rhel8
-
替换光标所在这一行中的所有满足条件的结果(
替换多次,只能替换一行
)
:s/要替换的关键词/替换后的关键词/g g=global全局替换
案例:把
hello rhel
中的所有
rhel
都替换为
rhel8
。
首先切换光标到
hello rhel
这一行,然后输入如下指令:
:s/rhel/rhel8/g
-
针对整个文档中的所有行进行替换,
只替换每一行中满足条件的第一个结果
:%s/要替换的关键词/替换后的关键词
案例:把每一行中的第一个
hello
关键词都替换为
hi
:%s/hello/hi
-
针对整个文档中的所有关键词进行替换(
只要满足条件就进行替换操作
)
:%s/要替换的关键词/替换后的关键词/g
案例:替换整个文档中的
hello
关键词为
hi
:%s/hello/hi/g
总结
以上就是Vim的基础用法了,有一些内容我略过了,大家感兴趣的自行去学习,这些内容重点都在于熟练。没啥好说的,只有多练,熟能生巧对吧~
然后,Vim可以和代码编译器结合使用,比如想VS、VSCode、Pycharm等等编译器都是支持Vim的,只需对应的安装一个Vim插件就行了,如果有小伙伴看完了这篇文章,可以试试在代码编译器中使用Vim在码代码,或许你大概率会爱上他!(前提是耐得住一开始的各种不习惯!)
更多的Vim的高阶技巧,后续空了我再整理吧~
感谢观看…图有点多,难免出现错误,如有错误敬请指出,第一时间修改!
END