提醒1:本文次要解说了Windows下Vim的应用,配置,丑化与应用Vim写C++,Python,MarkDown,R。其余语言的插件很不分明

提醒2:Vim是一款工具,应用Vim是为了放慢您的Coding效率的,不要配置比应用的工夫还长(尽管很好玩)

提醒3:我想把这篇文章写的尽量的长,目标是帮忙更多同学绕过Vim配置中的诸多天坑,请急躁观看,毕竟这要比你用一个星期去配置Vim来的快很多

提醒4:Manjarol来的先读16节

目录

  • 0.为什么要写这篇文章
  • 1.Vim的简介
  • 2.Vim的起源
    • 2.1 Ken Thompson 写了一个行编辑器(Line Editor)
    • 2.2 Bill Joy 写了一个文本编辑器
    • 2.3 Bram Moolenaar 编写了 Vim
  • 3.Vim的下载与装置(退出Vim到环境变量)
  • 4. 意识与关上Vim
  • 5. Vim根本的应用阐明
    • 5.1 用Vim关上文件
    • 5.2 Vim的四种模式
      • 5.2.1Normal Mode
      • 5.2.2 Last line mode模式
      • 5.2.3 Insert模式
      • 5.2.4 Visual模式
    • 5.3 宏录制
  • 6. Vim的配置文件根本应用办法
    • 6.1 第一个Vim配置,行号
    • 6.2 设置快捷键映射
    • 6.3 装置插件管理器
    • 6.4 尝试装置第一个插件
    • 6.5 尝试卸载第一个插件
  • 7. 基于问题解决的配置介绍
    • 7.1 对于gVim
    • 7.2 为关上_vimrc配置快捷键
    • 7.3 为Vim配置默认编码
    • 7.4 为Vim配置代码高亮
    • 7.5 将gVim的语言批改为英文方便使用
    • [7.6[间接写上]向下兼容vi](https://blog.csdn.net/Liukair...
    • 7.7 在可视化下兼容鼠标
    • 7.8 将缩进设置为空格
    • 7.9 缩进配置为4空格
    • 7.10 在空行末显示$
    • 7.11 渲染Tab和空格
    • 7.12 尽可能在滚动的时候留下几行
    • 7.13 开启退格跨行退格
    • 7.14 开启代码折叠
    • [7.15 在三种模式下采纳三种光标[仅gVim]](https://blog.csdn.net/Liukair...
    • 7.16 永远保留命令行
    • 7.17 在从新关上文件后保留光标地位
    • 7.19 主动缩进
    • [7.20 设置字体[仅gVim]](https://blog.csdn.net/Liukair...
    • 7.21 暗藏gVim的四个滚动条
    • 7.21 设置绝对行号
    • 7.22 突出显示选中的字符所在行列
    • 7.23 主动换行
    • 7.24 显示输出的命令(右下角)
    • 7.25 输出命令的时候Tab显示提醒
    • 7.26 智能查找 高亮显示后果
    • 7.27 复制粘贴到剪贴板
    • 7.28 快捷保留 刷新
    • 7.29 设置分屏
    • 7.30 减少删除tabe标签
    • 7.31 插入模式挪动光标
  • 8. 编译程序
  • 9. 在插件介绍之前的筹备
  • 10. 通用插件的介绍
    • 10.1 输入法切换: xkb-switch
    • 10.2 Vim外部的todolist: undotree
    • 10.3 Vim外部的文件树:NERDTreeToggle
    • 10.4 Vim弱小状态栏:Airline
    • 10.5 多语言代码查错:ALE
    • 10.6 代码主动正文:nerdcommenter
    • 10.7 代码彩虹括号
    • 10.8 自定义开始菜单
    • 10.9 全语言代码主动补全
    • 10.10 Vim主动括号补全
    • 10.11 Vim函数整顿
    • 10.12 gVim界面通明
  • 11. 特定语言的插件介绍
    • 11.1 C/C++的插件
      • 11.1.1 主动格式化代码
      • 11.1.2 代码高亮
      • 11.1.3 代码查看ALE
    • 11.2Python的插件
      • 11.2.1 语言反对
      • 11.2.2 代码查看ALE
    • 11.3 LaTeX的插件
    • 11.4 MarkDown的插件
      • 11.4.1 MarkDown预览
      • 11.4.2 MarkDown主动输出表格
    • 11.5 R语言插件
  • 12. 解决ESC
  • 13. Vim 键位图
  • 14. 优良的参考与学习资源
  • 15. 我的Vim配置
  • 16 Vim 在Linux下的配置
    • *

0.为什么要写这篇文章

因为依赖win下的很多软件,不不便间接切换到Linux,然而对于Win下的vim应用阐明与参考太少了,本人摸索了一段时间,斗胆分享一下,还请老哥们指教
以下是我目前的工作环境


1.Vim的简介

Vim是从 vi 倒退进去的一个文本编辑器。代码补完、编译及谬误跳转等不便编程的性能特地丰盛,在程序员中被宽泛应用。他能够让你手不离键盘的实现鼠标的所有操作,同时vim不依赖上下左右方向键

简略的来说, vi 是老式的字处理器,不过性能曾经很齐全了,然而还是有能够提高的中央。 vim 则能够说是程序开发者的一项很好用的工具。

Vim是一个开源我的项目,所以显然Vim是收费的,因为Vim具备诸多小弊病,逐步演变出一些分支软件比方NeoVim,然而可能Bug有点多,而且如果您排除了所有问题失常应用了Vim,换用NeoVim只需把配置文件复制一份到NeoVim的装置目录下即可。同时Vim的原作者也在致力补短板,所以咱们依然建议您学习Vim


2.Vim的起源

以下内容摘自开源中国,不感兴趣能够跳过,然而我认为挺乏味的

我最近无心中发现一个名为Intel HEX的文件格式。据我所知,Intel HEX文件(应用.hex后缀)是通过将二进制文件变为十六进制数据来升高它的不可读性。显著它们由那些编写微控制器程序或者将数据刻录到ROM中的人应用。无论如何,当我首次应用Vim关上一个十六进制文件,我感到震惊。至多对我来说,这种文件格式十分深奥,然而Vim曾经对其一目了然。每行十六进制文件都分成不同区域——Vim曾经先一步为每一个字段都标记了不同的色彩。set ft? 我敬畏地问道。filetype-hex,Vim得意地答复。

Vim无处不在。这么多人都在应用它,像对十六进制文件的反对并不值得诧异。Vim是Mac OS的预装程序,而且在Linux世界广泛应用。它甚至对厌恶它的人来说都很相熟,因为很多热门的命令行工具都默认让用户进入Vim,以至于那些未入门的人会被困到Vim中,这曾经变成了一个热门问题。有一些支流网站,包含Facebook,当你按下j键之后,页面会滚到上面,而当按下k键则会滚到下面——Vim在数字文化中的广泛传播达到了意想不到的水平。

Vim依然很神秘。例如,它不像React,每个人都晓得它是由Facebook开发和保护的,Vim没有明确的作者。只管它是如此的广泛和重要,却没有任何类型的委员会或组织来为Vim做决策。你可能花了几分钟来浏览Vim网站,然而却找不到对于谁创立了Vim或者为什么发明它的无效信息。如果你启动Vim时没有提供文件参数,你会看到Vim的启动信息,说的是Vim是由“Bram Moolenaar等人”开发的。然而没有更多信息。谁是Bram Moolenaar,他的神秘同盟都有谁?

当咱们在发问的时候,兴许更重要的是,为什么退出Vim须要输出:wq?没错,这是一个“写(write)”操作,前面还跟了一个“退出(quit)”操作,然而这并不是一个特地直观的常规。谁来决定当复制文本的时候应该调用“复制命令(yanking)”?为什么:%s/foo/bar/gc是“查找并替换”的缩写?Vim的用法太随便了,看起来没有好好决策,然而它们到底源于何处?

状况往往如此,问题答案源自于古老的计算机构,贝尔实验室。从某种意义上来说,Vim只是一个软件——名为“wq文件编辑器”——的最新版本,它从Unix时代开始曾经继续开发并欠缺。

2.1 Ken Thompson 写了一个行编辑器(Line Editor)

1966年,贝尔实验室骋请了 Ken Thompson。Thompson 刚刚在加州大学伯克利分校取得了电子工程和计算机科学硕士学位。在那里,他应用了一个叫 QED 的文件编辑器,这是为 1965 年至 1966 年间的伯克利分时系统编写的。1Thompson 到达贝尔实验室后所做的第一件事就是为麻省理工学院兼容的分时系统重写了 QED。起初他为 Multics 我的项目编写了另一个版本的 QED。在此过程中,他扩大了程序,以便用户能够搜寻文件中的行并应用正则表达式进行替换。2

Multics 我的项目,跟伯克利分时系统(Berkeley Timesharing System)一样,旨在创立一个商业上可行的分时操作系统,由麻省理工学院、通用电气和贝尔实验室之间合作进行。AT&T 最终认为该我的项目前途堪忧而抉择退出。Thompson 和贝尔实验室的研究员 Dennis Ritchie,过后没有拜访分时系统的权限,失去了这种零碎带来的“交互式计算感”,于是着手创立本人的版本,最终在 1969 年 8 月被称为 Unix 3。过后他的妻子和年少的儿子正在加里福尼亚度假,Thompson 将新零碎的根本组件整合到一起,调配开发操作系统、shell、编辑器、汇编程序的工夫为每周一项。4

编辑器被命名为 ed。它基于 QED,但不是一个齐全的从新实现。Thompson 决定放弃某些 QED 个性。对正则表达式的反对被削减,因而只能了解绝对简略的正则表达式。QED 容许用户通过关上多个缓冲区并同时编辑多个文件,然而 ed 同时只能应用一个缓冲区工作。而且 QED 能够执行一个蕴含命令的缓冲区,而 ed 则不会这样做。这些简化是须要的。Dennis Ritchie 示意,没有 QED 的高级正则表达式并“没有太大的损失”。5

ed 当初是 POSIX 标准的一部分,所以如果你有一个合乎 POSIX 规范的零碎,你能够将它装置到你的计算机上。这值得一试,因为许多 ed 的命令都是明天的 Vim 的一部分。举例来说,为了将缓冲区的内容写入磁盘,你须要应用 w 命令;为了退出编辑器,你须要应用 q 命令。这两个命令能够同时写到同一行 —— 即 wq。与 Vim 类似,ed 是一个模态编辑器;从命令模式进入输出模式,你能够应用插入命令(i),追加命令(a),或者批改命令(c),取决于你要怎么去扭转你的文本。ed 也引入了 s/foo/bar/g 的语法,用来查找和替换,或者“替换”文本。

有这么多的相似之处,你可能认为个别的 Vim 用户应用 ed 也没问题。不过 ed 在其它一些重要方面却一点也不像 Vim。ed 是一个真正的行编辑器。它是在电传打印机的时代编写并宽泛应用的。当 Ken Thompson 和 Dennis Ritchie 在 Unix 上进行编码时,他们看起来是这样的:

ed 不容许你在关上的缓冲区中的其它行之间进行编辑和挪动光标,因为每次对其进行更改时,ed 都须要从新打印整个文件。1969 年的 ed 还没有清空整个屏幕内容的机制,因为那时的屏幕是一张纸,而且所有须要被打印的将会应用墨水打印。如果有必要,你能够应用列表命令(l)通知 ed 打印出一系列的行,但大部分工夫你都在操作你看不到的文字。因而,应用 ed 有点像带着一个不怎么亮的灯在一所光明的房子里试图找到一条门路。你只能一次看到这么多,所以你必须尽力记住一切都在哪里。

这里有一个 ed 会话的例子。我曾经增加了正文(在#号之后的)来解释每一行的目标,如果这些正文被理论输出到了 ed,则不会将它们辨认为正文,而且可能会出错:

`[sinclairtarget 09:49 ~]$ edi                           # Enter input modeHello world!Isn't it a nice day?.                           # Finish input1,2l                        # List lines 1 to 2Hello world!$$2d                          # Delete line 2,l                          # List entire bufferHello world!$Isn't it a nice day?$s/nice/terrible/g           # Substitute globally,lHello world!$Isn't it a terrible day?$w foo.txt                   # Write to foo.txt38                          # (bytes written)q                           # Quit[sinclairtarget 10:50 ~]$ cat foo.txtHello world!Isn't it a terrible day?` *   1*   2*   3*   4*   5*   6*   7*   8*   9*   10*   11*   12*   13*   14*   15*   16*   17*   18*   19*   20*   21*   22*   23

正如你所看到的,ed 并不是一个很方

2.2 Bill Joy 写了一个文本编辑器

ed 对于 Thompson 和 Ritchie 来说曾经足够用了。不过其他人感觉它很难应用,并因其成为 Unix 对老手来说很艰难的一个特地典型例子而出名。6 1975年,一个叫 George Coulouris 的人在伦敦玛丽皇后学院装置的 Unix 零碎上开发了 ed 的一个改进版。Coulouris 利用他在玛丽皇后学院失去的视频显示来编写他的编辑器。Coulouris 的程序容许用户在屏幕上编辑某一行,在这一行上进行码字(想像一下在一行上应用 Vim)。Coulouris 将他的程序称为 em,或者“普通人的编辑器”,这是他在 Thompson 拜访了玛丽皇后学院后受到的启发,据说 Thompson 看到了 Coulouris 构建的程序,而后驳回了它,并说他在编辑的时候不须要看文件的状态。7

1976年,Coulouris 带着 em 到了加州大学伯克利分校,在这里,他在计算机学院度过了一个夏天。这距 Ken Thompson 来到加州大学伯克利分校到贝尔实验室工作曾经整整十年。在加州大学伯克利分校,Coulouris 遇到了 Bill Joy,一个在伯克利软件发行版(BSD)工作的研究生。Coulouris 向 Joy 展现了 em,Joy 从 Coulouris 的源代码开始,开发了一个 ed 的改进版,被称为 ex,意思是“扩大的 ed”。ex 的 1.1 版本与1978年第一版 BSD Unix 捆绑在一起。ex 在很大水平上与 ed 兼容,然而它增加了两个模式:一个“open”模式,它能够进行单行编辑,就像在 em 中一样,还有一个“visual”模式,接管了整个屏幕,并启用了咱们明天习惯的整个文件的实时编辑。便的交互式程序。

对于 1979 年公布的第二个 BSD 版本,引入了一个名叫 vi 的可执行程序,它只能在可视模式下关上 ex。8

ex/vi(以下称为 vi)定义了当初咱们应用 Vim 的大多数规定,这些规定曾经不是 ed 的一部分。Joy 应用的视频终端是 Lear Siegler ADM-3A,它有一个没有光标的键盘。取而代之的是在 h,j,k,和 l 键的中央绘制了一个箭头,这就是 Joy 在 vi 中应用这些键来挪动光标的起因、ADM-3A 键盘上的退出键也是明天咱们能够找到 tab 键的中央,它解释了如何为这样一个难以涉及的键调配了一个与退出模式雷同的操作。命令的前缀冒号“:”也是来自于 vi,在惯例模式下(即运行 ex 后进入的模式)应用冒号“:”作为提醒。这解决了对于 ed 的长期埋怨,已经的 ed 在这种状况下是不会提醒用户的。在可视模式下,保留和退出当初能够输出经典的“:wq”命令。“Yanking”和“puts”标记以及用于设置选项的 set 命令都是原始 vi 的一部分。明天咱们在 Vim 中进行根本的文本编辑应用的性能大部分都是 vi 的性能。

vi 是除了 ed 之外惟一与 BSD Unix 捆绑在一起的文本编辑器。那时,Emacs 须要破费上百美元(在GNU Emacs之前),所以 vi 变得十分风行。然而 vi 是 ed 的间接后嗣,这意味着没有 AT&T 源码许可证就无奈批改源代码。因而激励了一些人去创立 vi 的开源版本。STEVIE(VI爱好者的 ST 编辑器)呈现于 1987 年,Elvis 诞生于 1990 年,nvi 呈现于 1994 年。其中一些克隆的版本减少了额定的性能,如语法高亮和宰割窗口。Elvis 尤其将它的许多性能都纳入到了 Vim 中,因为许多 Elvis 用户都为此做出了致力。

2.3 Bram Moolenaar 编写了 Vim

“Vim”,当初可称为“Vi Improved”(Vi改进版),原来也被称为“Vi Imitation”(Vi模仿版)。与许多其它 vi 克隆版一样,Vim 的初衷是尝试复制 Vi,使其在不反对 Vi 的平台上应用。Bram Moolenaar,一位在荷兰芬洛一家复印公司工作的软件工程师,想要为他的全新 Amiga 2000 提供相似 vi 的货色。Moolenaar 曾经习惯于在他的大学的 Unix 零碎上应用 vi,当初曾经纯熟到“就像在应用他的手指”。10 因而,在 1988 年,应用现有的 vi 克隆版 STEVIE 作为终点,Moolenaar 开始开发 Vim。

Moolenaar 应用 STEVIE,是因为 STEVIE 之前曾呈现在 Fred Fish 磁盘上。Fred Fish 是一名美国程序员每个月抉择 Amiga 平台上最好的开源软件,放到一张软盘上并寄出。任何人都能够申请索取磁盘,而仅仅只须要邮费。STEVIE 的若干个版本在 Fred Fish Disk 上被公布。Moolenaar 应用的版本已在 Fred Fish Disk 256 上公布。11(令人悲观的是,Fred Fish Disk 仿佛与 Freddi Fish 无关)。

Moolenaar 喜爱 STEVIE,然而他很快发现短少了许多 vi 命令。12 因而,对于 Vim 的第一个版本,Moolenaar 将 vi 兼容性作为他的首要任务。其他人编写了一系列 vi 宏,当通过正确的 vi 兼容编辑器运行时,能够解决随机生成的迷宫。Moolenaar 可能让这些宏在 Vim 中运行。1991年,Vim 首次公布于 Fred Fish Disk 591 中,被称为“Vi Imitation”。13 Moolenaar 增加了一些性能(包含多级吊销和编译谬误的“quickfix”模式),这意味着 Vim 超过了 vi。然而 Vim 在 1993 年通过 FTP 公布 Vim 2.0 之前,始终放弃着“Vi Imitation”的名字。

在各种互联网合作者的偶然帮忙下,Moolenaar 为 Vim 减少了一些稳固的性能。Vim 2.0 引入了对 wrap 选项的反对以及通过长行文本的程度滚动。Vim 3.0 减少了对宰割窗口和缓冲区的反对,这一性能的灵感来自 vi,克隆了 nvi。Vim 当初还将每个缓冲区保留到交换文件中,以便编辑后的文本能够在解体中存活。Vimscript 首次亮相于 Vim 5.0,同时反对语法高亮。始终以来,Vim 的受欢迎水平都在增长。它被移植到 MS-DOS,Windows,Mac,甚至 Unix,在以上操作系统与原始的 vi 竞争。

2006年,Vim 被《Linux Journal》读者选为最受欢迎的编辑工具。14明天,依据 Stack Overflow 的 2018 年开发者考察,Vim 是最受欢迎的文本模式(即终端模拟器)编辑器,25.8% 的软件开发者应用它(和 40% 的系统管理员/DevOps 工程师)。15有一段时间,在20世纪80年代前期和整个20世纪90年代,程序员发动了“编辑器和平”,使得 Emacs 用户与 vi(以及最终的Vim)用户进行了反抗。尽管 Emacs 必定还会持续倒退,但有些人认为编辑大战曾经完结,Vim 赢了。162018 Stack Overflow 开发者考察显示这是真的;只有 4.1% 的受访者应用过 Emacs。

Vim是如何变得如此胜利的?显然人们喜爱Vim所提供的性能。但我认为,Vim背地的悠久历史表明它领有比其功能集更多的劣势。Vim的代码库能够追溯到1988年,过后Moolenaar开始致力于此。另一方面,“wq文本编辑器” - 一个对于Unix格调的文本编辑器应该如何工作的更宽泛视角 - 能够追溯到半个世纪之前。“wq文本编辑器”有一些不同的具体表达方式,但局部归功于Bill Joy和Bram Moolenaar对后向兼容性的特地关注,随着工夫的推移逐步积攒了好的想法。从这个意义上说,“wq文本编辑器”是运行工夫最长、最胜利的开源我的项目之一,享受了计算机世界一些最平凡的思想家的奉献。我不认为“初创公司 - 摈弃所有先例 - 并发明 - 破坏性 - 全新-软件”的倒退办法必然是好事,但Vim揭示世人:合作和增量办法也能够产生奇观。


3.Vim的下载与装置(退出Vim到环境变量)

请留神这里是第一个天坑
如果您在Vim官网的下载页面下载Vim for Windows,您大概率会下载到Vim32位版或者Vim 32与64均兼容版,如果下载的是这两个,您装置的时候会默认装置Vim32位版。这仿佛不是问题,然而很多Vim插件是须要Python反对的,或者须要本地编译,如果您的Vim是32位的,64位Python是不会被正确辨认并调用的。这会导致你必须装置很多python的版本,并且默认的必须是32位的(如果你默认的python也是32位的当我没说)
所以我举荐你到这里下载Vim64位安装包Vim-wim32-installer 我的项目-Github 尽管这里写的是32,然而是有64位的安装包的,同时这是Vim官网的我的项目,请放心使用
关上链接之后,在右侧找到并点击Releases,而后从上到下找到这样的一个链接

点击:gvim_X.X.XXXX_x64.exe 64-bit installer,下载,祝贺你下载到了一个纯64位的Vim,同时在你装置的时候您也会看到写有(x64)

之后的装置过程就简略多了,依照Vim的默认配置装置即可,与其余Windows利用一样只有始终下一步即可,我不建议您批改装置门路1. Vim不大,不会占用您C盘很多空间(全副装置仅44MB) 2. 与大多数人的配置保持一致十分不便您询问与解决问题

把Vim的装置门路退出环境变量(如果您不理解如何退出环境变量请自行百度,比较简单的一个操作) 尝试Win+R->cmd->vim试试是否退出环境变量胜利,如果胜利关上请按窗口右上角的敞开按钮敞开cmd

至此,您装置好了一个64位的Vim,这会为您摸索Vim节俭一天的配置Python与重装Vim的工夫


  1. 意识与关上Vim

============

装置完结后,您会发现您的开始菜单中有好多Vim,而且名字都不一样

他们的区别如下

  1. 有g和没有g
    gVim 是在windows下的Gui图形用户界面的的 vim (GUI Vim),反对windows的一些快捷方式,反对鼠标操作
    vim 是在windows下的相似linux vi 编辑的界面,只能用键盘操作
    vim的操作指令同时实用于gVim
  2. Vim, Vim Diff, Vim Easy, Vim Read-only
    Diff 是用来比照两个文件内容用的,间接关上挺没用的,不过间接拖2个文件到快捷方式上倒是可行;
    Easy启动的时候是insert模式,适宜一般windows用户的习惯;
    Read-Only的用处:比方用read-only关上曾经用vim关上过的文件,就不会提醒让人焦躁的.swp文件存在的问题;

在此,您只需晓得,咱们临时会应用Vim来入门,最初您会应用gVim编程,这是因为gVim在没有配置的时候比Vim还不不便操作

您能够关上Vim了,的确十分丑,仿佛不是用来写代码的。如果您开启了声音,大概率的您会发现按动绝大多数按键,windows都会收回报错的声音(一个噔~),而且什么都输出不进去…

试着按一下键盘的i键,你会发现您能够输出货色了,然而仿佛只能输出,如何保留呢?如何敞开vim呢?您会发现除非间接按右上角的×,您甚至无奈优雅的退出Vim,那就按右上角的×吧,连文件都没有保留


  1. Vim根本的应用阐明

==============

在这个阶段,您须要在Vim上做一些实际,然而可能大部分状况下都会应用右上角的×来敞开Vim,这一阶段的内容不须要保留,就这样放肆的强制敞开Vim吧,同时Vim的很多按键形式与其余编辑器不同,尝试去适应他,不要排挤,置信在您实现了本教程的配置,您的肌肉记忆就会造成,加油

5.1 用Vim关上文件

在cmd下输出vim + 门路即可,同时间接将文件拖动到快捷方式图标上也能够

5.2 Vim的四种模式

基本上 vim 共分为四种模式,别离是一般模式(Normal mode)、底行模式(Last line mode)、输出模式(Insert mode)和可视化模式(Visual mode)此处仿佛与其余教程不一样,然而没有问题,只是分类不同而已。 四种模式的切换与作用如下

可视化系列模式

主动进入

按键i

按键ESC

按键:

按键ESC

v系列快捷键

按键ESC

小写v

大写V

CtrlV

一般可视化模式

可视化模式

可视化行模式

可视化块模式

启动

Normal模式

Insert模式

行末模式

5.2.1Normal Mode

这个模式个别用于浏览代码与进入底行模式输出命令,应用快捷键修改文章,这里仅仅介绍大量按键并解说快捷键命令的组合原理,

快捷键

成果

h 或 向左箭头键(←)

光标向左挪动一个字符

j 或 向下箭头键(↓)

光标向下挪动一个字符

k 或 向上箭头键(↑)

光标向上挪动一个字符

l 或 向右箭头键(→)

光标向右挪动一个字符

用下面的按键你就能够高低浏览代码了,然而不倡议应用方向键
Vim中还有一些键位是进行光标挪动

快捷键       

成果

[Ctrl] + [f]

屏幕『向下』挪动一页,相当于 [Page Down]按键 (罕用)

[Ctrl] + [b]

屏幕『向上』挪动一页,相当于 [Page Up] 按键 (罕用)

[Ctrl] + [d]

屏幕『向下』挪动半页

[Ctrl] + [u]

屏幕『向上』挪动半页

+

光标挪动到非空格符的下一行

-

光标挪动到非空格符的上一行

n < space >

那个 n 示意『数字』,例如 20 。按下数字后再按空格键,光标会向右挪动这一行的 n 个字符。例如 20< space > 则光标会向前面挪动 20 个字符间隔。

M

光标挪动到这个屏幕的地方那一行的第一个字符

L

光标挪动到这个屏幕的最下方那一行的第一个字符

G

挪动到这个档案的最初一行(罕用)

nG

n 为数字。挪动到这个档案的第 n 行。例如 20G 则会挪动到这个档案的第 20 行(可配合 :set nu)

gg

挪动到这个档案的第一行,相当于 1G 啊! (罕用)

n< Enter >

n 为数字。光标向下挪动 n 行(罕用)

以上是光标挪动命令,而后是文档查问替换命令

命令

作用

/word

向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜查 vbird 这个字符串,就输出 / vbird 即可! (罕用)

?word

向光标之上寻找一个字符串名称为 word 的字符串。

n

这个 n 是英文按键。代表反复前一个搜查的动作。举例来说, 如果刚刚咱们执行 /vbird 去向下搜查 vbird 这个字符串,则按下 n 后,会向下持续搜查下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上持续搜查名称为 vbird 的字符串!

N

这个 N 是英文按键。与 n 刚好相同,为『反向』进行前一个搜查动作。 例如 /vbird 后,按下 N 则示意『向上』搜查 vbird 。

应用 /word 配合 n 及 N 是十分有帮忙的!能够让你反复的找到一些你搜查的关键词!

:n1,n2s/word1/word2/g

n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜查 vbird 并取代为 VBIRD 则: 『:100,200s/vbird/VBIRD/g』。(罕用)

:1,$s/word1/word2/g:%s/word1/word2/g

从第一行到最初一行寻找 word1 字符串,并将该字符串取代为 word2 !(罕用)

:1,$s/word1/word2/gc:%s/word1/word2/gc

从第一行到最初一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提醒字符给用户确认 (confirm) 是否须要取代!(罕用)

最初是最罕用的增删改命令

快捷键

作用

x, X

在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符( 相当于 [backspace] 亦即是退格键) (罕用)

nx

n 为数字,间断向后删除 n 个字符。举例来说,我要间断删除 10 个字符, 『10x』。

dd

删除游标所在的那一整行(罕用)

ndd

n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (罕用)

d1G

删除光标所在到第一行的所有数据

dG

删除光标所在到最初一行的所有数据

d$

删除游标所在处,到该行的最初一个字符

d0

那个是数字的 0 ,删除游标所在处,到该行的最后面一个字符

yy

复制游标所在的那一行(罕用)

nyy

n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(罕用)

y1G

复制游标所在行到第一行的所有数据

yG

复制游标所在行到最初一行的所有数据

y0

复制光标所在的那个字符到该行行首的所有数据

y$

复制光标所在的那个字符到该行行尾的所有数据

p, P

p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且曾经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在本来的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么本来的第 20 行会被推到变成 30 行。 (罕用)

J

将光标所在行与下一行的数据联合成同一行

c

反复删除多个数据,例如向下删除 10 行,[ 10cj ]

u

还原前一个动作。(罕用)

[Ctrl]+r

重做上一个动作。(罕用)

.

不要狐疑!这就是小数点!意思是反复前一个动作的意思。 如果你想要反复删除、反复贴上等等动作,按下小数点『.』就好了! (罕用)

以上的增删改查命令有肯定的命名法则,比方y是复制,而后复制什么没说,你用yw就是复制一个单词(word),反复写一个命令就是对这个对行操作,例如yy就是复制一行,还能够y+数字,例如y3就是复制三行,还能够与其余命令组合比方yG就是从以后光标地位复制到文档最初,这样组合才能够让咱们高效的应用Vim

5.2.2 Last line mode模式

我始终感觉这就是Vim的Normal模式,后果他人都感觉这是一个新模式,那就当他是个新模式吧
你会发现在没有配置Vim的其余性能的时候,Vim的上面会写有一个Normal等,然而仿佛上面还有一行,这一行是让你输出命令的,想要输出命令必须应用或者`:`触发,是用来查找内容的,严格说属于Normal模式,所以其实只有:结尾的命令

命令

作用

:w

将编辑的数据写入硬盘档案中(罕用)

:w!

若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限无关啊!

:q

来到 vi (罕用)

:q!

若曾批改过档案,又不想贮存,应用 ! 为强制来到不贮存档案。

留神一下啊,那个惊叹号 (!) 在 vi 当中,经常具备『强制』的意思~

:wq

贮存后来到,若为 :wq! 则为强制贮存后来到 (罕用)

:w [filename]

将编辑的数据贮存成另一个档案(相似另存新档)

:r [filename]

在编辑的数据中,读入另一个档案的数据。亦行将 『filename』 这个档案内容加到游标所在行前面

:n1,n2 w [filename]

将 n1 到 n2 的内容贮存成 filename 这个档案。

:! command

临时来到 vi 到指令行模式下执行 command 的显示后果!例如 『:! ls /home』即可在 vi 当中观察 /home 底下以 ls 输入的档案信息!

还有很多,然而都是非凡的命令,或者某一个插件特有的,这里不做介绍

5.2.3 Insert模式

插入模式是让你失常写代码的,留神的是,插入模式下hjkl的上下左右切换是生效的,能够用方向键,然而不倡议,还是退出编辑模式在normal下改光标不便,进入插入模式的快捷键最罕用的是i,还有如下的也能够

快捷键

作用

i, I

进入输出模式(Insert mode): i 为『从目前光标所在处输出』, I 为『在目前所在行的第一个非空格符处开始输出』。 (罕用)

a, A

进入输出模式(Insert mode): a 为『从目前光标所在的下一个字符处开始输出』, A 为『从光标所在行的最初一个字符处开始输出』。(罕用)

o, O

进入输出模式(Insert mode): 这是英文字母 o 的大小写。o 为『在目前光标所在的下一行处输出新的一行』; O 为在目前光标所在处的上一行输出新的一行!(罕用)

r, R

进入取代模式(Replace mode): r 只会取代光标所在的那一个字符一次;R会始终取代光标所在的文字,直到按下 ESC 为止;(罕用)

这一部分没什么好说的,因为没有快捷键(否则你打着打着代码就触发了什么快捷键)

5.2.4 Visual模式

可视化模式在很多文献中都没有介绍,然而是一个十分好用的模式,在这个模式下你能够用鼠标抉择内容要选取一段文本,首先将光标移到段首,在一般模式下按 v 进入可视模式,而后把光标移到段末。 须要留神,光标所在字符是蕴含在选区中的

  • v 进入字符可视化模式
  • V 进入行可视化模式
  • Ctrl+v 进入块可视化模式
    块抉择在表格中删除指定列十分有用
    用 v 命令进入的字符可视化模式(Characterwise visual mode)。文本抉择是以字符为单位的。
    用 V 命令进入的行可视化模式(Linewise visual mode)。文本抉择是以行为单位的。
    用 ctrl-V 进入的块可视化模式(Blockwise visual mode)。能够抉择一个矩形内的文本。

应用鼠标或者hjkl即可选中字符/行/块,而后能够y,x…
更有用的是对块批量操作,例如批量正文能够这么写
批量正文:
Ctrl + v 进入块抉择模式,而后挪动光标选中你要正文的行,再按大写的 I 进入行首插入模式输出正文符号如 // 或 #,输出结束之后,按两下 ESC,Vim 会主动将你选中的所有行首都加上正文,保留退出实现正文。
勾销正文:
Ctrl + v 进入块抉择模式,选中你要删除的行首的正文符号,留神 // 要选中两个,选好之后按 d 即可删除正文,ESC 保留退出
还能够在抉择文字后输出:而后把你在平时这么用的就怎么写,留神按:会多出一些货色不要管他,例如

`:A //这是一堆正文` *   1

而后Vim会依据你所写,先对每一样在Normal模式下应用A把光标挪动到该行行尾,而后进入Insert模式输出//这是一堆正文对每一行都操作完结之后就会主动退出到Normal模式

具体的这个模式如何应用见Vim可视化入门

5.3 宏录制

不怎么用,本人查吧


  1. Vim的配置文件根本应用办法

==================

Vim不像其余的IDE会有一个图形化的配置界面,你须要将你须要的配置写到一个配置文件外面,Vim在启动的时候会读取这个文件,而后依据文件须要去配置Vim
如果你在百度搜寻Vim配置文件相干的内容,只会失去是一个叫做.vimrc的文件,然而就算全盘搜寻也找不到他,为啥呢,.vimrc是Linux下的文件,win下的配置文件是_vimrc,于是你会发现在Vim装置目录和C://User/你的用户名下还有一个,咱们应用本人用户名下的,如果没有的话就本人新建一个,这个不是因为你的Vim没装置,他就是没有

6.1 第一个Vim配置,行号

找到或者新建这个文件,右键选中用Vim关上,咱们就关上了一个空的_vimrc文件,试着往里面写下set number,这个配置的意思是主动为增加行号,这样你写代码就能够在右边看到行号了
按动ZZ(大写的)保留文件,然而行号并没有进去,这是因为咱们没有"刷新配置文件",在Normal下输出命令:source $MYVIMRC而后你就能够看到行号了,至此你胜利配置了第一个Vimrc

6.2 设置快捷键映射

然而这仿佛比拟麻烦,每次批改之后还要输出那么长的刷新保留,如果有个快捷键帮忙咱们就好了,我设置的快捷键是大写的R,也就是Shift+R,那么咱们应该如何设置呢?首先要想好本人要设置的快捷键,不能与之前的快捷键相重合,还有快捷键的失效范畴,是只有在Normal模式下失效还是在四个模式下都失效。例如我将大写R作为快捷键最好只在Normal下操作,否则在Insert模式下我输出大写的R就没法输出了,然而例如F5这样的快捷键从来不会与其余模式抵触咱们就能够设置为全局的
快捷键映射能够将一个组合键映射到一个命令,一个其余的组合键或者其余语法为

`前缀+map 快捷键 映射后果` *   1

这里的前缀限定了map的作用范畴是那几个模式,不写前缀默认是前缀n

  • nmap:只有在Normal模式下失效
  • vmap:只有在Visual模式下失效
  • imap:只有在Insert模式下失效
  • cmap:只有在行底命令的模式下失效
  • Xnoremap:X是后面的n/v/i/c,nore示意非递归的例如a被映射为了b,b被映射为了c,那么如果是递归的的话a就映射为了c

对于被映射与要映射的动作按键遵循以下写法

  • 一般按键就间接写
  • Alt组合键写成<A-X>,例如Alt+S就是<A-S>
  • Ctrl组合键写成<C-X>,例如Ctrl+S就是<C-S>
  • FX写成<FX>,例如<F5>就是F5
  • 四个方向键写成<方向>,例如<LEFT>就是方向左键
  • ESC就写成<ESC>
  • Leader键就写成
  • 回车写成<CR>

对于leader键:
Vim预置有很多快捷键,再加上各类插件的快捷键,大量快捷键呈现在单层空间中不免引起抵触。为缓解该问题,而引入了前缀键<leader>。藉由前缀键, 则能够衍生出更多的快捷键命名空间(namespace)。例如将r键配置为<leader>r<leader><leader>r等多个快捷键。前缀键默认为``
然而在我的键盘上`太远了,于是我就把leader换成了空格,只须要如下的命令let mapleader = "<space>"`写在结尾就实现了替换

针对下面的问题咱们就能够把刷新配置文件映射成S,配置如下

`map R :source $MYVIMRC<CR>` *   1

6.3 装置插件管理器

Vim好用就在于有大量插件供咱们应用,这样咱们能够本人配置本人喜爱的Vim,这里咱们介绍插件管理器Vim-Pluig,同时咱们个别的插件都是在GitHub上托管的,所以咱们个别也是在GitHub上找插件,Vim的插件十分好辨认,他应用的语言大多会写Vim script

  1. 下载Git
  2. 关上插件管理器所在仓库
  3. 下载如下文件并放入Vim的装置目录下的autoload


    这样咱们就实现了插件管理器的装置
    之后咱们开始尝试装置第一个插件
    首先在vimrc中写下这样三行,他能够帮忙插件管理器辨认你要装那些插件
`call plug#begin('~/.vim/plugged')call plug#end()` *   1*   2*   3

当前只有是须要装置的插件咱们只须要把地址写在外面就能够间接装置了

6.4 尝试装置第一个插件

咱们先来尝试装置一个主题插件,就装置我自用的主题snazzy吧。
首先咱们找到这个主题的GitHub库
那如何通知插件管理器我要装置这个插件,这个插件的安装包在哪里呢?
刚刚那个库的地址是
https://github.com/connorholy...
咱们发现https://github.com/是GitHub的前缀,而插件管理器默认库在GitHub所以只有通知插件connorholyday/vim-snazzy就能够了,于是咱们只须要在哪两行代两头写上

`Plug 'connorholyday/vim-snazzy'` *   1

即为

`call plug#begin('~/.vim/plugged')Plug 'connorholyday/vim-snazzy'call plug#end()` *   1*   2*   3

完事,咱们还要让插件管理器去装置它,只需保留并刷新配置文件,输出命令:PlugInstall回车,等他跑完进度条即可
至此咱们实现了第一个插件的装置
然而仿佛这个主题不能用,这么办呢,咱们要通知Vim我要利用这个主题,只有在配置文件最初写colorscheme snazzy,保留刷新配置文件即可,如果不行试试gVim

6.5 尝试卸载第一个插件

如果哪一天插件不想要了,能够卸载,办法很简略,要么删除插件装置的哪一行,要么把他正文掉(vim下的正文是"),而后保留刷新配置文件,输出命令:PlugClean
至此我介绍了Vim配置文件中常见的几种配置命令


  1. 基于问题解决的配置介绍

===============

在这一节中我将介绍Vim的罕用插件的应用与Vim罕用概念性能的介绍,然而不包含对于编程语言的适配,从当初开始请应用gVim代替Vim

7.1 对于gVim

原本Vim用的好好的为什么要换gVim呢,因为vim是基于cmd/Powershell 对于背景色等等很多方面反对很差,所以开发了gVim
关上gVim,然而比Vim还丑,将就看看,咱们开始基于他丑化与批改,不要选下面的菜单与工具,比拟麻烦
一下没有阐明就是王配置文件间接写就好了

7.2 为关上_vimrc配置快捷键

配置vim每次都要关上_vimrc,不如设置个快捷键让他关上

`map rc : e $HOME_vimrc<CR>` *   1

很简略了,就是在Normal模式下按下rc,而后就关上了配置文件

7.3 为Vim配置默认编码

将编码设置为UTF-8,不便当前咱们中文正文的Coding

`set encoding=utf-8` *   1

7.4 为Vim配置代码高亮

最奢侈的高亮

`syntax on` *   1

你会发现如同是有,然而不全,比方c++的string,这个到前面给C++配置的时候说

7.5 将gVim的语言批改为英文方便使用

`language C` *   1

7.6[间接写上]向下兼容vi

`set nocompatiblefiletype onfiletype indent onfiletype plugin on` *   1*   2*   3*   4

7.7 在可视化下兼容鼠标

`set mouse=a` *   1

7.8 将缩进设置为空格

`let &t_ut=''set expandtab` *   1*   2

7.9 缩进配置为4空格

`set tabstop=4                set shiftwidth=4set softtabstop=4` *   1*   2*   3

7.10 在空行末显示$

win下仿佛没有用

`set list` *   1

7.11 渲染Tab和空格

`set listchars=tab:▸ ,trail:▫` *   1

7.12 尽可能在滚动的时候留下几行

就是往下滚的时候除非到行尾,保障以后选中行至多是倒数第五行,向上同理

`set scrolloff=5` *   1

7.13 开启退格跨行退格

`set backspace=indent,eol,start` *   1

7.14 开启代码折叠

`set foldmethod=indentset foldlevel=99` *   1*   2

7.15 在三种模式下采纳三种光标[仅gVim]

`let &t_SI = "<Esc>]50;CursorShape=1x7"let &t_SR = "<Esc>]50;CursorShape=2x7"let &t_EI = "<Esc>]50;CursorShape=0x7"` *   1*   2*   3

7.16 永远保留命令行

`set laststatus=2` *   1

7.17 在从新关上文件后保留光标地位

Win下仿佛不可?

`au BufReadPost * if line("''"") > 1 && line("'"") <= line("$") | exe "normal! g'"" | endif.` *   1

7.19 主动缩进

`set autoindent` *   1

7.20 设置字体[仅gVim]

`set guifont=Powerline_Consolas:h12:cANSI:qDRAFT` *   1

意思是用Powerline Consolas字体,字号12
对于为什么肯定用这个字体,如何下载见airline插件一节

7.21 暗藏gVim的四个滚动条

暗藏gVim的四个滚动条如果被激活了F2再次敞开

`map <silent> <F2> :if &guioptions =~# 'T' <Bar>        set guioptions-=T <Bar>        set guioptions-=m <bar>    else <Bar>        set guioptions =T <Bar>        set guioptions =m <Bar>    endif<CR>set guioptions-=m   "Hide Menuset guioptions-=T   "Hide Tool-Barset guioptions-=r   "hide right scrollset guioptions-=b   "hide buttom scollset guioptions-=L   "hide left scroll` *   1*   2*   3*   4*   5*   6*   7*   8*   9*   10*   11*   12

7.21 设置绝对行号

`set number            set relativenumber` *   1*   2

7.22 突出显示选中的字符所在行列

`set cursorline        set cursorcolumn` *   1*   2

7.23 主动换行

`set wrap` *   1

7.24 显示输出的命令(右下角)

`set showcmd` *   1

7.25 输出命令的时候Tab显示提醒

`set wildmenu` *   1

7.26 智能查找 高亮显示后果

`set hlsearch    exec "nohlsearch"    set incsearch    set ignorecase        set smartcase` *   1*   2*   3*   4*   5

7.27 复制粘贴到剪贴板

留神的是咱们的y和p只能在vim外部复制粘贴,想要复制粘贴到零碎剪贴板须要用另一个命令,我把他换为<leader>+y,而后与y应用无异

`vnoremap <Leader>y "+ynmap <Leader>p "+p` *   1*   2

7.28 快捷保留 刷新

这里用S保留然而要申明不适用于s

`map S : w<CR>map s <nop>map Q :q<CR>map R :source $MYVIMRC<CR>noremap <LEADER><CR>  :nohlsearch<CR>` *   1*   2*   3*   4*   5

7.29 设置分屏

Vim下能够将窗口分为很多局部不便多代码同时调试,能够向上左下右扩大,然而命令有点长,咱们间接写快捷键,sp+h/j/k/l就是别离向四个方向扩大

`map spl :set splitright<CR>:vsplit<CR>map sph :set nosplitright<CR>:vsplit<CR>map spj :set splitbelow<CR>:split<CR>map spk :set nosplitbelow<CR>:split<CR>` *   1*   2*   3*   4

而后咱们须要将光标在多个窗口间挪动,设置快捷键,Alt+h/j/k/l是向四个方向挪动光标

`map <A-h> <C-w>hmap <A-j> <C-w>jmap <A-k> <C-w>kmap <A-l> <C-w>l` *   1*   2*   3*   4

调整所在窗口的大小,Alt++/_是程度+/-,Alt+-/=是垂直的,本人看下在键盘上的地位就晓得了

`map <A-=> :vertical resize+5 <CR> map <A--> :vertical resize-5 <CR> map <A-+> :resize+5 <CR> map <A-_> :resize-5 <CR>` *   1*   2*   3*   4

转置窗口,左右边上下,高低变左右

`map sv <C-w>t<c-W>Hmap sv <C-w>t<c-W>K` *   1*   2

7.30 减少删除tabe标签

Tabe是Vim中相当于浏览器的tab一样的货色
别离是减少_2,切换_2,挪动*2

`map tu :tabe<CR>map tc :tabc<CR>map tp :-tabnext<CR>map tn :+tabnext<CR>map tmn :-tabmove<CR>map tmi :+tabmove<CR>` *   1*   2*   3*   4*   5*   6

7.31 插入模式挪动光标

`inoremap <C-l> <Right>` *   1

  1. 编译程序

========

Vim不会自动识别并调用编译器的,所以咱们要本人写一个小函数帮忙咱们调用编译器并编译
我不分明Vim的语言语法,反正看了看他人的照猫画虎写的
F9会自动识别一部分语言并运行,胜利会返回运行胜利,否则给出错误信息。反对

  • C/C++(间接运行gcc/g++)
  • python (间接运行)
  • R (Rscript运行,不过失常应用不要用这个)
  • Markdown (须要插件)
  • vbs (间接运行)
  • LaTeX (我忘了这么写的了)

F10是用于C/C++调试的

`map  <F9>  :w<CR>:call Run()<CR>imap <F9>  <ESC>:w<CR>:call Run()<CR>map  <F10> :w<CR>:call Debug()<CR>imap <F10> <ESC>:w<CR>:call Debug()<CR>func!  Debug()    if expand("%:e") == "c" || expand("%:e") == "cc" || expand("%:e") == "cxx" || expand("%:e") == "cpp"        exe ":setlocal makeprg=".'g++ % -o %< -gstabs+'        echohl WarningMsg | echo " compiling..."        silent make        exe ":!gdb %<"        redraw!        echohl WarningMsg | echo " Debug finish! :-)"    else        redraw!        echo "Language not support! :-("    endifendfuncfunc! Run()    if expand("%:e") == "py"        ! Python -u "%<.py"        redraw!        echohl WarningMsg | echo " Running finish! :-)"    elseif expand("%:e") == "c" || expand("%:e") == "cc" || expand("%:e") == "cxx" || expand("%:e") == "cpp"        echo " compiling..."        :! g++ "%" -o "%<" && "%<.exe"        redraw!        echohl WarningMsg | echo " Running finish! :-)"    elseif expand("%:e") == "r"        exe ":! Rscript %"        redraw!        echohl WarningMsg | echo " Running finish! :-)"    elseif expand("%:e") == "vbs"        exe ":! %"        redraw!        echohl WarningMsg | echo " Running finish! :-)"        redraw!        echohl WarningMsg | echo " Running finish! :-)"    elseif expand("%:e") == "md"        :MarkdownPreview        redraw!        echohl WarningMsg | echo " Running on Chrome! :-)"    elseif expand("%:e") == "tex"        "<localleader>ll        ll        ":vimtex-compile    else        redraw!        echo "Language not support! :-("    endifendfunction` *   1*   2*   3*   4*   5*   6*   7*   8*   9*   10*   11*   12*   13*   14*   15*   16*   17*   18*   19*   20*   21*   22*   23*   24*   25*   26*   27*   28*   29*   30*   31*   32*   33*   34*   35*   36*   37*   38*   39*   40*   41*   42*   43*   44*   45*   46*   47*   48*   49*   50*   51*   52*   53

  1. 在插件介绍之前的筹备

==============

咱们须要一个3.6+的64bit的Python并退出环境变量(不做介绍)
留神的是肯定是要64位,在退出环境变量之后肯定把这个环境变量放在最后面,如图

起因是当你在cmd下输出python的时候,cmd会将环境变量从上到下检索python.exe,如果放在前面会导致系统先搜寻了其余门路,而Microsoft Store中也有一个python,如果Microsoft Store的门路在python后面就会关上store让你装置那个利用。
然而,如果你有多个python,例如要应用python2.X,或者必须应用python3.5作为默认的py怎么办呢?
只须要手动为python指定门路,然而同时环境变量还是要加的,在_vimrc中退出

`let &pythonthreedll='C:Program Files (x86)Python36-32python36.dll'let &pythonthreehome='C:Program Files (x86)Python36-32'` *   1*   2

门路本人改,于是你的最下面就能够写你本人用的python了
而后咱们在vim中输出命令

`:echo has(python3)` *   1

看到1就好了
再输出

`:python3 print("1“)` *   1

看到1阐明胜利调用
这样你的python就弄好了,如果有显示0或者报错的倡议也应用这个指定

`let &pythonthreedll='C:Program Files (x86)Python36-32python36.dll'let &pythonthreehome='C:Program Files (x86)Python36-32'` *   1*   2

还是不行卸载vim和py重装


  1. 通用插件的介绍

============

10.1 输入法切换: xkb-switch

有的时候咱们用中文写了正文当前发现换到Normal之后还是默认中文,而后按:就是中文的/变成,这会导致响起十分吵的报错声音,这个xkb-switch会在你从normal切换到insert之后记住你在normal下的输出语言,就算insert下是中文,切换到normal之后就变成了英文,切换到insert就有主动改为中文输入法
装置办法:
装置这两个插件

`Plug 'lyokha/vim-xkbswitch'                 "neovim notsupportPlug 'DeXP/xkb-switch-win'                  "neoivm norsupport` *   1*   2

在此处下载dll文件libxkbswitch64.dll
而后复制进vim.exe同目录下
_vimrc中写下

`let g:XkbSwitchEnabled     = 1let g:XkbSwitchIMappings   = ['cn']let g:XkbSwitchIMappingsTr = {'cn': {'<': '', '>': ''}}` *   1*   2*   3

10.2 Vim外部的todolist: undotree

装置插件

`Plug 'mbbill/undotree'` *   1

配置_vimrc快捷键

`map <F5> :UndotreeToggle<CR>` *   1

10.3 Vim外部的文件树:NERDTreeToggle

仿佛有点老了,有一个更好的,然而我老是装不上
装置插件

`Plug 'preservim/nerdtree'` *   1

配置_vimrc快捷键

`map ff :NERDTreeToggle<CR>` *   1

10.4 Vim弱小状态栏:Airline

Vim上面的状态显示的确有点捞,这个能够加强,然而会拖慢vim启动0.1s

装置插件

`Plug 'vim-airline/vim-airline'Plug 'vim-airline/vim-airline-themes'` *   1*   2

_vimrc配置写入

`"set ambiwidth=double                    " 设置为双字宽显示,否则无奈残缺显示如:☆let g:airline_theme='bubblegum'        "Airline主题let g:airline_powerline_fonts = 1" 开启tablinelet g:airline#extensions#tabline#enabled = 1      "tabline中以后buffer两端的分隔字符let g:airline#extensions#tabline#left_sep = ' '   "tabline中未激活buffer两端的分隔字符let g:airline#extensions#tabline#left_alt_sep = '|'      "tabline中buffer显示编号let g:airline#extensions#tabline#buffer_nr_show = 1      " 映射切换buffer的键位nnoremap [b :bp<CR>nnoremap ]b :bn<CR>` *   1*   2*   3*   4*   5*   6*   7*   8*   9*   10*   11

会发现仿佛和他人的不一样,有乱码,有空白,这是因为字体不兼容,装置powerline字体即可,装置办法如下:
下载powerline打过补丁的字体,下载字体后抉择所有字体右键,点击装置。
而后_vimrc写下,h12能够本人改字号如h15

`set guifont=Powerline_Consolas:h12:cANSI:qDRAFT` *   1

airline还能够与其余插件搭配在期中显示其余内容,例如ALE

10.5 多语言代码查错:ALE

这个不是很好装,尤其是C++,须要gcc等
装置插件

`Plug 'dense-analysis/ale'` *   1

_vimrc写入,那几个emoji是自定义的
❌换成你喜爱谬误标记,用我的也行
????换成你喜爱正告标记,用我的也行
⚡换成你喜爱正告标记,用我的也行

`"始终开启标记列let g:ale_sign_column_always = 1let g:ale_set_highlights = 0"自定义error和warning图标let g:ale_sign_error = '❌'let g:ale_sign_warning = '????'"在vim自带的状态栏中整合alelet g:ale_statusline_format = ['✗ %d', '⚡ %d', '✔ OK']"显示Linter名称,出错或正告等相干信息let g:ale_echo_msg_error_str = 'E'let g:ale_echo_msg_warning_str = 'W'let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'"一般模式下,sp返回上一个谬误或正告,sn返回下一个谬误或正告nmap sp <Plug>(ale_previous_wrap)nmap sn <Plug>(ale_next_wrap)"<Leader>s触发/敞开语法查看nmap <Leader>s :ALEToggle<CR>"<Leader>d查看谬误或正告的详细信息nmap <Leader>d :ALEDetail<CR>"set statusline=%F%m%r%h%w [FORMAT=%{&ff}] [TYPE=%Y] [POS=%l,%v][%p%%] %{strftime("%d/%m/%y - %H:%M")} %{ALEGetStatusLine()}"cpp NOT C++let g:ale_linters = {   'cpp': ['gcc'],   'c': ['gcc'],   'python': ['pylint'],}` *   1*   2*   3*   4*   5*   6*   7*   8*   9*   10*   11*   12*   13*   14*   15*   16*   17*   18*   19*   20*   21*   22*   23*   24*   25*   26

这里C语言查看的编译器是gcc,想用clang的间接换就能够了
如果须要在Airline显示自定义报错与正告数目则:
关上用户/.vim/plugged/vim-airline/autoload/airline/extensions/ale.vim and replace
搜寻

`let error_symbol = get(g:, 'airline#extensions#ale#error_` *   1

找到惟一的后果的哪一行,用"正文掉并换成

`let error_symbol = get(g:, 'airline#extensions#ale#error_symbol', '????')` *   1

最初那个emoji是报错数目的标记,能够本人换
搜寻

`let warning_symbol = get(g:, 'airline#extensions#ale#warning_` *   1

找到惟一的后果的哪一行,用"正文掉并换成

`let warning_symbol = get(g:, 'airline#extensions#ale#warning_symbol', '????:')` *   1

最初那个emoji是正告数目的标记,能够本人换

10.6 代码主动正文:nerdcommenter

装置插件

`Plug 'preservim/nerdcommenter'` *   1

_vimrc写下

`map <C-m> <leader>ccmap <A-m> <leader>cuunmap <CR>` *   1*   2*   3

10.7 代码彩虹括号

能够彩虹匹配(),{},<>,[],成果参考

这是vscode彩虹括号的成果,一样,同时我提供了vscode配色的色标
装置插件

`Plug 'luochen1990/rainbow'` *   1

_vimrc写下

``" 1. vscode defult 2. author defult 3. vscode show"        'guifgs': ['#B21212', '#1B9CED','#FFFC00'],"        'guifgs': ['royalblue3', 'darkorange3', 'seagreen3', 'firebrick'],"        'guifgs': ['#C186BF', '#268EDB','#F79318'],    let g:rainbow_conf = {        'guifgs': ['#C186BF', '#268EDB','#F79318'],        'ctermfgs': ['lightblue', 'lightyellow', 'lightcyan', 'lightmagenta'],        'operators': '_,_',        'parentheses': ['start=/(/ end=/)/ fold', 'start=/[/ end=/]/ fold', 'start=/{/ end=/}/ fold'],        'separately': {            '*': {},            'tex': {                'parentheses': ['start=/(/ end=/)/', 'start=/[/ end=/]/'],            },            'lisp': {                'guifgs': ['royalblue3', 'darkorange3', 'seagreen3', 'firebrick', 'darkorchid3'],            },            'vim': {                'parentheses': ['start=/(/ end=/)/', 'start=/[/ end=/]/', 'start=/{/ end=/}/ fold', 'start=/(/ end=/)/ containedin=vimFuncBody', 'start=/[/ end=/]/ containedin=vimFuncBody', 'start=/{/ end=/}/ fold containedin=vimFuncBody'],            },            'html': {                'parentheses': ['start=/v<((area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)[ >])@!z([-_:a-zA-Z0-9]+)(s+[-_:a-zA-Z0-9]+(=("[^"]*"|'."'".'[^'."'".']*'."'".'|[^ '."'".'"><=`]*))?)*>/ end=#</z1># fold'],            },            'css': 0,        }    }let g:rainbow_active = 1`` *   1*   2*   3*   4*   5*   6*   7*   8*   9*   10*   11*   12*   13*   14*   15*   16*   17*   18*   19*   20*   21*   22*   23*   24*   25*   26*   27

10.8 自定义开始菜单

装置插件

`Plug 'mhinz/vim-startify'` *   1

想要批改默认款式改这里,写入配置文件,删掉正文,换成本人想要的

`"let g:startify_custom_header = ["             '+------------------------------+',"             '|                              |',"             '|    Still waters run deep!    |',"             '|                              |',"             '+----------------+-------------+',"            ]"let g:startify_custom_footer = ["             '+------------------------------+',"             '|     Keep an open mind!       |',"             '+----------------+-------------+',"            ]let g:startify_files_number = 5"let g:startify_custom_indices = map(range(1,100), 'string(v:val)')` *   1*   2*   3*   4*   5*   6*   7*   8*   9*   10*   11*   12*   13*   14

10.9 全语言代码主动补全

这是Vim上被誉为最难装置的插件,做好肝一天的筹备
请严格依照我的办法装置

  1. 装置插件
`Plug 'ycm-core/YouCompleteMe'` *   1
  1. 插入配置文件
`set runtimepath+=~/.vim/plugged/YouCompleteMeautocmd InsertLeave * if pumvisible() == 0|pclose|endif "来到插入模式后主动敞开预览窗口"let g:ycm_collect_identifiers_from_tags_files = 1           " 开启 YCM基于标签引擎let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 正文与字符串中的内容也用于补全let g:syntastic_ignore_files=[".*.py$"]let g:ycm_seed_identifiers_with_syntax = 1                  " 语法关键字补全let g:ycm_complete_in_comments = 1let g:ycm_confirm_extra_conf = 0                            " 敞开加载.ycm_extra_conf.py提醒let g:ycm_key_list_select_completion = ['<c-n>', '<Down>']  " 映射按键,没有这个会拦挡掉tab, 导致其余插件的tab不能用.let g:ycm_key_list_previous_completion = ['<c-p>', '<Up>']let g:ycm_complete_in_comments = 1                          " 在正文输出中也能补全let g:ycm_complete_in_strings = 1                           " 在字符串输出中也能补全let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 正文和字符串中的文字也会被支出补全"let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'let g:ycm_global_ycm_extra_conf='~/.vim/plugged/YouCompleteMe/third_party/ycmd/cpp/.ycm_extra_conf.py'let g:ycm_show_diagnostics_ui = 0                           " 禁用语法查看inoremap <expr> <CR> pumvisible() ? "<C-y>" : "<CR>"" 回车即选中以后项nnoremap <c-j> :YcmCompleter GoToDefinitionElseDeclaration<CR>" 跳转到定义处let g:ycm_min_num_of_chars_for_completion=2                 " 从第2个键入字符就开始列举匹配项let g:ycm_key_invoke_completion = '<c-z>'let g:ycm_semantic_triggers =  {             'c,cpp,python,java,go,erlang,perl': ['re!w{2}'],             'cs,lua,javascript': ['re!w{2}'],             }` *   1*   2*   3*   4*   5*   6*   7*   8*   9*   10*   11*   12*   13*   14*   15*   16*   17*   18*   19*   20*   21*   22*   23*   24*   25*   26
  1. 下载安装clangcmake并退出环境变量
  2. 这是最麻烦的,如果有vs还好说,像我一样不喜爱vs的就很麻烦了,首先去我的项目的仓库找阐明文档,找到这里

    这是一个天坑
    他会让你下载一个vs build tool 2017,然而目前人家用的是2019,忘了改了
    您能够看到链接地址是https://visualstudio.microsof...
    如果装置之后会显示须要vs buildtool 2019而不是2017,所以把网址最初的15改成16(这是vs2019的版本编号)
    下载,装置,只抉择这一个

    安装包挺大的,倡议装置到D盘

    装置后关上插件装置地址,按住shift,右键,点击关上powershell
    输出命令Python install.py --all 期待,很慢,而且网络要求高,本人懂,挂好软件,一次不行从新执行命令,编译完结之后就能够了

10.10 Vim主动括号补全

装置插件

`Plug 'Raimondi/delimitMate'` *   1

配置文件

`Bundle 'Raimondi/delimitMate'` *   1

10.11 Vim函数整顿

帮忙你生成以后程序的所有函数和变量索引,F4激活
装置插件

`Plug 'vim-scripts/taglist.vim'` *   1

下载ctags58.zip文件
解压
为解压目录增加环境变量
配置文件

`let Tlist_Use_Right_Window=1 let Tlist_Inc_Winwidth=0 let Tlist_File_Fold_Auto_Close=1let Tlist_Exit_Onluwindow=1map <F4> :TlistToggle<cr>` *   1*   2*   3*   4*   5

10.12 gVim界面通明

装置插件

`Plug 'vim-scripts/VimTweak'Plug 'mattn/transparency-windows-vim'` *   1*   2

下载vimtweak64.dll文件
放到gvim.exe同门路下
配置文件写入

`:call libcallnr("vimtweak64.dll", "SetAlpha", 250)` *   1

最初的数字为200-255自助调节透明度,胜利后须要刷新配置文件


  1. 特定语言的插件介绍

==============

11.1 C/C++的插件

11.1.1 主动格式化代码

装置插件

`Plug 'Chiel92/vim-autoformat'` *   1

_vimrc写下

`et g:autoformat_autoindent = 0let g:autoformat_retab = 0let g:autoformat_remove_trailing_spaces = 0noremap <F3> :Autoformat<CR>let g:autoformat_verbosemode=1` *   1*   2*   3*   4*   5

11.1.2 代码高亮

装置插件

`Plug 'octol/vim-cpp-enhanced-highlight'` *   1

配置文件

`let g:cpp_class_scope_highlight = 1let g:cpp_member_variable_highlight = 1let g:cpp_class_decl_highlight = 1let g:cpp_experimental_simple_template_highlight = 1let g:cpp_experimental_template_highlight = 1let g:cpp_concepts_highlight = 1` *   1*   2*   3*   4*   5*   6

11.1.3 代码查看ALE

见前

11.2Python的插件

11.2.1 语言反对

装置插件

`Plug 'python-mode/python-mode', { 'for': 'python', 'branch': 'develop' }` *   1

_vimrc写下

`"开启正告let g:pymode_warnings = 0"保留文件时主动删除无用空格let g:pymode_trim_whitespaces = 1let g:pymode_options = 1"显示容许的最大长度的列let g:pymode_options_colorcolumn = 1"设置QuickFix窗口的最大,最小高度let g:pymode_quickfix_minheight = 3let g:pymode_quickfix_maxheight = 10"应用python3let g:pymode_python = 'python3'"应用PEP8格调的缩进let g:pymode_indent = 1"勾销代码折叠let g:pymode_folding = 0"开启python-mode定义的挪动形式let g:pymode_motion = 1"启用python-mode内置的python文档,应用K进行查找let g:pymode_doc = 1let g:pymode_doc_bind = 'K'"自动检测并启用virtualenvlet g:pymode_virtualenv = 1"不应用python-mode运行python代码let g:pymode_run = 0"let g:pymode_run_bind = '<Leader>r'"不应用python-mode设置断点let g:pymode_breakpoint = 0"let g:pymode_breakpoint_bind = '<leader>b'"启用python语法查看let g:pymode_lint = 1"批改后保留时进行查看let g:pymode_lint_on_write = 0"编辑时进行查看let g:pymode_lint_on_fly = 0let g:pymode_lint_checkers = ['pyflakes', 'pep8']"发现错误时不主动关上QuickFix窗口let g:pymode_lint_cwindow = 0"侧边栏不显示python-mode相干的标记let g:pymode_lint_signs = 0"let g:pymode_lint_todo_symbol = 'WW'"let g:pymode_lint_comment_symbol = 'CC'"let g:pymode_lint_visual_symbol = 'RR'"let g:pymode_lint_error_symbol = 'EE'"let g:pymode_lint_info_symbol = 'II'"let g:pymode_lint_pyflakes_symbol = 'FF'"启用重构let g:pymode_rope = 1"不在父目录下查找.ropeproject,能晋升响应速度let g:pymode_rope_lookup_project = 0"光标下单词查阅文档let g:pymode_rope_show_doc_bind = '<C-c>d'"我的项目批改后从新生成缓存let g:pymode_rope_regenerate_on_write = 1"开启补全,并设置<C-Tab>为默认快捷键let g:pymode_rope_completion = 1let g:pymode_rope_complete_on_dot = 1let g:pymode_rope_completion_bind = '<C-Tab>'"<C-c>g跳转到定义处,同时新建竖直窗口关上let g:pymode_rope_goto_definition_bind = '<C-c>g'let g:pymode_rope_goto_definition_cmd = 'vnew'"重命名光标下的函数,办法,变量及类名let g:pymode_rope_rename_bind = '<C-c>rr'"重命名光标下的模块或包let g:pymode_rope_rename_module_bind = '<C-c>r1r'"开启python所有的语法高亮let g:pymode_syntax = 1let g:pymode_syntax_all = 1"高亮缩进谬误let g:pymode_syntax_indent_errors = g:pymode_syntax_all"高亮空格谬误let g:pymode_syntax_space_errors = g:pymode_syntax_all` *   1*   2*   3*   4*   5*   6*   7*   8*   9*   10*   11*   12*   13*   14*   15*   16*   17*   18*   19*   20*   21*   22*   23*   24*   25*   26*   27*   28*   29*   30*   31*   32*   33*   34*   35*   36*   37*   38*   39*   40*   41*   42*   43*   44*   45*   46*   47*   48*   49*   50*   51*   52*   53*   54*   55*   56*   57*   58*   59*   60*   61*   62*   63*   64*   65*   66*   67*   68*   69*   70*   71*   72

11.2.2 代码查看ALE

见前

11.3 LaTeX的插件

装置插件

`Plug 'lervag/vimtex'` *   1

配置文件,F9运行,须要 8. 编译程序的代码

`" Autocomprtr not realize" F9 not drc" add SumatraPDF Pathlet g:tex_flavor='latex'let g:vimtex_view_general_viewer = 'SumatraPDF'let g:vimtex_view_general_options_latexmk = '-reuse-instance'let g:vimtex_view_general_options = '-reuse-instance -forward-search @tex @line @pdf' . ' -inverse-search "' . exepath(v:progpath) . ' --servername ' . v:servername . ' --remote-send "^<C-^>^<C-n^>' . ':execute ''drop '' . fnameescape(''%f'')^<CR^>' . ':%l^<CR^>:normal! zzzv^<CR^>' . ':call remote_foreground('''.v:servername.''')^<CR^>^<CR^>""'set conceallevel=1let g:tex_conceal='abdmg'` *   1*   2*   3*   4*   5*   6*   7*   8*   9*   10*   11*   12*   13*   14*   15*   16

11.4 MarkDown的插件

咱们须要如下插件,并且 程序不能变

`Plug 'dhruvasagar/vim-table-mode'Plug 'godlygeek/tabular'Plug 'mzlogin/vim-markdown-toc'Plug 'plasticboy/vim-markdown'Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() } }Plug 'ferrine/md-img-paste.vim'` *   1*   2*   3*   4*   5*   6

前面就不写装置插件了,须要配置的会在前面给出

11.4.1 MarkDown预览

配置完结之后请运行:MarkdownPreviewToggel激活一次就能够了
配置写下

`let g:vim_markdown_math = 1let g:vmt_auto_update_on_save = 0let g:mkdp_path_to_chrome = "C:Program Files (x86)GoogleChromeApplication"let g:mkdp_markdown_css=''` *   1*   2*   3*   4

let g:mkdp_path_to_chrome = "C:Program Files (x86)GoogleChromeApplication"这里改成Chrome的门路,必须是Chrome

11.4.2 MarkDown主动输出表格

用法是创建表格的时候输出||+Esc会主动补全-,前面写的表格长之后,后面的会加长

`let g:table_mode_corner = '|'let g:table_mode_border=0let g:table_mode_fillchar=' 'function! s:isAtStartOfLine(mapping)  let text_before_cursor = getline('.')[0 : col('.')-1]  let mapping_pattern = 'V' . escape(a:mapping, '')  let comment_pattern = 'V' . escape(substitute(&l:commentstring, '%s.*$', '', ''), '')  return (text_before_cursor =~? '^' . ('v(' . comment_pattern . 'v)?') . 's*v' . mapping_pattern . 'v$')endfunctioninoreabbrev <expr> <bar><bar>           <SID>isAtStartOfLine('||') ?           '<c-o>:TableModeEnable<cr><bar><space><bar><left><left>' : '<bar><bar>'inoreabbrev <expr> __           <SID>isAtStartOfLine('__') ?           '<c-o>:silent! TableModeDisable<cr>' : '__'` *   1*   2*   3*   4*   5*   6*   7*   8*   9*   10*   11*   12*   13*   14*   15*   16*   17

11.5 R语言插件

我是间接学的这个
如果想把Vim 打造成你R的IDE,至多得保障在Vim中能做3件事件

  • 能写代码
  • 能够运行以后代码
  • 代码联想
    为了让Vim领有该性能,你须要装一个插件
`Plug 'jalvesaq/Nvim-R'` *   1

用vimmyfile.R关上一个R脚本,输出rf就能够关上R的终端。能够用rq敞开终端

当你能关上如上界面之后,那么咱们能够学习一些罕用操作了,如下

  • 执行以后文件的所有代码: aa
  • 执行整个函数: ff
  • 执行所选内容: ss
  • 执行以后行: l

    残缺清单
    下面的操作都须要用作为前置符,为了缩小操作,能够将一些罕用操作进行映射, 批改"~/.vimrc" 增加如下内容
`" 将执行以后行代码映射为 , nmap , <Plug>RDSendLine" 将执行抉择的多行代码映射为 , vmap , <Plug>RDSendSelection" 将执行抉择的多行映射并输入内容隐射为 ,evmap ,e <Plug>RESendSelection` *   1*   2*   3*   4*   5*   6

R全局变量窗口
Rstudio有一个专门的窗口展现目前的全局环境变量,如下图。

而在vim中用ro 就能够启动这个性能

vim里不同窗口的切换用 ctrl + w + h/j/k/l

帮忙文档窗口
写代码的时候,还须要常常的浏览文档,在Rstudio里有专门的窗口

在Vim则是用rh查看帮忙文档, 用 re查看示例

查看数据
还能够像Rstudio一样查看数据库中的内容,在对象上输出rv, 在Linux上须要先装置插件"chrisbra/csv.vim"

代码补全
代码补全依赖于一个更好的工具ncm-R, 然而装置起来特地的吃力,花了一个下午的工夫都没有搞定,所以我放弃了。

其余应用操作

  • 设置以后文件夹为工作目录: rd
  • 输入运行后果作为正文: o
  • 对变量summary() 对应 rs
  • 对变量plot() 对应 rg (服务器端别想了)
  • 查看一个变量的列名对应 rn
  • <- 的对应"_"
    • *
  1. 解决ESC

==========

正如你所发现,咱们须要平庸的切换到Normal模式,然而Esc键离手太远了,然而离的近的CapLock又没啥用,所以思路是把CapLock映射为Esc,Esc映射到CapLock,然而CapLock这个键特地非凡,只有Windows本人能够捕捉他被按下,其余所有软件都不行(素来没见过CapLock做快捷键的),所以通过批改注册编辑表来实现
将上面代码保留为 capslock2esc.reg:

`Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard Layout]"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,01,00,3a,00,00,00,00,00` *   1*   2*   3

注:下面不是调换,如果要调换,则用上面代码:

`Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard Layout]"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,3a,00,01,00,01,00,3a,00,00,00,00,00` *   1*   2*   3

还原按键时,只须要在注册表的门路([HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlKeyboard Layout])下,删除Scancode Map键即可。
反正用惯巨好用。


  1. Vim 键位图

============






  1. 优良的参考与学习资源

===============

  1. Vim中文社区
  2. Vim中国论坛
  3. 菜鸟教程
  4. 所需即所获:像 IDE 一样应用 vim

好多都没保留,我缓缓补


  1. 我的Vim配置

============

``"===================================="===  Basic setting for vim use   ==="====================================set encoding=utf-8                  "Encoding UTF-8, to use Gvim correct"let &pythondll=''                  "sup python just use same bit & ignore this"let &pythonhome=''                 "Python 2&3 only choose 1"let &pythonthreedll='C:Program Files (x86)Python36-32python36.dll'"let &pythonthreehome='C:Program Files (x86)Python36-32'syntax on                           "hilight_baselet mapleader = "<space>"          "change leader keylanguage C                          "Using Englishset nocompatible                    "Compaty vi..filetype onfiletype indent onfiletype plugin onset mouse=a                         "Mouse enablelet &t_ut=''set expandtab                       "Convent Tab to spaceset tabstop=4                        "Tab configset shiftwidth=4set softtabstop=4set list                            "Show '$' at cursorset listchars=tab:▸ ,trail:▫        "Show Tab & spaceset scrolloff=5                        "At least n row before/after cursorset backspace=indent,eol,start        "Let Backspace cross rowset foldmethod=indent                "foldset foldlevel=99let &t_SI = "<Esc>]50;CursorShape=1x7"    "Theme of cursorlet &t_SR = "<Esc>]50;CursorShape=2x7"let &t_EI = "<Esc>]50;CursorShape=0x7"set laststatus=2                    "Always show Status bar"au BufReadPost * if line("''"") > 1 && line("'"") <= line("$") | exe "normal! g'"" | endif.                    "Save postion of cursorset autoindent                        "ident"===================================="===  editor  ======================="====================================set guifont=Powerline_Consolas:h12:cANSI:qDRAFT                "NeoVim not support":call libcallnr("vimtweak64.dll", "SetAlpha", 250)map <silent> <F2> :if &guioptions =~# 'T' <Bar>        set guioptions-=T <Bar>        set guioptions-=m <bar>    else <Bar>        set guioptions =T <Bar>        set guioptions =m <Bar>    endif<CR>set guioptions-=m   "Hide Menuset guioptions-=T   "Hide Tool-Barset guioptions-=r   "hide right scrollset guioptions-=b   "hide buttom scollset guioptions-=L   "hide left scrollset number            "row numberset relativenumber"relative row numberset cursorline        "hilight line cursorset cursorcolumn    "hilight colum cursorset wrap            "autowrapset showcmd            "show point outset wildmenuset hlsearch        "search hilightexec "nohlsearch"    set incsearch        "real time search hilightset ignorecase        "ignore text-transformset smartcase        "smart text-transformvnoremap <Leader>y "+ynmap <Leader>p "+pmap rc : e $HOME_vimrc<CR> map S : w<CR>map s <nop>map Q :q<CR>map R :source $MYVIMRC<CR>noremap <LEADER><CR>  :nohlsearch<CR>map spl :set splitright<CR>:vsplit<CR>map sph :set nosplitright<CR>:vsplit<CR>map spj :set splitbelow<CR>:split<CR>map spk :set nosplitbelow<CR>:split<CR>map <A-h> <C-w>hmap <A-j> <C-w>jmap <A-k> <C-w>kmap <A-l> <C-w>lmap <A-=> :vertical resize+5 <CR> map <A--> :vertical resize-5 <CR> map <A-+> :resize+5 <CR> map <A-_> :resize-5 <CR> map sv <C-w>t<c-W>Hmap sv <C-w>t<c-W>Kmap tu :tabe<CR>map tc :tabc<CR>" Move around tabs with tn and timap tp :-tabnext<CR>map tn :+tabnext<CR>" Move the tabs with tmn and tmimap tmn :-tabmove<CR>map tmi :+tabmove<CR>"jump ])}inoremap <C-l> <Right>"===================================="=== Processer ======================"====================================map  <F9>  :w<CR>:call Run()<CR>imap <F9>  <ESC>:w<CR>:call Run()<CR>map  <F10> :w<CR>:call Debug()<CR>imap <F10> <ESC>:w<CR>:call Debug()<CR>func!  Debug()    if expand("%:e") == "c" || expand("%:e") == "cc" || expand("%:e") == "cxx" || expand("%:e") == "cpp"        exe ":setlocal makeprg=".'g++ % -o %< -gstabs+'        echohl WarningMsg | echo " compiling..."        silent make        exe ":!gdb %<"        redraw!        echohl WarningMsg | echo " Debug finish! :-)"    else        redraw!        echo "Language not support! :-("    endifendfuncfunc! Run()    if expand("%:e") == "py"        ! Python -u "%<.py"        redraw!        echohl WarningMsg | echo " Running finish! :-)"    elseif expand("%:e") == "c" || expand("%:e") == "cc" || expand("%:e") == "cxx" || expand("%:e") == "cpp"        echo " compiling..."        :! g++ "%" -o "%<" && "%<.exe"        redraw!        echohl WarningMsg | echo " Running finish! :-)"    elseif expand("%:e") == "r"        exe ":! Rscript %"        redraw!        echohl WarningMsg | echo " Running finish! :-)"    elseif expand("%:e") == "vbs"        exe ":! %"        redraw!        echohl WarningMsg | echo " Running finish! :-)"        redraw!        echohl WarningMsg | echo " Running finish! :-)"    elseif expand("%:e") == "md"        :MarkdownPreview        redraw!        echohl WarningMsg | echo " Running on Chrome! :-)"    elseif expand("%:e") == "tex"        "<localleader>ll        ll        ":vimtex-compile    else        redraw!        echo "Language not support! :-("    endifendfunction"===================================="=== Plug config ===================="===================================="------- xkb-switch --------"copy dll to $VIM, and note bitlet g:XkbSwitchEnabled     = 1let g:XkbSwitchIMappings   = ['cn']let g:XkbSwitchIMappingsTr = {'cn': {'<': '', '>': ''}}"------- ondotree ----------map <F5> :UndotreeToggle<CR>"------- NERDTreeToggle ----map ff :NERDTreeToggle<CR> "------- Airline -----------"set ambiwidth=double                    " 设置为双字宽显示,否则无奈残缺显示如:☆let g:airline_theme='bubblegum'let g:airline_powerline_fonts = 1" 开启tablinelet g:airline#extensions#tabline#enabled = 1      "tabline中以后buffer两端的分隔字符let g:airline#extensions#tabline#left_sep = ' '   "tabline中未激活buffer两端的分隔字符let g:airline#extensions#tabline#left_alt_sep = '|'      "tabline中buffer显示编号let g:airline#extensions#tabline#buffer_nr_show = 1      " 映射切换buffer的键位nnoremap [b :bp<CR>nnoremap ]b :bn<CR>"------- vim-autodormat ----"python needlet g:autoformat_autoindent = 0let g:autoformat_retab = 0let g:autoformat_remove_trailing_spaces = 0noremap <F3> :Autoformat<CR>let g:autoformat_verbosemode=1"------- nerdcommenter -----map <C-m> <leader>ccmap <A-m> <leader>cuunmap <CR>" 1. vscode defult 2. author defult 3. vscode show"        'guifgs': ['#B21212', '#1B9CED','#FFFC00'],"        'guifgs': ['royalblue3', 'darkorange3', 'seagreen3', 'firebrick'],"        'guifgs': ['#C186BF', '#268EDB','#F79318'],"------- Rainbow -----------    let g:rainbow_conf = {        'guifgs': ['#C186BF', '#268EDB','#F79318'],        'ctermfgs': ['lightblue', 'lightyellow', 'lightcyan', 'lightmagenta'],        'operators': '_,_',        'parentheses': ['start=/(/ end=/)/ fold', 'start=/[/ end=/]/ fold', 'start=/{/ end=/}/ fold'],        'separately': {            '*': {},            'tex': {                'parentheses': ['start=/(/ end=/)/', 'start=/[/ end=/]/'],            },            'lisp': {                'guifgs': ['royalblue3', 'darkorange3', 'seagreen3', 'firebrick', 'darkorchid3'],            },            'vim': {                'parentheses': ['start=/(/ end=/)/', 'start=/[/ end=/]/', 'start=/{/ end=/}/ fold', 'start=/(/ end=/)/ containedin=vimFuncBody', 'start=/[/ end=/]/ containedin=vimFuncBody', 'start=/{/ end=/}/ fold containedin=vimFuncBody'],            },            'html': {                'parentheses': ['start=/v<((area|base|br|col|embed|hr|img|input|keygen|link|menuitem|meta|param|source|track|wbr)[ >])@!z([-_:a-zA-Z0-9]+)(s+[-_:a-zA-Z0-9]+(=("[^"]*"|'."'".'[^'."'".']*'."'".'|[^ '."'".'"><=`]*))?)*>/ end=#</z1># fold'],            },            'css': 0,        }    }let g:rainbow_active = 1"------- ALE ---------------"if need change airline icon:"   open ~/.vim/plugged/vim-airline/autoload/airline/extensions/ale.vim and replace"   let error_symbol = get(g:, 'airline#extensions#ale#error_symbol', '????')"   let warning_symbol = get(g:, 'airline#extensions#ale#warning_symbol', '????:')"始终开启标记列let g:ale_sign_column_always = 1let g:ale_set_highlights = 0"自定义error和warning图标let g:ale_sign_error = '❌'let g:ale_sign_warning = '????'"在vim自带的状态栏中整合alelet g:ale_statusline_format = ['✗ %d', '⚡ %d', '✔ OK']"显示Linter名称,出错或正告等相干信息let g:ale_echo_msg_error_str = 'E'let g:ale_echo_msg_warning_str = 'W'let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'"一般模式下,sp返回上一个谬误或正告,sn返回下一个谬误或正告nmap sp <Plug>(ale_previous_wrap)nmap sn <Plug>(ale_next_wrap)"<Leader>s触发/敞开语法查看nmap <Leader>s :ALEToggle<CR>"<Leader>d查看谬误或正告的详细信息nmap <Leader>d :ALEDetail<CR>"set statusline=%F%m%r%h%w [FORMAT=%{&ff}] [TYPE=%Y] [POS=%l,%v][%p%%] %{strftime("%d/%m/%y - %H:%M")} %{ALEGetStatusLine()}"cpp NOT C++let g:ale_linters = {   'cpp': ['gcc'],   'c': ['gcc'],   'python': ['pylint'],}"------- MarkDown ----------"first use :MarkdownPreviewToggel  to wake Pluglet g:vim_markdown_math = 1let g:vmt_auto_update_on_save = 0let g:mkdp_path_to_chrome = "C:Program Files (x86)GoogleChromeApplication"let g:mkdp_markdown_css=''"------- MDTable -----------"||+esclet g:table_mode_corner = '|'let g:table_mode_border=0let g:table_mode_fillchar=' 'function! s:isAtStartOfLine(mapping)  let text_before_cursor = getline('.')[0 : col('.')-1]  let mapping_pattern = 'V' . escape(a:mapping, '')  let comment_pattern = 'V' . escape(substitute(&l:commentstring, '%s.*$', '', ''), '')  return (text_before_cursor =~? '^' . ('v(' . comment_pattern . 'v)?') . 's*v' . mapping_pattern . 'v$')endfunctioninoreabbrev <expr> <bar><bar>           <SID>isAtStartOfLine('||') ?           '<c-o>:TableModeEnable<cr><bar><space><bar><left><left>' : '<bar><bar>'inoreabbrev <expr> __           <SID>isAtStartOfLine('__') ?           '<c-o>:silent! TableModeDisable<cr>' : '__'"------- LaTeX -------------" Autocomprtr not realize" F9 not drc" add SumatraPDF Pathlet g:tex_flavor='latex'let g:vimtex_view_general_viewer = 'SumatraPDF'let g:vimtex_view_general_options_latexmk = '-reuse-instance'let g:vimtex_view_general_options = '-reuse-instance -forward-search @tex @line @pdf' . ' -inverse-search "' . exepath(v:progpath) . ' --servername ' . v:servername . ' --remote-send "^<C-^>^<C-n^>' . ':execute ''drop '' . fnameescape(''%f'')^<CR^>' . ':%l^<CR^>:normal! zzzv^<CR^>' . ':call remote_foreground('''.v:servername.''')^<CR^>^<CR^>""'set conceallevel=1let g:tex_conceal='abdmg'"------- YCM ---------------set runtimepath+=~/.vim/plugged/YouCompleteMeautocmd InsertLeave * if pumvisible() == 0|pclose|endif "来到插入模式后主动敞开预览窗口"let g:ycm_collect_identifiers_from_tags_files = 1           " 开启 YCM基于标签引擎let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 正文与字符串中的内容也用于补全let g:syntastic_ignore_files=[".*.py$"]let g:ycm_seed_identifiers_with_syntax = 1                  " 语法关键字补全let g:ycm_complete_in_comments = 1let g:ycm_confirm_extra_conf = 0                            " 敞开加载.ycm_extra_conf.py提醒let g:ycm_key_list_select_completion = ['<c-n>', '<Down>']  " 映射按键,没有这个会拦挡掉tab, 导致其余插件的tab不能用.let g:ycm_key_list_previous_completion = ['<c-p>', '<Up>']let g:ycm_complete_in_comments = 1                          " 在正文输出中也能补全let g:ycm_complete_in_strings = 1                           " 在字符串输出中也能补全let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 正文和字符串中的文字也会被支出补全"let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'let g:ycm_global_ycm_extra_conf='~/.vim/plugged/YouCompleteMe/third_party/ycmd/cpp/.ycm_extra_conf.py'let g:ycm_show_diagnostics_ui = 0                           " 禁用语法查看inoremap <expr> <CR> pumvisible() ? "<C-y>" : "<CR>"" 回车即选中以后项nnoremap <c-j> :YcmCompleter GoToDefinitionElseDeclaration<CR>" 跳转到定义处let g:ycm_min_num_of_chars_for_completion=2                 " 从第2个键入字符就开始列举匹配项let g:ycm_key_invoke_completion = '<c-z>'let g:ycm_semantic_triggers =  {             'c,cpp,python,java,go,erlang,perl': ['re!w{2}'],             'cs,lua,javascript': ['re!w{2}'],             }"------- Python-mode -------"开启正告let g:pymode_warnings = 0"保留文件时主动删除无用空格let g:pymode_trim_whitespaces = 1let g:pymode_options = 1"显示容许的最大长度的列let g:pymode_options_colorcolumn = 1"设置QuickFix窗口的最大,最小高度let g:pymode_quickfix_minheight = 3let g:pymode_quickfix_maxheight = 10"应用python3let g:pymode_python = 'python3'"应用PEP8格调的缩进let g:pymode_indent = 1"勾销代码折叠let g:pymode_folding = 0"开启python-mode定义的挪动形式let g:pymode_motion = 1"启用python-mode内置的python文档,应用K进行查找let g:pymode_doc = 1let g:pymode_doc_bind = 'K'"自动检测并启用virtualenvlet g:pymode_virtualenv = 1"不应用python-mode运行python代码let g:pymode_run = 0"let g:pymode_run_bind = '<Leader>r'"不应用python-mode设置断点let g:pymode_breakpoint = 0"let g:pymode_breakpoint_bind = '<leader>b'"启用python语法查看let g:pymode_lint = 1"批改后保留时进行查看let g:pymode_lint_on_write = 0"编辑时进行查看let g:pymode_lint_on_fly = 0let g:pymode_lint_checkers = ['pyflakes', 'pep8']"发现错误时不主动关上QuickFix窗口let g:pymode_lint_cwindow = 0"侧边栏不显示python-mode相干的标记let g:pymode_lint_signs = 0"let g:pymode_lint_todo_symbol = 'WW'"let g:pymode_lint_comment_symbol = 'CC'"let g:pymode_lint_visual_symbol = 'RR'"let g:pymode_lint_error_symbol = 'EE'"let g:pymode_lint_info_symbol = 'II'"let g:pymode_lint_pyflakes_symbol = 'FF'"启用重构let g:pymode_rope = 1"不在父目录下查找.ropeproject,能晋升响应速度let g:pymode_rope_lookup_project = 0"光标下单词查阅文档let g:pymode_rope_show_doc_bind = '<C-c>d'"我的项目批改后从新生成缓存let g:pymode_rope_regenerate_on_write = 1"开启补全,并设置<C-Tab>为默认快捷键let g:pymode_rope_completion = 1let g:pymode_rope_complete_on_dot = 1let g:pymode_rope_completion_bind = '<C-Tab>'"<C-c>g跳转到定义处,同时新建竖直窗口关上let g:pymode_rope_goto_definition_bind = '<C-c>g'let g:pymode_rope_goto_definition_cmd = 'vnew'"重命名光标下的函数,办法,变量及类名let g:pymode_rope_rename_bind = '<C-c>rr'"重命名光标下的模块或包let g:pymode_rope_rename_module_bind = '<C-c>r1r'"开启python所有的语法高亮let g:pymode_syntax = 1let g:pymode_syntax_all = 1"高亮缩进谬误let g:pymode_syntax_indent_errors = g:pymode_syntax_all"高亮空格谬误let g:pymode_syntax_space_errors = g:pymode_syntax_all"------- vim-cpp-hilight ---let g:cpp_class_scope_highlight = 1let g:cpp_member_variable_highlight = 1let g:cpp_class_decl_highlight = 1let g:cpp_experimental_simple_template_highlight = 1let g:cpp_experimental_template_highlight = 1let g:cpp_concepts_highlight = 1"------- Start -------------"let g:startify_custom_header = ["             '+------------------------------+',"             '|                              |',"             '|    Still waters run deep!    |',"             '|                              |',"             '+----------------+-------------+',"            ]"let g:startify_custom_footer = ["             '+------------------------------+',"             '|     Keep an open mind!       |',"             '+----------------+-------------+',"            ]let g:startify_files_number = 5"let g:startify_custom_indices = map(range(1,100), 'string(v:val)')"------- Taglist -----------"http://ctags.sourceforge.net/ to download ctags -> unzip -> add path"add Plug Taglist from github mirrorlet Tlist_Use_Right_Window=1 let Tlist_Inc_Winwidth=0 let Tlist_File_Fold_Auto_Close=1let Tlist_Exit_Onluwindow=1map <F4> :TlistToggle<cr>              "==================================="=== VIM-Plug ======================"===================================call plug#begin('~/.vim/plugged')Plug 'lyokha/vim-xkbswitch'                 "neovim notsupportPlug 'DeXP/xkb-switch-win'                  "neoivm norsupportPlug 'vim-airline/vim-airline'Plug 'connorholyday/vim-snazzy'Plug 'preservim/nerdtree'Plug 'mbbill/undotree'Plug 'dense-analysis/ale'Plug 'vim-airline/vim-airline-themes'Plug 'Raimondi/delimitMate'Plug 'Chiel92/vim-autoformat'Plug 'preservim/nerdcommenter'"Plug 'kien/rainbow_parentheses.vim'Plug 'luochen1990/rainbow'Plug 'godlygeek/tabular'Plug 'mzlogin/vim-markdown-toc'Plug 'plasticboy/vim-markdown'Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() } }Plug 'ferrine/md-img-paste.vim' Plug 'lervag/vimtex'Plug 'python-mode/python-mode', { 'for': 'python', 'branch': 'develop' }Plug 'octol/vim-cpp-enhanced-highlight'Plug 'mhinz/vim-startify'Plug 'dhruvasagar/vim-table-mode'Plug 'vim-scripts/taglist.vim'Plug 'ycm-core/YouCompleteMe'Plug 'vim-scripts/VimTweak'Plug 'mattn/transparency-windows-vim'call plug#end()"==================================="=== Theme ========================="===================================colorscheme snazzy`` *   1*   2*   3*   4*   5*   6*   7*   8*   9*   10*   11*   12*   13*   14*   15*   16*   17*   18*   19*   20*   21*   22*   23*   24*   25*   26*   27*   28*   29*   30*   31*   32*   33*   34*   35*   36*   37*   38*   39*   40*   41*   42*   43*   44*   45*   46*   47*   48*   49*   50*   51*   52*   53*   54*   55*   56*   57*   58*   59*   60*   61*   62*   63*   64*   65*   66*   67*   68*   69*   70*   71*   72*   73*   74*   75*   76*   77*   78*   79*   80*   81*   82*   83*   84*   85*   86*   87*   88*   89*   90*   91*   92*   93*   94*   95*   96*   97*   98*   99*   100*   101*   102*   103*   104*   105*   106*   107*   108*   109*   110*   111*   112*   113*   114*   115*   116*   117*   118*   119*   120*   121*   122*   123*   124*   125*   126*   127*   128*   129*   130*   131*   132*   133*   134*   135*   136*   137*   138*   139*   140*   141*   142*   143*   144*   145*   146*   147*   148*   149*   150*   151*   152*   153*   154*   155*   156*   157*   158*   159*   160*   161*   162*   163*   164*   165*   166*   167*   168*   169*   170*   171*   172*   173*   174*   175*   176*   177*   178*   179*   180*   181*   182*   183*   184*   185*   186*   187*   188*   189*   190*   191*   192*   193*   194*   195*   196*   197*   198*   199*   200*   201*   202*   203*   204*   205*   206*   207*   208*   209*   210*   211*   212*   213*   214*   215*   216*   217*   218*   219*   220*   221*   222*   223*   224*   225*   226*   227*   228*   229*   230*   231*   232*   233*   234*   235*   236*   237*   238*   239*   240*   241*   242*   243*   244*   245*   246*   247*   248*   249*   250*   251*   252*   253*   254*   255*   256*   257*   258*   259*   260*   261*   262*   263*   264*   265*   266*   267*   268*   269*   270*   271*   272*   273*   274*   275*   276*   277*   278*   279*   280*   281*   282*   283*   284*   285*   286*   287*   288*   289*   290*   291*   292*   293*   294*   295*   296*   297*   298*   299*   300*   301*   302*   303*   304*   305*   306*   307*   308*   309*   310*   311*   312*   313*   314*   315*   316*   317*   318*   319*   320*   321*   322*   323*   324*   325*   326*   327*   328*   329*   330*   331*   332*   333*   334*   335*   336*   337*   338*   339*   340*   341*   342*   343*   344*   345*   346*   347*   348*   349*   350*   351*   352*   353*   354*   355*   356*   357*   358*   359*   360*   361*   362*   363*   364*   365*   366*   367*   368*   369*   370*   371*   372*   373*   374*   375*   376*   377*   378*   379*   380*   381*   382*   383*   384*   385*   386*   387*   388*   389*   390*   391*   392*   393*   394*   395*   396*   397*   398*   399*   400*   401*   402*   403*   404*   405*   406*   407*   408*   409*   410*   411*   412*   413*   414*   415*   416*   417*   418*   419*   420*   421*   422*   423*   424*   425*   426*   427*   428*   429*   430*   431*   432*   433*   434*   435*   436*   437*   438*   439*   440*   441*   442*   443*   444*   445*   446*   447*   448*   449*   450*   451*   452*   453*   454*   455*   456*   457*   458*   459*   460*   461*   462*   463*   464*   465*   466*   467*   468*   469*   470*   471*   472*   473

同时能够拜访我的GitHub上的Vim配置文件备份我的项目,下面还有文中所有的配置文件


16 Vim 在Linux下的配置

与Windows配置大体雷同,略做批改,吧Vim-Plug下的有win的插件删除,间接装置,留神的是局部插件的配置办法不同

  1. catag 不用下载解压略,之家Pacman装置即可
  2. YCM 装置后进入Pluged - you… - 间接运行./install.py 不用下载VsBuild
  3. XKB插件 将Plug 'DeXP/xkb-switch-win'改为Plug 'grwlf/xkb-switch'装置,进入Pluged - xkb - 运行如下
`mkdir build && cd buildcmake ..make` *   1*   2*   3
`sudo ldconfigsudo make install` *   1*   2

看起来就像是代码没写完,略去略一堆,然而实际上就是这样的

  1. 字体设置那行删除掉
  2. 滚动设置删除
  3. Linux下切换ESC与CapsLock

在~/.Xmodmap写入

`! Swap caps lock and escaperemove Lock = Caps_Lockkeysym Escape = Caps_Lockkeysym Caps_Lock = Escapeadd Lock = Caps_Lock` *   1*   2*   3*   4*   5

测试

`exec xmodmap ~/.Xmodmap` *   1

能够的话还要退出自启动

  1. KDE桌面的办法,当然间接autostart退出.sh即可
  2. i3wm的办法(前面会用到)
    ~/.config/i3/config写入
`exec xmodmap ~/.Xmodmap` *   1

谨记:Vim是一款工具,应用VIM是为了放慢您的Coding效率的,不要配置比应用的工夫还长