从零开始配置 vim(6)——缩写

网友投稿 826 2022-10-06

从零开始配置 vim(6)——缩写

从零开始配置 vim(6)——缩写

关于vim能快速编辑文本的能力,我们见识到了 ​​operator + motion​​​ ,见识到了​​.​​​ 范式和宏。甚至可以使用命令来加快文本编辑。在后面我们又介绍了快捷键绑定来快速执行我们想要的操作。今天我们再来介绍一个新的能加快我们编辑文本速度的东西——​​Abbreviations​​

缩写简介

​​Abbreviations​​ 翻译成中文的意思大概是缩写。但是仅仅以缩写来描述这个特性,似乎是不够的,但是也找不到准确的中文来描述,暂时就采用这个名称吧。它的这个特性允许我们将输入的一段内容自动更新为新的内容

我们先来体验一下它的基本用法。

在命令中输入 ​​:iabbrev mian main​​

我们输入 ​​mian(​​​ 后它会自动将内容替换为 ​​main(​​​。这样即使我们手误将 ​​main​​​ 写成了 ​​mian​​​ ,vim能自动帮我们更新。再也不用怕编辑器报找不到 ​​main​​ 函数了

我们发现了它的第一个用途——纠正笔误。但是基于这一特性,我们还可以使用几个简单的字符来快速展开成常用的长文本。例如

​​:iabbrev pcr Copyright 2022 Masimaro, all rights reserved​​​ 通过输入 ​​pcr(program copy right)​​ 来快速产生一条程序的版权信息。

又或者在 ​​python​​​ 使用 ​​nmain​​​ 展开成 ​​if name== "__main__":​​。快速写下测试语句。

我们发现 ​​iabbrev​​​ 是 ​​i+ abbrev​​ 合成的一条命令。看到这相信各位小伙伴应该明白了。这个命令是作用于插入模式下。该特性还可以作用于 命令模式和替换模式。但是这里就不对它做深入的介绍了。有兴趣的小伙伴可以查看vim手册来了解。

对比键盘映射

我们可以使用快捷键映射来达到同样的效果,例如我们可以定义 ​​:inoremap mian viwdimain​​​ 同样可以达到更正 ​​mian​​​ 为 ​​main​​ 的效果

但是我们发现这有几个弊端,第一因为我们定义了一个 ​​mian​​​ 的关键字,这就需要手速要够快了,在短时间内输入完成 ​​mian​​​ 。第二我们针对只输入​​mian​​​ 确实能达到更正的效果,但是如果我连着其他的语句一起输入就不一定有这个效果了,例如我们想输入 ​​miantest​​​ 但是它会给我们替换成 ​​maintest​​​ 这就有点得不偿失了。在这种情况下,​​abbreviations​​​ 可以正常工作。而且我们发现相比于使用映射,​​abbreviations​​ 显的更为简洁,也更加符合逻辑。

keywords characters

我们发现在使用 ​​abbreviations​​ 这一特性的时候,只有在输入空格或者回车的时候它才会启用自动更新,但是输入字母的时候却不会。如何定义输入何种字符的时候它才会启用自动更新呢?

​​abbreviations​​​ 这一特性是在我们输入 ​​non-keyword character​​​ 的时候会检查上一个 ​​non-keyword character​​​ 到这个之间的单词是否符合之前定义的替换规则,如果符合将会发生替换行为,否则不会发生。只要定义了 ​​non-keyword character​​​ 就可以定义它发生更新的时机。那么我们该如何定义 ​​non-keyword character​​ 字符呢?

只要不在 ​​iskeyword​​​ 中的字符都算是 ​​non-keyword character​​​。我们执行 ​​set iskeyword?​​​ 可以看到 ​​iskeyword​​ 的定义如下:

@,48-57,_,192-255

看起来很复杂是不是?首先 ​​@​​​ 代表字母字符,48-57是字符0到字符9的ascii 编码,​​_​​​ 单纯的代表下划线,192-255代表ascii码中一些特殊字符。你只需要记住它包含一切字母,数字,_ 以及一些特殊字符。或者更简单的说,格式控制字符(像空格、制表符、回车)都会触发这一行为。如果你想修改 ​​keyword​​​ 。可以在vim手册中详细阅读关于 ​​iskeyword​​ 部分的说明。这里就不再过多介绍,我认为当前定义更符合编码时的直觉。

本地缓冲缩写

结合上一章学习的本地设置,我们也可以设置本地缓冲的缩写,例如

:iabbre mian main

我们发现它只在当前缓冲区中启用了。

到现在我们似乎可以结合缩写的这个特性完成代码片段的功能呢。但是别着急,要得到这个功能,还得接着往下学习。

如何形成记忆

跟快捷键类似,我们一时兴起,根据自己的习惯定义了一堆缩写,例如 定义 ​​fnc​​​ 为 ​​function​​​,定义 ​​ret​​​ 为 ​​return​​ 结果自己之前养成了把这些关键字都输全的习惯。后面怎么也改不过来,这些都白定义了,该如何解决这个问题呢?

与我们当初禁用快捷键类似,我们也可以禁用某些内容,只是​​iabbrev​​​ 并没有提供类似 ​​​​ 的指令已达到禁用的目的,但是我们我们可以将对应的字符串映射成为某些无效的字符。例如我们使用如下两个命令

:iabbrev return :iabbrev ret return

为了养成习惯我们将 ​​return​​​ 映射为空格,一旦我们习惯输入 ​​return​​​ 就会意识到我们已经用简写 ​​ret​​ 代替了。当我们养成肌肉记忆之后这条映射的作用也就显得可有可无了。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于微信小程序 request接口的封装介绍(关于微信小程序的论文)
下一篇:微信小程序网络请求wx.request的介绍(小程序 wx.request)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~