首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么宏中的换行符在Vim中会被解释为‘j`?

在Vim中,宏(Macro)是一种记录和重放操作序列的功能。当我们录制宏时,Vim会记录我们在编辑器中执行的一系列按键操作,并将其保存为一个宏。然后,我们可以通过执行该宏来重放这些按键操作。

在Vim中,宏的录制和执行是通过一系列的按键来触发的。其中,q命令用于开始和停止录制宏,后面跟着一个指定的寄存器名,用于保存宏的内容。例如,我们可以使用qa来开始录制一个宏,并将其保存到a寄存器中。

当我们录制宏时,Vim会将我们执行的按键操作逐个记录下来,并保存在指定的寄存器中。这些按键操作包括换行符(Enter键)。

在Vim中,j键是用于向下移动光标到下一行的命令。当我们录制宏时,如果我们在宏的按键序列中包含了换行符(Enter键),Vim会将其解释为j键,即向下移动光标到下一行。

这种行为是为了方便宏的录制和重放操作。通过将换行符解释为j键,我们可以在录制宏时,使用换行符来分隔不同的操作步骤,使得宏的录制更加清晰和易于理解。

需要注意的是,这种行为只在录制宏时才会发生。在正常的编辑模式下,换行符仍然会被解释为换行符,而不是j键。

总结起来,宏中的换行符在Vim中会被解释为j键,是为了方便宏的录制和重放操作。这种行为只在录制宏时才会发生,而在正常的编辑模式下,换行符仍然会被解释为换行符。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

在Linux中vim的用法

移动光标 vi 可以直接用键盘上的光标来上下左右移动,但正规的 vi 是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格。...A) 列出行号 「set nu」:输入「set nu」后,会在文件中的每一行前面列出行号。...B) 跳到文件中的某一行 「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字 15,再回车,就会跳到文章的第 15 行。...5、vi 命令列表 1、下表列出命令模式下的一些键的功能: h 左移光标一个字符 l 右移光标一个字符 k 光标上移一行 j 光标下移一行 ^ 光标移动至行首 0 数字“0”,光标移至文章的开头...沈唁志|一个PHPer的成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:在Linux中vim的用法

2.9K31

只需在Vim或Neovim编辑器中打开文件,您的Linux就会被黑客攻击

在Linux系统上,Vim编辑器允许用户创建,查看或编辑任何文件,包括文本,编程脚本和文档。...Vim和Neovim中的代码执行缺陷 Razmjou 发现了Vim编辑器处理“模型”的方式中的一个缺陷,默认情况下,该功能可以自动查找并应用文档创建者提到的一组自定义首选项,这些首选项位于文档的起始行和结束行附近...因此,只需使用Vim或Neovim打开一个看起来无辜的特制文件,攻击者就可以在Linux系统上秘密执行命令并对其进行远程控制。...Vim的维护者(补丁8.1.1365)和Neovim(在v0.3.6中发布)已经发布了两个实用程序的更新以解决问题,用户应该尽快安装。...除此之外,研究人员还建议用户: 禁用模型功能, 禁用“modelineexpr”以禁止在modelines中使用表达式, 使用“securemodelines插件”,这是Vim模型的安全替代品。

1.7K20
  • 关于在vim中的查找和替换

    1,查找 在normal模式下按下/即可进入查找模式,输入要查找的字符串并按下回车。 Vim会跳转到第一个匹配。按下n查找下一个,按下N查找上一个。...Vim查找支持正则表达式,例如/vim$匹配行尾的"vim"。 需要查找特殊字符需要转义,例如/vim\$匹配"vim$"。...set smartcase 将上述设置粘贴到你的~/.vimrc,重新打开Vim即可生效 4,查找当前单词 在normal模式下按下*即可查找光标所在单词(word), 要求每次出现的前后为空白字符或标点符号...例如当前为foo, 可以匹配foo bar中的foo,但不可匹配foobar中的foo。 这在查找函数名、变量名时非常有用。 按下g*即可查找光标所在单词的字符序列,每次出现前后字符无要求。...^E与^Y是光标移动快捷键,参考: Vim中如何快速进行光标移 大小写敏感查找 在查找模式中加入\c表示大小写不敏感查找,\C表示大小写敏感查找。

    25.7K40

    在 Vim 编辑器中开发 Python 应用的 Vim 插件

    Python-mode 是一个 Vim 插件,它使你能够在 Vim 编辑器中更快的利用包括 pylint、rope、pydoc、pyflakes、pep8、autopep8、pep257 和 mccable...推荐阅读:如何用 Bash-Support 插件将 Vim 编辑器打造成编写 Bash 脚本的 IDE 这个插件包含了所有你在 Vim 编辑器中可以用来开发 Python 应用的特性。...Python 缩进 能够在 Vim 中运行 Python 代码 能够添加/删除断点 支持 Python 对象的 Vim 动作和操作符 能够在运行的同时检查代码(pylint、pyflakes、pylama...在 Debian 和 Ubuntu 中安装 Python-mode 另一种在 Debian 和 Ubuntu 中安装 Python-mode 的方法是使用 PPA,就像下面这样 $ sudo add-apt-repository...在本教程中,我向你们展示了如何在 Linux 中使用 Python-mode 来配置 Vim 。请记得通过下面的反馈表来和我们分享你的想法。

    1.8K80

    正则表达式:在 Vim 中异于 Javascript 的用法

    对于前后端各种编程语言中的正则表达式,开发者们已经再熟悉不过了;但如果你在使用 vim 编辑器,同样会在命令模式下遇到需要用正则实现搜索替换的情景。...今天我们就来稍微归纳一下 vim 中较独特的正则语法,为更好地使用这种编辑神器厘清障碍。...本文适用于较熟悉正则表达式和 vim 编辑器的读者,入门选手推荐先阅读以下文章: JS正则表达式--从入门到精分 小览 ES6-ES2019 中正则表达式的新发展 初探在WSL中设置vim前端开发环境...搜索和替换标记 除了 g、i 之外,在 vim 中还可以使用 c,用来交互式地对匹配项逐个替换。...s/\%Vcat/dog/g 会把选中范围内的 'cat' 换成 'dog' 在可视模式按 ESC 变为命令模式时,命令输入行会自动生成 ',要先删去这一部分 替换并改变大小写 在替换段落中

    1.8K20

    Crawler4j在多线程网页抓取中的应用

    本文将探讨如何利用Crawler4j进行多线程网页抓取,以及如何通过代码实现这一过程。多线程抓取的重要性在进行网页抓取时,单线程爬虫可能会遇到效率低下的问题,尤其是在面对需要抓取大量页面的网站时。...在main方法中,我们创建了一个CrawlConfig实例来配置爬虫,并设置了存储路径。然后,我们创建了一个固定大小的线程池,大小为THREAD_COUNT,这是我们想要的线程数。...注意事项在使用Crawler4j进行多线程抓取时,需要注意以下几点:1抓取策略:合理设置抓取间隔和抓取深度,避免对目标网站造成过大压力。...2异常处理:在visit方法中添加异常处理逻辑,以确保爬虫的稳定性。3资源管理:确保在爬虫完成后释放所有资源,例如关闭线程池和存储文件。...4遵守Robots协议:尊重目标网站的Robots协议,合法合规地进行网页抓取。结论通过本文的介绍和示例代码,我们可以看到Crawler4j在多线程网页抓取中的应用是高效且灵活的。

    14710

    为什么String在Java中是不可变的

    String 在 Java 中是不可变的。 不可变类只是一个无法修改其实例的类。 创建实例时,将初始化实例中的所有信息,并且无法修改信息。 不可变类有许多优点。...本文总结了为什么 String 设计为不可变的。 这篇文章从内存,同步和数据结构的角度说明了不变性概念。 1. 字符串池 字符串池(String intern pool)是方法区域中的特殊存储区域。...如果字符串是可变的,则使用一个引用更改字符串将导致其他引用的错误。 2. 缓存的哈希码 字符串的哈希码经常在 Java 中使用。 例如,在 HashMap 或 HashSet 中。...在String类中,它具有如下代码: private int hash;//this is used to cache hash code. 3....不可变保证了线程安全 由于无法更改不可变对象,因此可以在多个线程之间自由共享它们。 这消除了进行同步的要求。

    1.3K20

    J Med Chem|静电互补在基于结构的药物设计中的应用

    2022年5月5日,Astex Pharmaceuticals的科学家们在J Med Chem杂志上对静电势计算在药物设计中的应用进行了综述,并且利用6个具体的例子阐明了ESP计算对于基于结构的药物设计的改善和指导意义...在基于结构的药物发现中,优化静电互补是提高分子对特定蛋白靶点亲和力的重要策略。...FXa抑制剂和蛋白静电势表面 在寻求优化S4口袋相互作用的同时,也有降低化合物亲油性的愿望,因此将化合物4中的正氟苯基替换为吡啶,在末端芳环的正位上安装一系列取代基,得到如表1中的一系列化合物。...从所讨论的例子中也可以清楚地看到,虽然优化静电互补的好处是显而易见的,但这种技术在药物化学群体中的应用是有限的。...Electrostatic Complementarity in Structure-Based Drug Design[J].

    1.4K20

    java 为什么 String 在 java 中是不可变的?

    为什么 String 在 java 中是不可变的?String 在 java 中是不可变的,一个不可变类意味着它的实例在创建之后就不可修改,实例的所有属性在创建时初始化,之后无法对这些属性进行修改。...不可变类型有着许多的优点,这篇文章总结了 为什么 String 被设计成不可变的,文章将从内存、同步和数据结构的角度说明不变性概念。...4 安全性String 作为参数在 java 中广泛使用,例如网络连接,打开文件,等。如果 String 被设计为可变的,那么一个网络连接或者文件操作将会被改变,这可能留下非常严重的安全隐患。...caseProblem(str);}5 不可变对象是天生线程安全的因为不可变对象不会被改变,它们可以在多个线程间自由访问。这样就无需对存取进行同步。...总结,String 被设计为 final 的原因是 效率 和 安全,通常情况下这也是为什么不可变对象在许多设计中会成为首选的原因。

    8610

    SFFAI 分享 | 李宏扬 :二阶信息在图像分类中的应用

    1、导读 ---- 此次分享的文章主要关于二阶信息在图像分类中的应用。从Alexnet起,深度神经网络飞速发展,取得了一系列骄人的成绩。总体来说,深度分类网络主要分为两个部分:特征提取和分类器。...2、分享者简介 ---- 李宏扬,北京大学信息科学技术学院在读硕士,本科毕业于北京科技大学,2018年MS COCO Panoptic Segmentation Contest PKU_360团队(第三名...目前主要研究兴趣点在于图像中的object detection。希望可以结识更多的人,彼此分享,共同交流。...预处理的目的在于保证迭代的收敛,具体可以参考论文中的分析;由于预处理过程中改变了协方差矩阵的特征值大小,为了消除这一影响,引入后处理操作,将除掉的特征值大小乘回来,实验表明,后处理这个操作也是十分关键。...4、总结 ---- 就个人而言,二阶信息的使用帮助我更好的理解细分类问题,为什么BCNN在细分类问题中可以取得显著的效果。

    38820

    在vue的v-for中,key为什么不能用index?

    写在前面在前端中,主要涉及的基本上就是 DOM的相关操作 和 JS,我们都知道 DOM 操作是比较耗时的,那么在我们写前端相关代码的时候,如何减少不必要的 DOM 操作便成了前端优化的重要内容。...虚拟DOM(virtual DOM)在 jQuery 时代,基本上所有的 DOM 相关的操作都是由我们自己编写(当然博主是没有写过 jQuery 滴,可能因为博主太年轻了吧,错过了 jQuery 大法的时代...DOM 更新操作Vue 源码中的 diff 算法patch.js 路径Vue 中的 diff 算法相关代码主要在 patch.js 文件中,路径如下图图片patch 函数图片1、如果新节点不存在(vnode...,如果定义的属性非常多的话,触发更新将会导致非常大的性能损耗,因此,在使用 v-for 的时候,建议使用类似 id 这种唯一标识的字段替代 index,避免不必要的性能损耗!...,体会到了前端对于性能的极致追求,通过通读 vdom 源码,基本能够从更加深刻的角度去理解采用 VDOM 的目的,以及 key 值在 diff 算法中的真正作用,也能够从更加底层的角度理解为什么不推荐使用

    1.1K10

    在Java中为什么不同的返回类型不算方法重载?

    本文已收录《Java常见面试题》:https://gitee.com/mydb/interview 方法重载是指在同一个类中,定义了多个同名方法,但每个方法的参数类型或者是参数个数不同就是方法重载...doSomething } public void method(Integer id, String name) { // doSomething } } 为什么不同返回类型不算方法重载...: 那为什么返回类型不能做为方法签名的一部分呢?...匹配原则5:可变参数匹配 最后将代码中的方法删除的只剩一个可选参数,实现代码如下: public class OverloadExample { public static void main(...总结 在同一个类中定义了多个同名方法,但每个方法的参数类型或者是参数个数不同就是方法重载。方法重载的典型使用场景是 String 中的 valueOf 方法,它有 9 种实现。

    3.4K10

    Log4j 2.0在开发中的高级使用详解—默认级别(二)

    Log4j 经过几年的发展之后,终于迎来了它的姊妹版本Log4j 2.0 。...在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外,Apache为我们提供了一个强有力的日志操作包-Log4j。重大的升级必须带来重大的特性。...对于2.0的颠覆性特性,我们将在之后一一讲解。今天我们就来看它的特性之一,默认级别。 在使用log4j 1.x当中,我们都需要自己提供它的配置文件。...如果不提供就会报错,在2.0的版本当中,配置文件已经不是必须的了。至于我们没有提供它的配置文件,它会默认的打印error级别的信息。...Test0 { /** * 如果我们在工程(项目)中不提供log4j的配置文件,则log4j会使用默认的配置,级别为error * 4中获取日志记录器的方式 */ private static

    80720

    Log4j 2.0在开发中的高级使用详解—介绍篇(一)

    Log4j 2 是 Log4j 的升级版本,该版本比起其前任来说有着显著的改进,包含很多在 Logback 中的改进以及Logback 架构中存在的问题。...这是 Log4j 2 的首次发行的版本,值得关注的改进包括: API 分离 – Log4j 的 API 和其实现进行分类(注:我讨厌这样,本来一个jar包搞定的,要变成好几个,跟 slf4j 似的的)...为日志审计而设计,与 Log4j 1.x 和 Logback 不同的是 Log4j 2 将不会在重新配置期间丢失事件,支持消息可方便进行审计 性能方面的提升,在关键领域比 Log4j 1.x 的性能提升不少...Apache Log4j 2是分布式的Apache许可,2.0版本。同时提供有二进制版和源码版。 Log4j 2.0中有默认的配置文件,级别为ERROR。有手动配置,也有自动配置。...3.以编程方式,通过调用api暴露在配置界面添加 组件的默认配置。 4.以编程方式,通过调用Logger类内部的方法。 关于Log4j 2.0的特性说明,目前了解到的就这些。

    49210

    在vue的v-for中,key为什么不能用index?4

    写在前面在前端中,主要涉及的基本上就是 DOM的相关操作 和 JS,我们都知道 DOM 操作是比较耗时的,那么在我们写前端相关代码的时候,如何减少不必要的 DOM 操作便成了前端优化的重要内容。...虚拟DOM(virtual DOM)在 jQuery 时代,基本上所有的 DOM 相关的操作都是由我们自己编写(当然博主是没有写过 jQuery 滴,可能因为博主太年轻了吧,错过了 jQuery 大法的时代...DOM 更新操作Vue 源码中的 diff 算法patch.js 路径Vue 中的 diff 算法相关代码主要在 patch.js 文件中,路径如下图图片patch 函数图片1、如果新节点不存在(vnode...,如果定义的属性非常多的话,触发更新将会导致非常大的性能损耗,因此,在使用 v-for 的时候,建议使用类似 id 这种唯一标识的字段替代 index,避免不必要的性能损耗!...,体会到了前端对于性能的极致追求,通过通读 vdom 源码,基本能够从更加深刻的角度去理解采用 VDOM 的目的,以及 key 值在 diff 算法中的真正作用,也能够从更加底层的角度理解为什么不推荐使用

    1.1K50

    C++在使用Qt中SLOT宏须要注意的一个小细节

    大家都知道C++虚函数的机制,对于基类定义为虚函数的地方,子类假设覆写,在基类指针或者引用来指向子类的时候会实现动态绑定。...但在使用Qt的SLOT的时候,会出现一个问题须要注意,就是在connect的时候,你给当前的子类对象child设置了SLOT宏,但这个宏也在基类中实现过,举个样例 Class Base : public...public Base { Q_OBJECT public: Child(); privare slots: void say(){ qDebug() << "Child" }; }; 在Base...的myConnect中,this指针表示你在当前Base类中,这个时候非常自然的去调用Base::say(),一開始可能这样写为了自己主动连接和断除比較方便,可是假设你写了继承子类,你非常自然的去覆写了...say这个函数,而且认为既然不是虚函数,没什么须要操心的,你可能会去用Child去连接别的对象,心理还在想着Base中say的实现方法(由于我记得我当初链接信号的时候写是在Base中写的,而且我如今没实用指针和引用

    1K20

    nextline函数_在JAVA中Scanner中的next()和nextLine()为什么不能一起使用?

    Java 输入一直是一个坑,本来一直用 Scanner,但一直搞不懂换行符啥的,就用 BufferReader ,但前不久大疆笔试需要持续输入,早忘了 Scanner 怎么写,而那个场景用 Scanner...对于 “” 的情况分析: 在输入 2 的时候调用的是 nextInt返回:nextInt 返回的是结束符之前的内容,并不会返回结束符 我们的输入:2 \r 以回车 ( \r ) 结尾,于是 2 被返回,...回车符 “\r” 它被丢弃在缓冲区中,现在缓冲区中,只有一个 \r ,于是 下一次 nextLine 扫描的时候就又扫描到了 \r,返回它之前的内容,也是啥都没有 “” ,然后再把 \r 去掉, 对于...,而我们在控制台中输入的数据也都是被先存入缓冲区中等待扫描器的扫描读取。...这个扫描器在扫描过程中判断停止的依据就是“结束符”,空格,回车,tab 都算做是结束符 而坑点在于 next 系列的,也就是下面这些函数:next nextInt nextDouble nextFloat

    2.7K10
    领券