Vim学习笔记01~04

第01章: 遁入空门,模式当道

1.什么是vim

Vim是一个高效的文本编辑工具,并且可以在编程开发过程中发挥越来越重要的作用。

事实上,有不少编程高手使用他们来进行代码的开发,并且对此赞不绝口。

2.本系列目的

但是让人遗憾的是,在更多的人印象里:

所谓vim只不过是在终端上使用命令行修改文本文件时 不得不用 的一个极其不好用的工具。

他们中的有些人对vim中的命令知之甚少。:wq 还有 esc 还有 i 还有上下左右移动,是他们能够知道的全部了。

他们对vim深恶痛绝,这实在令人惋惜。

另外一些人,对vim的大名是早有耳闻,但是却被Vim复杂而又庞大的体系吓退了。这又太令人懊恼了。

事实上,Vim既不是一个难用的工具,又不是一个难学的工具。所以接下来几篇博客,我真切的希望能够以最通俗的语言讲解Vim可以在编程开发中带来的巨大效率。如果你能从中有所收获,那么我会非常高兴的!

3.Vim的神奇

是的,你没有听错。vim不单单可以在终端中修改配置文件。

它还可以被拿过来进行代码开发。在非常多的时候,vim编程比传统编程可以有相当大的便利。

但是一般情况下,只使用vim还是过于麻烦。但让人非常高兴的是,世面上绝大多数以上的的IDE对Vim提供了插件支持。我们可以在享受智能IDE便利快捷键的同时,又可以享受到Vim的便捷(至于有多便捷以后的博客里我会娓娓道来)

我本人是做java开发的,最常使用的是IntelliJ IDEA软件。而IntelliJ IDEA就有vim的支持插件,名字叫IdeaVim。可以让我们在做java开发过程中就可以享受到vim的便利。事实上不止这个软件,包括:

  • VsCode
  • eclipse
  • sublime
  • webstorm
  • CodeBlocks

甚至于notepad++,都可以下载vim的插件。

模式概念

Vim到底是有何种魅力,让几乎所有的编辑器都争先恐后的对它提供插件支持呢。从我个人的观点来看,vim早就不单单只是一款编辑器那么简单了,它提供一种全新的编辑方式,让人大开眼界。而支持它新的编辑器方式的,就是其中的模式(Mode)的概念。

传统插入模式

如果说传统IDE有模式概念的话,那么就只有插入模式这一种。

键盘所输入的,就是编辑器上所看到的,非常合理。

正常模式

但是Vim在插入模式的基础上,提供了一种新的模式,Normal mode,也就是正常模式。

这就是Vim的灵魂。在正常模式下,键盘随便输入什么字母,与你看到的实际会大相径庭,因为正常模式下的每个键被赋予了新的含义。

比如字母i,是insert(插入)这个英语单词的的首字母,在正常模式下,它的意思是从正常模式进入插入模式。

而键盘左上角的esc这个键,是表示从插入模式回到正常模式。

而这,为沉浸式编程带来了可能。在开发过程中,你可以大幅度减少鼠标的使用,只通过键盘就可以完成鼠标的绝大部分工作,并且更加优雅,也更加高效。另外,由于绝大部分是键盘操作,vim甚至可以记录下你的动作,使得宏的录制成为可能,重复的工作会使得面向宏的编程可以大放异彩。这在以后我会慢慢讲到。

那么,如果你对Vim感兴趣的话,就开始一场的新的旅程吧。

附加章:IntelliJ IDEA中下载IdeaVim

如果是mac电脑

因为我已经下载过了,所以我这边显示的按钮是更新

第02章: 字母间移动,与鼠标的暂时分手(hjkl)

模式带来的影响

之前我们谈到,当我们使用vim进行文本编辑的时候,我们需要考虑到Mode,也就是模式对我们的影响。

我们不能再随心所欲的输入即所得。因为在最初的时候,我们处于Normal Mode(正常模式)的影响下。

如果我们想要进行编辑,需要通过一些手段进入插入模式(比如按下字母i,或者其他键,这个以后再谈。)

但是,如果我们在键盘中不小心按下了某个键,而进入了其他的模式,想用回到正常模式呢?

只需要按键盘左上角的一个键,也就是 esc

之前我们谈到这个键,它可以让我们从 插入模式 回到 正常模式 ,但是事实上,它可以让我们从 任何其他模式 ,回到 正常模式

所以,当我不知道自己处于什么模式的时候,就多按几下esc键,这肯定会让我们因此感到心安。

用键盘的移动取代鼠标

为什么我们要如此急迫并 想方设法 的回到正常模式呢?

这有相当多的原因。有个vim大师打过这样一个有趣的比喻。

如果说把用vim编辑程序比作画画。

那么插入模式则像是在画布的空白处涂色。

而正常模式则是在研究主题,调整光线,混合色彩,或者使用刻刀实现不同质地,或者使用棉签润色。

事实上,画家只花很少一部分时间涂色,就像程序员也只花一小部分时间编写代码一样。他们更多的时间用来思考,阅读,以及在代码中穿梭浏览。 而且,当确实需要做修改时,也不需要进入插入模式,比如调整格式,复制它们,移动位置,或者删掉它们,在正常模式下,我们有相当多的工具可以使用。(这在之后我会慢慢讲解。)

移动的基础

作为这一切的基础,本章所讲的内容就是如何在正常模式下进行浏览。

在正常模式下,有4个键可以进行进行基础移动,参考如下表格:

正常模式下按键 该按键产生的效果
h 向左移动一个字符
j 进入到下一行
k 回到上一行
l 右右移动一个字符

这4个键是移动的最小单位。

可能有人会有诸多质疑?我常常听到的两个质疑如下:

  • 为什么不使用上下左右箭头呢

  • 为什么不用鼠标而一定要使用这些字母呢

为什么不使用上下左右箭头

对于第一个问题,其实vim也可以支持【上下左右箭头】的使用,但是并不推荐。因为如果你仔细观察键盘就会发现两点。

  • hjkl,这4个键在键盘中呈一字排开,就位于鼠标的主要区域的右边区域。

如果我们了解过一点盲打基础,我们都知道,大多数键盘的 f键j键 相比其他键,会有一个凸起,这方便我们在不看键盘(盲打)的情况下进行定位。我们一般在编程过程中,双手更多的时候应该位于这两个地方,而hjkl这4个键就在 j键 附近。比上下左右箭头的位置。可以减少你右手在主键盘区和上下左右区的摆动。

为什么不用鼠标而一定要使用这些字母

鼠标有些时候确实方便定位。甚至有些时候,使用鼠标比vim要方便。没必要拘泥于此。

但有些时候,键盘的键却可以被vim的宏操作放大,而大放异彩。之后讲到的宏操作一定会让你瞠目结舌,而鼠标是不支持宏操作的。(至于宏以后会提到)

而且如果过于依赖鼠标,可能会形成思维定势,就没办法很好发挥vim正常模式的键的效用。(事实上更多的时候的定位其实是没必要使用鼠标)甚至只要随便一两个vim的键,在极大段甚至上百行的代码中以极快的速度回到你想要去的位置。(在之后讲vim的8种高级移动时会提到)这可是使用鼠标时做不到的。

本章小节

本章简单介绍了vim的基础移动方式,在正常模式下通过hjkl可以完成方便的进行字母间移动。

实际上,hjkl只是字符间移动,解决的是最后一公里的问题,而在vim中有更加丰富的移动方式,

它们可以让我们在按下几个键之后,在代码间快速穿梭,非常优雅。那么就留到以后介绍吧。

第03章: 词间移动,指尖跳动与闪现 (web)

如果把使用vim编程比作打moba类游戏。

那么vim控制的光标就是你的英雄。

字符间移动(hjkl)就像是英雄没买鞋子在走路。

这实在不得劲,因为太慢了。

而vim中提供一种类似闪现 的移动方式,也就是以单词为单位进行移动。

而更酷的是,闪现没有cd,可以无限闪现。

正常模式下按键 该按键产生的效果
w 跳到下一个单词的词头
e 跳到当前单词的词尾,若已经在词尾则跳到下一个词尾
b 回到当前的词头,若已经在词头则跳到上一个单词的词尾

这3个键可以允许我们以单词为单位,让光标进行快速移动,在有些场景真的非常舒服。另外在宏操作时,web是非常好用的定位键。这在以后大展图时,我会讲到。

助记符

但是这3个键不像是hjkl依次排开,不太好记。那么该如何快速记忆呢。

其实vim还有一个特点,就是见名知意,这可以极大的简化我们记忆的成本。

举个例子:

  • w是【跳到下一个单词 的词头】。那单词 的英语单词是什么,就是word,word的首字母就是w。所以当你想到要跳到下一个单词的时候,你会想到单词的英语单词,然后想到word,再想到w。

同理则可以列出这张表

正常模式下按键 该按键产生的效果 中文关联 英文关联
w 跳到下一个单词的词头 单词 word
e 跳到当前单词的词尾,若已经在词尾则跳到下一个词尾 词尾 end
b 回到当前的词头,若已经在词头则跳到上一个单词的词尾 回到 back

本章小节

本章简单介绍了vim闪现的移动方式,也就是词间移动,可以让我们在单词间自由穿梭。

另外,这也第一次产生了语义的概念。之后这些web或者hjkl可以以方位名词作为宾语,与动词搭配,形成动宾短语,可以进行微操控制,精确而优雅。

之后我们会详细讲到这些内容。

第04章: 行间移动,精确打击,鲁班的Q(ft)

如果把vim里的字母间移动 比作走路,词间移动比作闪现。

那本章讲的行间移动,那可真是更上一层楼。(之后vim的移动一种比一种逆天,还请期待)

如果要打一个不形象的比喻。那就是鲁班的Q技能。

使用接下来介绍的技能,就好像鲁班的Q技能的火箭,指哪里飞到哪里,迅速且非常精确。

正常模式下按键 该按键产生的效果
f 光标飞到你所在当前行的下一个你选的字符
t 光标飞到你所在当前行的下一个你选的字符之前一个字符

可能有点抽象,为啥有点抽象呢,主要f这个键不单独发挥作用,它要配合你按的下一个字符。

举例

正常模式下按键 该按键产生的效果
fa 光标飞到你所在当前行的下一个a
fD 光标飞到你所在当前行的下一个D
f, 光标飞到你所在当前行的下一个,

PS:你不要两个键一起按,先按f,然后在0.2秒~2秒内按下一个字母就可以。

像是这种不单独发挥效果的键,我们可以把它称为及物名词。(我瞎起名的,不要介意。)

行间移动的出现,使得定点穿梭成为了可能。比如你这一行很长,但是你想要快速到这一行结尾的分号或者双引号或者右括弧,可以直接f;或f"

甚至都不需要鼠标拖动横向的滚动条。简直优雅。后面也会讲到,动词可以与它们结合,形成动宾短语。比如df;或者df"

产生单排快速爆破的效果,具有很高的收益。而不需要手动选择(你知道的,手动选择容易多选或少选,或不小心取消选择)

总结

以下是按键总结

按键 功能
hjkl 字母间移动
web 词间移动
ft 行间移动

非常感谢你的观看!!

都看到这里,难道不想点一个免费的赞吗

致谢

《Vim实用技巧》

相关推荐
努力变厉害的小超超2 小时前
ArkTS中的组件基础、状态管理、样式处理、class语法以及界面渲染
笔记·鸿蒙
秃头佛爷2 小时前
Python学习大纲总结及注意事项
开发语言·python·学习
dayouziei4 小时前
java的类加载机制的学习
java·学习
励志成为嵌入式工程师5 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
aloha_7896 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
dsywws7 小时前
Linux学习笔记之vim入门
linux·笔记·学习
晨曦_子画8 小时前
3种最难学习和最容易学习的 3 种编程语言
学习
城南vision8 小时前
Docker学习—Docker核心概念总结
java·学习·docker
ctrey_9 小时前
2024-11-1 学习人工智能的Day20 openCV(2)
人工智能·opencv·学习
十年之少9 小时前
由中文乱码引来的一系列学习——Qt
学习