在上一篇中,我们提到vim的几种模式,并且给出了一些基本的操作命令,包括移动光标,删除、替换操作。并且给出了几个重要的公式,理解这个公式对于理解vim和提高使用vim的效率来说至关重要。所以在这篇文章里面我打算再围绕这几个公式给出一些示例,希望能给各位理解公式提供一些帮助。

行内查找字符串

vim操作的效率很大程度上取决于移动光标的效率,平时在修改代码的时候很大程度上都是需要在特定位置修改,下面介绍到的操作很大程度上能提高我们移动光标和修改的效率

行内查找字符使用 f{char} 来进行,即使用f后面加一个字符,会快速跳转到行内第一个出现该字符的位置,例如下面一段话

  1. vim.o.relativenumber = true

假设光标位于行首的s 处,我们可以使用 fr 将光标移动到单词 字符 r出现的位置



根据公式

  1. motion = [数字] + 移动光标

我们可以使用 2fr 跳转到第二个r 位置



我们也可以使用 t 来跳转光标到搜索的字符处,它与 f 的区别在于 f 直接跳转光标到指定字符处,t 跳转光标到指定字符的前一个位置

  • 例如使用 tr 跳转到第一个r的左边

  • 使用3tr 跳转到第三个r的左边



    我们可以使用 FT 实现向前查找,它门跳转的规则与 ft 类似,这里就不再给出具体的示例了,有小伙伴感兴趣的可以自行尝试

大范围移动

之前只演示了基本的行内移动和多行移动,但是多行移动是基于上述公式实现重复向下移动一行多次的。vim中提供了一些大范围移动光标的方式。

  • H 移动光标到窗口首行
  • M 移动光标到窗口中间
  • L 移动光标到窗口尾行
  • gg 移动光标至第一行
  • G 移动光标到最后一行

要演示这几个操作光靠一屏就可以显示完的简短的文本是不行的,这里我采用 ~/.bashrc 小伙伴可以随便打开一个系统的配置文件,只要它超过一屏就行

  • 假设光标在文件最后一行,使用H 将光标移动到窗口首行

  • 假设光标在文件最后一行,使用 M 移动光标到窗口中间

  • 假设光标在文件第一行,使用 L 移动光标到窗口末尾

  • 假设光标在文件的第一行,使用 G 移动光标到最后一行



    后面的 gg 也就不演示了,从上面这些演示来看不难发现窗口和文件不是同一个东西,在窗口中跳转只能在文件的部分区域间进行跳转,而在文件中跳转则能浏览文件中的任意行

根据上面的公式,他们前面也是可以添加数字的,但是在这些操作的前面加上数字表示重复又有什么,例如gg 可以跳转到文件首行,我执行3次跳到行首又有什么用呢。要解释这个问题,我们先看一个例子

  • 例如使用 3gg 可以跳转到文件的第三行。这里我们假设光标在文件的最后一行



这些算是之前将的公式含义的特例吧,他们并不表示重复,这里我仅仅列出他们的含义吧,具体该如何理解我也不清楚,暂时记住,后续会使用即可

  • 数字 + gg, 表示跳转到文件的第几行
  • 数字 + G, 也表示跳转到文件的第几行。但是我平时都使用 gg 这种跳转方式,毕竟在一个键位上按两次可比按它的大写字母要快的多
  • 数字 + L, 移动到窗口的倒数第几行
  • 数字 + H, 移动到窗口的第几行
  • 数字 + M, 与单纯的使用M 效果一样

结合跳转指令的操作

下面在列举一些操作符配合光标移动指令的例子,帮助大家理解

例1,我们来针对之前的配置文件来做修改

假设光标在 relativenumber 的词首

  • 我们可以使用cw 来删除该单词并输入number

  • 可以直接使用 dtn 来删除字符 n 前面 relative

例2 将 hello world!! 改为 hello world!!!

  • 使用 2f! 将光标移动到对应位置,然后使用 a 进入插入模式插入对应字符

  • 使用 2f" 移动到行尾,然后使用i 进入插入模式插入对应字符

  • 使用$ 跳转到行尾,使用 i 进入插入模式进行修改



    从上面的例子来看,使用 f t 之类的指令相比使用 lw 更加高效,毕竟数单词个数和字符格式是很低效而且容易出错的

例3:将 "hello world" 改为 "nice to meet you"

我们假设光标位于h

  • 使用 d2w 删除两个单词并进入插入模式

  • 使用 dt" 删除对应单词,然后进入插入模式

  • 使用 ci" 删除对应字符并进入插入模式

文本对象

看到这里,肯定很多小伙伴会有一脑袋问号,这个 i 是什么东西,i 不是进入插入模式嘛,为什么我光标在行首它也能准确的删除引号内的字符呢。这就涉及到vim中一个非常重要的概念——文本对象

还记得最开始我们说过,vim将文本分为 字符、单词、句子、段落嘛,这可不是为了方便而人为划分的,而是vim在处理文本的时候就是真么做的。文本对象是vim 描述这些划分的。文本对象只能跟在 operator 后,由 ai 开头,后面跟文本范围来组成,表示我们要针对哪个范围的文本进行何种处理。其中 i 表示 inner 不包含表示范围的字符, 而 a 会包含表示范围的字符。例如上述例子中,如果使用 i 则会保留 " ,使用 a 则不会保留。感兴趣的小伙伴可以自行尝试。

下面给出各种文本范围的表格

文本范围 代表含义
w word 词
s sentence 句
p paragraph 段
t tag(HTML/XML) 标签
[或] 由[]包裹的部分
(或) 由()包裹的部分
<或> 由<>包裹的部分
由{} 包裹的部分
" 由""包裹的部分
' 由''包裹的部分
` 由``包裹的部分

文本对象看似抽象,实际上只需要多使用几次基本就能掌握它了。熟练掌握它之后,将会大大提高我们编辑文本的效率

接下来让我们再给出一个最后的例子,并且以本示例来结束该文

假设有这么一段文本

  1. <div class = "example">
  2. <div> This is vim example</div>
  3. </div>

我们希望将其变为

  1. <div class "example">
  2. vim is so good
  3. </div>

我们将光标移动到最外层的div上,然后使用 cit 删除div中的内容,然后输入 "vim is so good"

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

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

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

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

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

  3. 将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 ...

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

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

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

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

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

    5.1 vim介绍 5.2 vim颜色显示和移动光标 5.3 vim一般模式下移动光标 5.4 vim一般模式下复制.剪切和粘贴 vim   是vi的升级版本 vim 带有颜色显示 安装vim : y ...

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

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

  8. Vim配置:在win10下用vim编译运行C/C++(异步插件管理,一键运行)

    为什么用Vim 重新调配vim,追求尽量简单些. 安装 官网下载 PC: MS-DOS and MS-Windows下的 For modern MS-Windows systems (starting ...

  9. vim的几个插件mark.vim ctrlp.vim等

    开发过程中, 保证语义的前提下, 尽量使用 短的 变量名: 如: 用 $map来代替 $condition, 因为在书写长的变量名的时候, 容易写错, 而排查错误, 还不容易找出来. vim在浏览和排 ...

  10. vim的个性化配置- 再谈vim的折叠和展开 -- 彻底掌握vim 的展开和折叠!

    http://www.wklken.me/posts/2016/02/03/some-vim-configs.html 一般把 设置成 逗号, 是比较好的, 因为逗号比默认的leader  要方便键入 ...

随机推荐

  1. ChatGPT访问互联网,不神秘了

    我测试了一下,它其实调用了微软必应的api,搜索了关键词而已 比如我问它:https://twitter.com/elonmusk 马斯克最近在忙什么 它的回答是: 近期,马斯克在做的一些事情包括: ...

  2. SAP搜索帮助的限制值范围样式

    样式一: 点击下拉框,输入筛选数据,筛选搜索帮助列表 样式二: 点击漏斗,输入筛选数据,筛选搜索帮助列表 参数设置: 不同的样式,通过账号的参数设置决定 第一种样式:没有配置F4METHOD,或者配置 ...

  3. 【HZERO】权限管理

    Hzero数据权限介绍 https://open.hand-china.com/community/detail/625872021372407808#3.4 开发建议 Permission注解属性介 ...

  4. Python使用pandas库读取txt文件中的Json数据,并导出到csv文件

    使用的是 Python 3 代码: #!/usr/bin/python # -*- coding: gbk -*- # JSON数据导出到csv文件 import json import pandas ...

  5. async await 异步下载 异步代码加锁 lock 异步缓存

    async await 异步下载 异步代码加锁 lock 异步缓存 FTP异步下载代码: /// <summary> /// 异步下载文件 /// </summary> /// ...

  6. 前端知识点 | 查看已登录网站 Cookie 信息

    方法一:针对 Chrome 浏览器 设置 \(\to\) 隐私设置和安全性 \(\to\) Cookie 及其他网站数据 \(\to\) 查看所有 Cookie 和网站数据 or chrome://s ...

  7. Hottest 30 of codeforce

    1. 4A.Watermelon 题目链接:https // s.com/problemset/problem/4/A 题意:两人分瓜,但每一部分都得是偶数 分析:直接 对2取余,且 w != 2 # ...

  8. Redis 缓存常见问题

    本文为博主原创,未经允许不得转载: 目录: 1. 缓存穿透 1.1 出现原因 1.2 解决方案 1.3 布隆过滤器 2. 缓存雪崩 3. 缓存失效(缓存击穿,热点缓存) 1. 缓存穿透: 缓存穿透是指 ...

  9. springBoot 使用 @NotEmpty,@NotBlank,@NotNull 及@Valid注解校验请求参数

    本文为博主原创,转载请注明出处: @NotEmpty,@NotBlank,@NotNull 这些注解所在的jar包路径在 javax.validation.constraints 的包下面,这个包下面 ...

  10. ASIC 功能验证SVTB

    System Verilog进行验证是可以不综合的 发现DUT中的功能问题 预备知识:Linux/verilog/gvim System Verilog学习目录 System Verilog Test ...