关于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__":。快速写下测试语句。



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

对比键盘映射

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

但是我们发现这有几个弊端,第一因为我们定义了一个 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 <buffer> mian main

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

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

如何形成记忆

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

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

:iabbrev return <space>
:iabbrev ret return

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

从零开始配置 vim(6)——缩写的更多相关文章

  1. Mac 配置 vim

    Mac 配置 vim 安装 vim 7.4 cd ~ hg clone https://code.google.com/p/vim/ cd vim ./configure --with-feature ...

  2. mac配置vim-go

    基本的设置信息(参考网址:http://hessian.cn/p/1026.html): "还是配置/.vimrc文件. syn on "语法支持 set laststatus=2 ...

  3. 从零开始配置TypeScript + React + React-Router + Redux + Webpack开发环境

    转载请注明出处! 说在前面的话: 1.为什么不使用现成的脚手架?脚手架配置的东西太多太重了,一股脑全塞给你,我只想先用一些我能懂的库和插件,然后慢慢的添加其他的.而且自己从零开始配置也能学到更多的东西 ...

  4. AI应用开发实战 - 从零开始配置环境

    AI应用开发实战 - 从零开始配置环境 与本篇配套的视频教程请访问:https://www.bilibili.com/video/av24421492/ 建议和反馈,请发送到 https://gith ...

  5. Centos7下安装和配置vim

    Centos7 最新版本默认已经安装vim,可以使用命令查看是否安装 rpm -qa|grep vim 输出结果如下,如无以下输出结果,则安装vim: vim-filesystem-7.4.160-4 ...

  6. linux 配置vim(vimrc)

    打开终端:ctrl+alt+t 进入vim文件:cd /etc/vim 打开vimrc文件:sudo gedit vimrc 然后在行末if语句前加上下面的内容,"  这个符号为注释,后面内 ...

  7. linux、centos下安装配置vim

    ---恢复内容开始--- 1.一般情况下安装上centos后,会有vi,没有vim(以后可能会有吧) 如果不确定自己有没有vim,使用命令 rpm -qa|grep vim 查看,如果有的话,会显示三 ...

  8. CentOS7系列--1.5CentOS7配置vim

    CentOS7配置vim 1. 安装vim [root@centos7 ~]# yum -y install vim-enhanced Loaded plugins: fastestmirror ba ...

  9. 从零开始配置Ubuntu 14.04&SSH&curl&Git&MongoDB&Node.js

    从零开始配置Ubuntu 14.04 从零开始配置Ubuntu 14.04,记录配置服务的过程,安装组件如下: SSH curl Git MongoDB Node.js ... ​ Ubuntu 安装 ...

  10. 配置vim插件遇到youcompleteme插件问题解决方案

    今天在Opensuse下配置vim 遇到两个问题 配置插件找到一个很好的博客.学到一些有用技巧 http://hahaya.github.io/2013/07/26/use-vundle.html 但 ...

随机推荐

  1. python中的代码运行时间获取方式

    python中的代码运行时间获取方式 ​ 我们知道为了提高代码的运行速度,我们需要对书写的python代码进行性能测试,而代码性能的高低的直接反馈就是电脑运行代码所需要的时间. 使用time模块对代码 ...

  2. Mysql--JOIN连表查询

    一.Join查询原理 MySQL内部采用了一种叫做 nested loop join(嵌套循环连接)的算法:通过驱动表的结果集作为循环基础数据,然后一条一条的通过该结果集中的数据作为过滤条件到下一个表 ...

  3. 邮箱发送SMARTFORMS 转 PDF附件

    事务代码smartforms创建一个表单ZTEST001 将表单转换成PDF并添加到邮件的附件中发送给用户 "---------------------------------------- ...

  4. ACM | 新版 C++ 特性

    本文来自 OI wiki,转载仅作学习记录使用. 注意 :考虑到算法竞赛的实际情况,本文将不会全面研究语法,只会讲述在算法竞赛中可能会应用到的部分. 本文语法参照 C++11 标准.语义不同的将以 C ...

  5. 安装Amos结构方程模型分析软件的方法

      本文介绍IBM SPSS Amos软件的安装方法.   Amos是IBM公司旗下一款强大的结构方程建模软件.其捆绑在高级版的SPSS Statistics软件中,但其它版本的SPSS Statis ...

  6. vue学习笔记 八、toRef的使用

    系列导航 vue学习笔记 一.环境搭建 vue学习笔记 二.环境搭建+项目创建 vue学习笔记 三.文件和目录结构 vue学习笔记 四.定义组件(组件基本结构) vue学习笔记 五.创建子组件实例 v ...

  7. C++跨DLL内存所有权问题探幽(三)导致堆问题的可能性

    0xC0000374: 堆已损坏. (参数: 0x00007FFA1E9787F0). _Mem 是 nullptr 这里提供一个可能性,不一定是内存所属地址冲突的问题,除了MT和 MD编译,还有可能 ...

  8. ava进阶(39)--守护线程与定时器

    文档目录: 一.守护线程 二.定时器 ---------------------------------------分割线:正文------------------------------------ ...

  9. KVM 管理工具:libvirt

    libvirt 简介 libvirt 是目前使用最为广泛的对 KVM 虚拟机进行管理的工具和应用程序接口.  

  10. 【南大静态代码分析】作业 2:常量传播和 Worklist 求解器

    作业 2:常量传播和 Worklist 求解器 题目链接:https://tai-e.pascal-lab.net/pa2.html 评测链接:https://oj.pascal-lab.net/pr ...