Featured image of post 通过游戏和《vim实用技巧》学习vim编辑器

通过游戏和《vim实用技巧》学习vim编辑器

vim,深藏不露的老一辈艺术家

前言

VIM Adventures(又称VIM大冒险)是一款用于学习VIM编辑器使用的在线网页端小游戏,通过这个游戏,我们能够快速掌握VIM的一些常用的基本命令,学vim可以说这个游戏是必备的 《vim》实用技巧则是一本很经典的vim学习用教材,因此

部署

由于官网 的版本只有前三关免费,之后的关卡需要25美元还只有六个月使用期限,对于学生党来说简直就是灾难,所以一开始我在这里 找到了可以游玩的托管项目——但是太慢了,所以我准备部署在本地

源码构建部署

  1. 安装nodejs,具体的网上教程很多
  2. 下载项目源代码,github上因为维权大多没有了,所以我提供一个链接 提取码: LAIN
  3. 进入工作目录,解压1.1.0那个版本并进入,打开CMD执行npm install
  4. 设置环境变量,在前一个目录(有.exe文件)下创建.env文件,并输入
1
2
APP_DIR=D:\vim\vim-adventures-1.1.0
PORT=80 #自己根据情况控制

5.运行.exe并打开127.0.0.1:80就可以本地运行了,存档的话要记得创建一个saved文件夹先才可以存档

VIM使用技巧

基本实用技巧

基础的宏指令

  1. .会执行我们上一次的 修改 命令,因此也可以将其看作我们最初的一个宏,在此可以实现非常多的功能

  2. 拒绝自我重复 例如写c语言时我们常要在末尾添加;,但是我们不想每一行都通过j$.,这太麻烦了,那么我们可以使用A指令,它允许我们实现$a的功能,移动到一行末尾并进入插入模式,那么我们通过’A; j.‘就可以实现每行末尾快速添加 ,同样的,vim中有相当多的这样将多个指令合并成一个指令的一箭双雕指令,C S s o O等,并进入插入模式,这可以实现什么呢?

  3. 以进废退
    var foo = "method("+argument1+","+argument2+")";这样一句语句在JS中并不美观,如果我们想要实现将+号变成前后有空格的样式,可以如下操作

1
2
3
4
5
f+ #f{char}会搜索并找到下一处指定字符出现的位置
s 空格 + 空格 #s删除了x我们再通过后面的方法实现了以进废进,之所以这么做是为了之后调用宏考虑
;. #;命令将会带我们来到下一个指定字符上,这样的话我们就可以轻松实现之前的操作
;.
;.
  1. 手动修改
    例如一段文字中出现了多次一个单词,我们想要修改可以
1
2
3
4
* #找到单词位置
cw{word}ESC #删除单词字符并替换
n #找到下一处单词
. #重复即可

总结

我们发现在以上多个修改中,我们都通过.来实现替换或添加字符到我们想要的位置,我们将其总结为
一键移动,一键执行,这就是我们想要的.范式

普通模式

Just like a painter won’t pause with his brush on the page when he is rest,we truly need to rest 普通模式命令的强大往往来自于它可以把操作符和动作命令结合在一起。

程序员就像画家,思考、阅读、穿梭于代码之间浏览后,我们并非需要插入模式来书写一切,我们只需some gadgets,复制移动删除(并非ctrlcctrlv)就可以完成我们的作品

撤销单元切块

u会触发撤销最新一次的修改,可以是改变文档的操作,也可以是其他模式中的操作,因此我们可以控制撤销命令的 粒子度
那么多久应该修改一次插入模式呢,每一个撤销块对应一次思考过程或许是可以的,当然你也可以按照个人习惯来,但是一般来讲,如果停顿的时间长到足以质疑”我应该退出吗“,那就退出吧

构造可重复的修改

正如前一章中一样,我们想高效完成一件事情,最需要的就是效率
我们已一句The end is nigh举例,将光标放到末尾

  1. 反向删除
1
2
db #先删除从末尾光标处到本单词头部的字符
x #因为还会存在一个字符,用x删除
  1. 正向删除
1
2
b #移到单词头部
dw #dw删除整个单词
  1. 删除整个单词 daw即可——delete a word

这样看下来,虽然都是三个字符,但想必你知道如何区分最棒的语句吧,daw的话我们可以直接通过.进行多次操作,岂不美哉

何时重复,何时快速

Delete more than one word,如果我们想要删除more than两个单词,有多种方式,d2w2dw以及dw.都可以,而如果我们想要删除更多单词的时候,应该如何抉择? 如果我们dw加7个.,想要撤销不小心造成的错误时可以精确操作,而一次性删除的话就无法实现。 ——只在必要的时候使用次数

双剑合璧,天下无敌

操作符 + 动作命令 = 操作

命令 用途
c 修改
d 删除
y 复制到寄存器
g- 反转大小写
gu 转化为小写
gU 转化为大写
> 增加缩进
< 减小缩进
= 自动缩进
一条额外规则,重复指令会作用在当前行上

完美而方便的缩进规则 如果安装了textobj-entire插件,简单地执行=ae 就可以作用在整个文件上,Kana Natsuno插件则是使用=ie 当然,如果想用= 命令来执行也是可以的,执行gg=G就可以了

插入模式

  • 即时更改错误,在插入模式下,退格键可以删除光标前的字符,我们还可以使用组合键
按键操作 用途
ctrl+w 删除前一个单词
ctrl+u 删除至行首
ctrl+h 删除前一个字符

当然,这些操作命令并不是插入模式独有的,命令行以及在bash中都可以使用它们

  • 返回普通模式 最经典的便是ESC进行退出,当然也可以用ctrl+o,这允许我们切换到插入-普通模式
    • 插入-普通模式:这允许我们执行一次普通模式命令后马上返回到插入模式
    • 当前行位于窗口顶部或底部时,我们可以用zz命令重绘制屏幕,便于查看内容
  • 在不离开插入模式的情况下,粘贴寄存器中的文本
1
2
practical Vim, by Drew Neil
Read Drew Neil's 

我想将开头的Practical Vim放到文件末尾, 可以按以下步骤操作

1
2
3
4
yt, #把开头复制到专用寄存器中
jA空格 #下一行到末尾,并添加空格
ctrl+r 0 # 将寄存器中文本粘贴到光标处
. ESC
  • 随时随地做运算 例如我们需要计算六把椅子的总价,每把35元, 只需将光标移动到需要位置,然后执行
1
2
3
ctrl+r
=
35*6

当然这只是最简单的计算之后的

本博客已稳定运行
发表了30篇文章 · 总计6万7千字

浙ICP备2024137952号 『网站统计』

𝓌𝒶𝒾𝓉 𝒻ℴ𝓇 𝒶 𝒹ℯ𝓁𝒾𝓋ℯ𝓇𝒶𝓃𝒸ℯ
使用 Hugo 构建
主题 StackJimmy 设计
⬆️该页面访问量Loading...