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实用技巧》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/3570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序按钮点击时的样式hover-class=“hover“

小程序的button组件很好用,按钮点击的时候会显示点击状态,默认的就是颜色加深 但是我们改变了button的背景色之后,就看不出点击效果了,解决起来也很简单 关键代码就是小程序的 hover-class 属性,需要注意的是&#xff…

代码随想录算法训练营Day8 | ● 344.反转字符串● 541. 反转字符串II● 54.替换数字● 151.翻转字符串里的单词● 55.右旋转字符串

(记得重学) ● 344.反转字符串 题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一…

Qt [获取Dump] 使用WindowsAPI实现生成MiniDump文件

说明 客户现场的软件偶发崩溃是程序开发者,比较头疼的事情。如何更快速的定位到问题点和解决掉,是开发应该具备的基本能力。 Windows提供了一系列的API,可以记录软件崩溃前的堆栈信息。下面就实现一个生成Dump文件的程序实例。 主要代码 回…

计算机系列之输入输出、中断、总线、可靠性、操作系统、进程管理、同步互斥

9、输入输出-中断-总线-可靠性 1、输入输出技术、中断 1、内存与接口地址的编址方法(了解概念即可) 计算机系统中存在多种内存与接口地址的编址方法,常见的是下面两种:(了解概念即可) 1)内存…

ai大模型应用开发

随着人工智能技术的飞速发展,AI大模型应用开发已成为一个日益重要的领域。本文将从专业角度深入探讨AI大模型的应用开发,并思考其未来的深度影响和逻辑性。 编辑搜图 请点击输入图片描述(最多18字) ​【一、AI大模型的定义与特点…

ASP.NET Core 3 高级编程(第8版) 学习笔记 03

本篇介绍原书的第 18 章,为 19 章 Restful Service 编写基础代码。本章实现了如下内容: 1)使用 Entity Framework Core 操作 Sql Server 数据库 2)Entity Framework Core 数据库迁移和使用种子数据的方法 3)使用中间件…

Babylon.js 读取GLB模型元数据

如果你熟悉将 3D 资源导出到游戏引擎的过程,那么无疑也会熟悉 3D 资源的 PBR 和 GLB 导出过程。 这是我们之前概述的内容,也是我们交互式工作的所有资产准备的基石。 然而,从传统的管道意义上来说,能够用元数据标记网格有很多逻辑…

通配符HTTPS安全证书

众多类型的SSL证书,要说适用或者说省钱肯定是通配符了,因为谁都想一本SSL证书包括了整条域名,而且也不用一条一条单独管理。 通配符HTTPS安全证书,其实就是通配符SSL证书,SSL证书主流CA的参数都一样,通配符…

武汉星起航:亚马逊助力中国卖家扬帆出海,迎来跨境电商新机遇

2015年,亚马逊全球开店业务正式踏入中国这片充满活力和潜力的市场,此举不仅为中国卖家提供了前所未有的跨境电商新机遇,更为其发展出口业务、拓展全球市场、打造国际品牌铺设了一条坚实的道路。亚马逊作为国际版的电商购物平台,其…

Hadoop-Hive-Spark-离线环境搭建

一、版本描述 apache-hive-2.3.9-bin.tar.gz hadoop-2.7.0.tar.gz spark-2.4.0-bin-hadoop2.7.tgz 下载链接: https://archive.apache.org/dist/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz https://archive.apache.org/dist/hadoop/common/hadoop-2.7.…

vscode 创建代码模版

在vscode中快捷创建代码模版 1.在VSCode中,按下Ctrl Shift P(Windows/Linux)或Cmd Shift P(Mac)打开命令面板。 2.然后输入"Preferences: Configure User Snippets"并选择该选项。打开一个json文件用户…

IDEA中配置使用maven和配置maven的中央仓库

1 以汉化后的IDEA为例配置maven 打开idea选择文件 选择 设置 点击>构建.执行.部署 点击>构建工具 点击>Maven 其中Maven主路径 就是我们maven下载解压后的路径 可以通过边上的三个点选择你解压后的绝对路径,也可以直接把解压后的绝对路劲复制过来 以下…

回归预测 | Matlab实现SSA-ESN基于麻雀搜索算法优化回声状态网络的多输入单输出回归预测

回归预测 | Matlab实现SSA-ESN基于麻雀搜索算法优化回声状态网络的多输入单输出回归预测 目录 回归预测 | Matlab实现SSA-ESN基于麻雀搜索算法优化回声状态网络的多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现SSA-ESN基于麻雀搜索算法…

物联网:从电信物联开发平台AIoT获取物联设备上报数据示例

设备接入到电信AIoT物联平台后,可以在平台上查询到设备上报的数据。 下面就以接入的NBIOT物联远传水表为例。 在产品中选择指定设备,在数据查看中可以看到此设备上报的数据。 示例中这组数据是base64位加密的,获取后还需要转换解密。 而我…

2024 IDM最新破解版及软件介绍

*IDM:信息时代的高效管理工具** 在快节奏的现代社会中,随着信息的爆炸式增长,如何高效、有序地管理信息成为每个人都需要面对的挑战。IDM,作为一种信息管理工具,正在逐渐受到人们的青睐。 IDM,全称Inform…

Linux--进程控制(1)

文章衔接: Linux--环境变量-CSDN博客 Linux--地址空间-CSDN博客 目录 1.进程创建 2.进程的终止 2.1想明白:终止是在做什么? 2.2进程终止的三种情况 2.3 进程如何终止 3.进程等待 (wait/waitpid) 1.进程创建 在li…

C++内存分布 new和delete介绍

目录 C/C内存分布 栈区 堆区 静态区 常量区 C new和delete 分配空间形式对比 new delete与malloc free的区别 可不可以串着使用new和free呢 C/C内存分布 C的内存分布,大体上分为栈区 堆区 静态区 常量区 栈区 栈区是用于存储函数调用时的局部变量 函…

MySQL——运维

日志 错误日志 错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。 查看日志位置: sho…

Eigen::svd和 np.linalg.svd的不同之处

目录 pythonc结论参考 SVD奇异值分解与PCA主成分分析 SVD动画图解–Wiki Eigen Svd 和 np.linalg.svd都可以用于SVD计算,但两者却存在细微的差别。 python import numpy as np datanp.array([[0.99337785, 0.08483806, 0.07747866, -92.91055059],[-0.07889607,…

【Qt常用控件】—— 多元素控件

目录 1.1 List Widget 1.2 Table Widget 1.3 Tree Widget 1.4 小结 Qt 中提供的多元素控件有: QListWidget QListView QTableWidget QTableView QTreeWidget QTreeView xxWidget 和 xxView 之间的区别 以 QTableWidget 和 QTableView 为例: QTableView 是基于…