在上一篇文章中我们获取到了neovim 并对它进行了基础配置。现在已经具备一般编辑器的基本功能了。让我们先学会如何使用vim基本功能进行编辑,后面再看如何进行配置,以达到某某IDE或者编辑器的效果

vim 为何高效

这里我们先聊聊vim为何高效。一般进行编辑工作,不管是使用Word,记事本,写PPT,对于文本的操作无外乎这么几种操作

  • 移动光标到指定位置
  • 输入
  • 删除
  • 替换(删除 + 输入)

而vim之所以高效就是将这几个部分分解为几个模式,不同的模式针对这些场景进行了一些优化。下面是几个简单的示例

  1. 将多行文字合并为1行

  2. 删除前5行

  3. 将每行后面的数字+1

这些操作先卖个关子,暂时不去管他们,接下来简单说说vim的几种模式,然后了解一下移动光标的一些命令,最后提供一个能描述vim操作逻辑的公式

vim的几种模式

vim主要分为一下几个模式

  • 普通模式 (normal mode)

    不出意外的话,在使用vim的时候大部分时间停留在普通模式下,并且很多操作都是在普通模式下完成的,例如上述的几个例子全都是在普通模式下完成的。移动光标、切换模式都是在普通模式下进行的

  • 插入模式 (insert mode)

    插入模式主要用来编辑文本,在该模式下输入的字符都会作为文本的一部分进行保存,在该模式下可以进行文本的编辑操作

  • 可视模式(visual mode)

    该模式主要用来选择一部分文本,实现的功能跟用鼠标选中一段文本一样,后续可以输入命令针对被选中的文本进行处理

  • 命令行模式(command mode)

    可以在普通模式和可视模式下输入 : 进入命令行模式,严格意义上来说,它并不是一个真正的模式。许多复杂的操作其实都可通过一个简单的命令来完成。在命令行中,我们可以执行 vim 自带的命令,也可以执行自定义的命令(例如很多插件都有一些自定义命令)。例如使用 :w 来将缓冲区中的内容写入一个文件中,或者使用:q 来退出vim。

vim 移动光标的几种方式

移动光标可以说是vim 中所有操作里面最基础的操作了。因为 删除, 输入 和 替换 这三个操作都是以光标所在位置为基础做的。可以说,高效的文本处理大多依赖于光标移动的效率,而如何高效的把光标移动到 “目标” 处是一个不小的学问。

一般来说普通的编辑器移动光标的方式都是通过手去移动鼠标,通过鼠标来定位到光标要移动的位置,这么做并不高效。原因是在移动鼠标的过程中涉及到将手由键盘移开,将手放到鼠标上、找到对应位置然后移动光标,最后再将手由鼠标移动到光标上。这些动作不仅打断了键盘输入,同时也打断了我们输入的思路。要做到高效移动光标首要的就是手不要离开键盘(尽量不要大范围的移动手)。

vim 的普通模式完美的解决了这个问题,在普通模式下提供了丰富的操作来移动光标,下面列举一些常用的

  • h: 向前移动一个字符
  • l: 向后移动一个字符
  • j: 向下移动一行
  • k: 向上移动一行
  • b: 向前移动一个单词
  • w: 向后移动一个单词
  • e: 移动光标到单词尾部
  • ^: 移动光标到行首第一个非空字符处
  • $: 移动光标到行末最后一个非空字符处
  • gg: 移动光标至文件首行的首个非空格字节
  • G: 移动光标至整个文本最后一行的首个非空格字节()
  • %: 移动光标到匹配括号的另一端
  • 0: 移动光标至行首

说句题外话,vim 使用 h j k l 来代替 ← ↓ ↑ → 主要是因为当年创建 vi 的时候键盘张这样

如果仅仅使用上述介绍的内容进行移动光标,一次移动一个字符、一个单词、一行,这效率也太低了,无法处理需要大幅度跳转光标的需求。这里介绍一个公式

数字 + 移动光标

例如上述介绍的移动光标的方式都可以采用这个公式。前面的数字表示按同意的操作移动光标的次数,例如 2w 表示向后移动两个单词,3j 表示向下移动3行。

我们把这个公式总结为

motion = [数字] + 移动光标

上述公式可以理解为 motion就是定义了如何移动光标

vim 基础操作之删除和替换

移动光标之后,接下来应该就是进入输入模式进行输入操作,但是这里我们先不谈输入模式。其实在忽略在输入模式下的各种操作技巧,输入模式中剩下的就是输入各种字符完成输入操作,相对比较基础,这里先不谈它。我们先来说说在普通模式下的删除和替换操作。

删除操作使用 d(你可以理解为英文单词 delete 的首字母),替换操作使用 c(也就是 change)

我们输入 d 或者 c 发现操作卡住了,其实这个时候vim在等用户输入对应的范围即 motion ,表示针对哪个范围的文本进行该操作,这里我们引入第二个公式

operate = operator + motion

公式可以理解为,一个操作等于我们想要多多大范围的文本进行何种操作。例如cw 表示针对一个单词进行替换操作,d2w 表示对光标后2个单词进行删除操作,这么写也比较符合我们平时使用的日常语言,例如 d2w = delete 2 words (删除两个单词)

  • 示例: 使用 c2w 删除两个单词并进入插入模式

  • 示例: 使用 d$ 删除光标后至行尾的所有内容

其实类似 dc 的操作还有很多,例如

  • >: 右缩进

  • <: 左缩进

  • =: 自动缩进

  • y: 赋值

  • p: 粘贴

  • gu: 变为小写

  • gU: 变为大写

  • g~: 反转大小写

  • 示例:使用>G 将当前行至文件尾部的代码进行缩进

我们也可以在 operator 前添加数字,表示执行操作重复次数,这里我们的公式就可以进行改写

operat = [数字] + operator + motion

例如2dw 表示删除一个单词并将该操作执行两遍。它与前面演示的 d2w 能达到相同的操作,但是含义不同。d2w 表示一次删除两个字符。理解了这个,这里我提出一个简单的问题 2d2w 的等效操作是哪两个呢,欢迎评论区给出。

以行为单位的操作

例如我们要删除一行,根据以上学习的内容可以想到使用 dj ,但是实际尝试的时候发现它删除了两行。我们还可以想到先使用 0将光标移动到行首,然后使用 d$ 删除整行,但是会发现它会留下一个空白行。

如果想针对行本身进行操作的话,需要将同样的操作同时按两下,即dd 表示删除一行,>> 表示缩进当前行。这里我们可以扩展一个公式

operat = [数字] + 2 * operator

即重复按下两次同样的操作命令表示针对行进行操作,前面加上数字表示重复多少次。举几个例子

  • 5dd 删除5行
  • 4>> 将4行代码进行缩进
  • 2cc 更改接下来的两行,并进入插入模式

最后的总结

本篇到这里就结束了,最后做一下总结,我们提到几个公式

motion = [数字] + 移动光标
operat = [数字] + operator + motion
operat = [数字] + 2 * operator

根据这些公式我们可以根据具体情形自由发挥想象。它是vim的基础也是体现它高效的一个地方。

另外还介绍了一些常用的移动光标的方式和常用的操作符,这里再次将他们列举出来以供查阅

几种常用motion

motion 含义
h 左移
j 下移
k 上移
l 右移动
w 向后移动一个词
b 向前移动一个词
e 移动光标至词末
$ 移动光标至行末
0 移动光标至行首
^ 移动光标至本行首个非空格字节
gg 移动光标至文件首行的首个非空格字节
G 移动光标至整个文本最后一行的首个非空格字节()
% 移动光标到匹配括号的另一端

几种常用操作符

operator 含义
c 修改,删除当前并切换到insert mode
d 删除,该命令与motion配置使用,表示删除光标移动过的所有内容
> 右缩进
< 左缩进
= 自动缩进
y 赋值
p 粘贴
gu 变为小写
gU 变为大写
g~ 反转大小写

vim 从嫌弃到依赖(2)——vim 模式的更多相关文章

  1. 『学了就忘』vim编辑器基础 — 96、末行模式中的相关命令

    目录 1.在文档中显示行号 2.是否显示文档内容相关颜色 3.是否将查找的字符串高亮显示 4.是否显示右下角的状态栏 5.是否在左下角显示如"--INSERT--"之类的状态栏 6 ...

  2. 【转】将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)

    原文网址:http://blog.csdn.net/bokee/article/details/6633193 工欲善其事,必先利其器.一个强大的开发环境可以大大提高工作效率.好吧,我知道这是废话.. ...

  3. Vim新手入门资料和一些Vim实用小技巧

    一些网络上质量较高的Vim资料 从我07年接触Vim以来,已经过去了8个年头,期间看过很多的Vim文章,我自己觉得非常不错,而且创作时间也比较近的文章有如下这些. Vim入门 目前为阿里巴巴高级技术专 ...

  4. 将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)(转)

    1.安装Vim和Vim基本插件首先安装好Vim和Vim的基本插件.这些使用apt-get安装即可:lingd@ubuntu:~/arm$sudo apt-get install vim vim-scr ...

  5. vim学习笔记(一)—— vim安装方法

    一.完全卸载vim的方法 sudo apt-get remove --purge vim (--purge 是完全删除,会连配置文件一起删除) 二.Vim前言——————“世界上只有三种编辑器,EMA ...

  6. 高效率编辑器 Vim——操作篇,非常适合 Vim 新手

    原文地址:https://linuxtoy.org/archives/efficient-editing-with-vim.html vim教程:http://vimcasts.org/ https: ...

  7. vim配色方案设置(更换vim配色方案)

    vim配色后,我的 设定底色为黑色,字体为绿色,然后将文件夹设为洋红,默认的注释换为淡黄:其实有一种简单的方法,就是设定为系统配置好的配色方案:转载文章如下:   ---------------- ( ...

  8. mac /linux vi/vim永久显示行号开启高亮模式

    临时显示:进入vi编辑器,输入命令 :set number     //下次在进入vi 无法显示行号 :set nonumber  //本次vi关闭行号显示 vi 每次修改后推荐使用命令: sourc ...

  9. Vim使用技巧(2) -- 插入模式技巧 【持续更新】

    组合快捷键 Ctrl + h //删除前一个字母(同退格键) Ctrl + w //删除前一个单词 Ctrl + u //删除到行首 Esc //切换到普通模式 Ctrl + [ //切换到普通模式 ...

  10. Linux centosVMware Vim介绍、vim颜色显示和移动光标、vim一般模式下移动光标、vim一般模式下复制、剪切和粘贴

    一.Vim介绍 vim 是一款功能强大的文本编辑器,是vi的升级版,带有颜色显示, 默认有三种模式:一般模式, 命令模式,  编辑模式   安装Vim [root@davery ~]# vim /et ...

随机推荐

  1. Axure 自定义元件库

    点击文件 -> 新建元件库 可以添加多个元件,并将期重命名 保存元件库 新建页面 添加元件,选择自建的元件库 导入后就会发现我的原件库 这样就可以使用我们自定义的元件库了

  2. 配置阿里云docker镜像加速

    配置好后 重新加载一下 daemon [root@centos-linux jimmy]# systemctl daemon-reload [root@centos-linux jimmy]# sys ...

  3. 发布会回放|Gradio 4.0 正式发布!

    Gradio 的目标是使机器学习模型的演示更容易定制和访问,以满足不同用户的需求.在 4.0 正式版的发布活动上,Hugging Face 的 Gradio 团队介绍了自己为了提高机器学习模型的可访问 ...

  4. 聊聊损失函数1. 噪声鲁棒损失函数简析 & 代码实现

    今天来聊聊非常规的损失函数.在常用的分类交叉熵,以及回归均方误差之外,针对训练样本可能存在的数据长尾,标签噪声,数据不均衡等问题,我们来聊聊适用不同场景有针对性的损失函数.第一章我们介绍,当标注标签存 ...

  5. 小姐姐跳舞,AI 视频生成太酷了

    大家好,我是章北海 最近AI视频领域的研究进展神速,看得眼花缭乱. 这里老章就把最近几天看过印象深刻的四个项目介绍给大家,同时附上项目相关简介.论文.代码等资料,感兴趣的同学可以深度研究一下. < ...

  6. Pycharm 2023 年最新激活码、破解教程,亲测有用,永久有效

    申明:本教程 Pycharm 破解补丁.激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除.若条件允许,希望大家购买正版 ! PS: 本教程最新更新时间: 2023年2月2日~ ...

  7. 一个简单的例子看明白 async await Task

    测试代码: 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using Sys ...

  8. webpack-小滴课堂学习笔记

    webpack简介 1.webpack是什么 简介:webpack其实就是一个JavaScript应用程序的静态模块打包器. 2.webpack有什么作用 模块化打包:webpack会将项目的资源文件 ...

  9. Liunx常用操作(六)-压缩与解压缩(打包/解包)

    liunx上面的压缩与解压缩(打包/解包)有以下几种命令可以实现 源文件001.txt 如下: 一.zip 特点:方便的与Windows之间通用 打包命令: zip 001.zip 001.txt 解 ...

  10. Linux性能分析——TOP命令详解

    Linux性能分析--TOP命令详解 1.Top命令介绍 Linux系统中,Top命令主要用于实时运行系统的监控,包括Linux内核管理的进程或者线程的资源占用情况. 这个命令对所有正在运行的进程和系 ...