计算机教育中缺失的一课——Vim
本文最后更新于:2023年9月6日 上午
Vim简介——编辑器之神
Vim是一个文本编辑器,被称为编辑器之神,但与之强大功能所对应的,是陡峭的学习曲线
很多人学习Vim都是从入门到放弃,之后便将其束之高阁。但是掌握之后,你将感受到Vim哲学与效率的巨大提升
在学习之前需要明确的几点:
学习Vim在开始是痛苦的
只有多用才会熟练
克服的一切困难都是值得的
下面是Vim的一个快速使用示范:
在命令行中键入
Vim 1.cpp
,会直接进入Vim的普通模式(Normal Pattern),此时是无法输入文字的按下
i
,便进入了编辑模式(Insert Pattern),在编辑模式下,方可键入文字输入文字
按下
ESC
,输入:wq
,我们便回到了命令行,并且成功完成了文件的编辑
Vim模式
在上面我们可以发现,Vim具有普通模式和编辑模式(这是最常用的模式),不同的模式具有不同的特点,这是Vim的特性,也是我们初学会感受到别扭的地方
在普通模式下不可以插入文字,只能输入命令。要想进行编辑,需要切换到插入模式
Vim打开之后即进入普通模式,在Vim的普通模式下,所有的键都是功能键。对于以下不同情景的目的,有不同的按键帮助我们提升效率
对于以下特殊情景,不同的快捷键可以快速移动光标。比如输入2 G,即可移动到第二行
常用命令
移动到特定位置:
按键 | 功能 |
---|---|
0 | 光标移动到行首 |
$ | 光标移动到行尾部 |
gg | 光标移动到文件的第一个字符 |
G | 光标移动到文件的最后一个字符 |
n G | 光标移动到第n行 |
w | 光标移动到下个单词的开始 |
e | 光标移动到本单词最后一个字母 |
b | 光标移动到本单词的第一个字母 |
上下左右:
除了上下左右箭头可以移动之外,Vim支持使用hjkl
进行光标的移动,分别对应
按键 | 功能 |
---|---|
h 或 左箭头键 | 光标向左移动一个字符 |
j 或 向下箭头 | 光标向下移动一个字符 |
k 或 向上箭头 | 光标向上移动一个字符 |
l 或 向右箭头 | 光标向右移动一个字符 |
字符串匹配
输入/
之后,可以输入text
,之后光标会移动到text首次出现的地方,在这之后:
按键 | 功能 |
---|---|
n | 光标移动到下一个text出现的地方 |
N | 光标移动到前一个text出现的地方 |
替换
普通模式,可以替换单个字母,方式很简单,先按下r,然后输入要替换的字母即可
删除
按键 | 功能 |
---|---|
dw | 删除光标到下个单词的开始处所有文本 |
de | 删除光标到本单词的结束处所有文本 |
d2w | 删除光标到后面第二个单词的开始处所有文本 |
撤销
按键 | 功能 |
---|---|
u | 撤销 |
ctrl+r | 撤销你的撤销 |
拷贝/粘贴
按键 | 功能 |
---|---|
yy | 拷贝当前行 |
p | 在当前位置后面粘贴 |
P | 在当前位置的下一行粘贴 |
普通模式切换到插入模式
按键 | 功能 |
---|---|
a | 在光标后插入 |
o | 在当前行后面插入一个新行 |
O | 在当前行前面插入一个新行 |
保存/退出
保存/退出都要在命令模式下完成
按键 | 功能 |
---|---|
:w | 仅保存 |
:q | 退出 |
:wq | 保存且退出 |
快速入门
vimtutor命令打开官方教程,并建立一份教程文件的拷贝,该教程有各种语言的版本,如果想要打开中文版本,输入
vimtutor zh
即可按 CTRL-O 回跳,C-I后跳
ZZ保存并退出
“J” 命令删除两行间的换行符
x删除单个字符
dd删除整行
u撤销
U撤销整行所有修改
C-R撤销你的撤销
9k向上移动 9 行
w向后移动一个单词
b向前移动一个单词
f向右移动到一个指定的字符,fy向右移动到第一个y出现的位置
F向左移动到一个指定的字符
%进行括号匹配
“H” 表示 “Home” (头),”M” 表示 “Middle” (中) 而 “L” 表示 “Last” (尾)
C-G输出你现在在的位置
C-D向下滚屏
C-U向上
zz让光标保持在屏幕中间
/pattern进行字符串匹配,n向后查找,N向前查找
^匹配行首,$匹配行尾,d$删除光标到尾端所有的文本
cw修改一个词,c2w修改两个词,c$修改到行尾,cc修改一整行。确切地说,它删除一个词,并切换到插入模式
灵活的组合上面命令,/pattern查找字符串,cw修改单词,n找到下一个单词,
.
重复修改操作,n继续下一个单词dd+p可以用来移动文本
p接受计数前缀,比如3p就是插入相同的文本三次
xp可以交换两个字符,比如你把the打成了teh,那么把光标放到e下面,按下xp即可
y是yank(抽出)的意思,可以将文本拷贝到寄存器中,然后使用p粘贴到别的地方。yw就是拷贝一个单词的意思。yy拷贝一整行
yaw表示yank a word,可以在一个单词的任意位置复制该单词
一些经常用到的文本删除:
1 |
|
~ 将字符的大小写转换
I移动到当前行第一个非空字符处并切换到插入模式
A移动到行尾并切换到插入模式
vimtutor
lunavim
首先要安装最新版neovim,如果是Ubuntu直接apt install可能会安装较低版本的nvim,不符合lunavim的版本要求,可以参考https://github.com/neovim/neovim/releases/tag/stable进行安装
1 |
|
如果版本过低需要先卸载neovim再重新安装
1 |
|
安装lunavim
1 |
|
[ERROR]: Unable to verify plugins, make sure to manually run ‘:PackerSync’ when starting lvim for the first time.
添加环境变量即可:
export PATH="$PATH:/home/$USER/.local/bin"
source ~/.bashrc
还遇到了一些由于网络因素被墙无法访问外网下载插件的问题,给服务器挂代理即可解决。由于Linux挂代理比较麻烦,因此建议直接走主机代理
一些好用的vim资源
- https://www.openvim.com/
- Vim Cheat Sheet
- vim中文文档计划
- vim的官方教程(在命令行中输入vimtutor)
- vim中文文档
Vim插件
在其他软件上使用vim
- jetbrain系软件的Vim插件
- Chrome浏览器的Surfingkeys插件
- Vscode的Vim插件
推荐阅读
如何使用原生 vim 覆盖90%的插件功能 - 知乎
vi - What is your most productive shortcut with Vim? - Stack Overflow