关于vim:Vim使用全指南-环境配置插件推荐美化-CPythonMarkDownR

48次阅读

共计 50340 个字符,预计需要花费 126 分钟才能阅读完成。

提醒 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 ~]$ ed
i                           # Enter input mode
Hello world!

Isn't it a nice day?
.                           # Finish input
1,2l                        # List lines 1 to 2
Hello world!$
$
2d                          # Delete line 2
,l                          # List entire buffer
Hello world!$
Isn't it a nice day?$
s/nice/terrible/g           # Substitute globally
,l
Hello world!$
Isn't it a terrible day?$
w foo.txt                   # Write to foo.txt
38                          # (bytes written)
q                           # Quit
[sinclairtarget 10:50 ~]$ cat foo.txt
Hello 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 nocompatible
filetype on
filetype indent on
filetype 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=4
set 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=indent
set 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 Menu
set guioptions-=T   "Hide Tool-Bar
set guioptions-=r   "hide right scroll
set guioptions-=b   "hide buttom scoll
set 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 "+y
nmap <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>h
map <A-j> <C-w>j
map <A-k> <C-w>k
map <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>H
map 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! :-("
    endif
endfunc

func! 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! :-("
    endif
endfunction` 

*   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 notsupport
Plug 'DeXP/xkb-switch-win'                  "neoivm norsupport` 

*   1
*   2

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

`let g:XkbSwitchEnabled     = 1
let 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
" 开启 tabline
let 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 = 1
let g:ale_set_highlights = 0
" 自定义 error 和 warning 图标
let g:ale_sign_error = '❌'
let g:ale_sign_warning = '????'
" 在 vim 自带的状态栏中整合 ale
let 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>cc
map <A-m> <leader>cu
unmap <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/YouCompleteMe
autocmd 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 = 1
let 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=1
let Tlist_Exit_Onluwindow=1
map <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 = 0
let g:autoformat_retab = 0
let g:autoformat_remove_trailing_spaces = 0
noremap <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 = 1
let g:cpp_member_variable_highlight = 1
let g:cpp_class_decl_highlight = 1
let g:cpp_experimental_simple_template_highlight = 1
let g:cpp_experimental_template_highlight = 1
let 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 = 1
let g:pymode_options = 1
" 显示容许的最大长度的列
let g:pymode_options_colorcolumn = 1
" 设置 QuickFix 窗口的最大,最小高度
let g:pymode_quickfix_minheight = 3
let g:pymode_quickfix_maxheight = 10
" 应用 python3
let 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 = 1
let g:pymode_doc_bind = 'K'
" 自动检测并启用 virtualenv
let 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 = 0
let 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 = 1
let g:pymode_rope_complete_on_dot = 1
let 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 = 1
let 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 Path
let 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=1
let 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 = 1
let g:vmt_auto_update_on_save = 0
let 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=0
let 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$')
endfunction

inoreabbrev <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
" 将执行抉择的多行映射并输入内容隐射为 ,e
vmap ,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_base
let mapleader = "<space>"          "change leader key
language C                          "Using English
set nocompatible                    "Compaty vi..
filetype on
filetype indent on
filetype plugin on
set mouse=a                         "Mouse enable
let &t_ut=''set expandtab"Convent Tab to space
set tabstop=4                        "Tab config
set shiftwidth=4
set softtabstop=4
set list                            "Show'$' at cursor
set listchars=tab:▸ ,trail:▫        "Show Tab & space
set scrolloff=5                        "At least n row before/after cursor
set backspace=indent,eol,start        "Let Backspace cross row
set foldmethod=indent                "fold
set foldlevel=99
let &t_SI = "<Esc>]50;CursorShape=1x7"    "Theme of cursor
let &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 cursor
set 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 Menu
set guioptions-=T   "Hide Tool-Bar
set guioptions-=r   "hide right scroll
set guioptions-=b   "hide buttom scoll
set guioptions-=L   "hide left scroll

set number            "row number
set relativenumber"relative row number
set cursorline        "hilight line cursor
set cursorcolumn    "hilight colum cursor
set wrap            "autowrap
set showcmd            "show point out
set wildmenu
set hlsearch        "search hilight
exec "nohlsearch"    
set incsearch        "real time search hilight
set ignorecase        "ignore text-transform
set smartcase        "smart text-transform

vnoremap <Leader>y "+y
nmap <Leader>p "+p
map 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>h
map <A-j> <C-w>j
map <A-k> <C-w>k
map <A-l> <C-w>l
map <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>H
map sv <C-w>t<c-W>K

map tu :tabe<CR>
map tc :tabc<CR>
" Move around tabs with tn and ti
map tp :-tabnext<CR>
map tn :+tabnext<CR>
" Move the tabs with tmn and tmi
map 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! :-("
    endif
endfunc

func! 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! :-("
    endif
endfunction

"===================================="=== Plug config ====================
"===================================="------- xkb-switch --------
"copy dll to $VIM, and note bit
let g:XkbSwitchEnabled     = 1
let 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
" 开启 tabline
let 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 need
let g:autoformat_autoindent = 0
let g:autoformat_retab = 0
let g:autoformat_remove_trailing_spaces = 0
noremap <F3> :Autoformat<CR>
let g:autoformat_verbosemode=1

"------- nerdcommenter -----
map <C-m> <leader>cc
map <A-m> <leader>cu
unmap <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 = 1
let g:ale_set_highlights = 0
" 自定义 error 和 warning 图标
let g:ale_sign_error = '❌'
let g:ale_sign_warning = '????'
" 在 vim 自带的状态栏中整合 ale
let 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 Plug
let g:vim_markdown_math = 1
let g:vmt_auto_update_on_save = 0
let g:mkdp_path_to_chrome = "C:Program Files (x86)GoogleChromeApplication"
let g:mkdp_markdown_css=''"------- MDTable -----------"||+esc
let g:table_mode_corner = '|'
let g:table_mode_border=0
let 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$')
endfunction

inoreabbrev <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 Path
let 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=1
let g:tex_conceal='abdmg'

"------- YCM ---------------
set runtimepath+=~/.vim/plugged/YouCompleteMe
autocmd 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 = 1
let 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 = 1
let g:pymode_options = 1
" 显示容许的最大长度的列
let g:pymode_options_colorcolumn = 1
" 设置 QuickFix 窗口的最大,最小高度
let g:pymode_quickfix_minheight = 3
let g:pymode_quickfix_maxheight = 10
" 应用 python3
let 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 = 1
let g:pymode_doc_bind = 'K'
" 自动检测并启用 virtualenv
let 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 = 0
let 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 = 1
let g:pymode_rope_complete_on_dot = 1
let 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 = 1
let 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 = 1
let g:cpp_member_variable_highlight = 1
let g:cpp_class_decl_highlight = 1
let g:cpp_experimental_simple_template_highlight = 1
let g:cpp_experimental_template_highlight = 1
let 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 mirror
let Tlist_Use_Right_Window=1 
let Tlist_Inc_Winwidth=0 
let Tlist_File_Fold_Auto_Close=1
let Tlist_Exit_Onluwindow=1
map <F4> :TlistToggle<cr>              

"==================================="=== VIM-Plug ======================
"===================================
call plug#begin('~/.vim/plugged')
Plug 'lyokha/vim-xkbswitch'                 "neovim notsupport
Plug 'DeXP/xkb-switch-win'                  "neoivm norsupport
Plug '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 build
cmake ..
make` 

*   1
*   2
*   3

`sudo ldconfig
sudo make install` 

*   1
*   2

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

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

在~/.Xmodmap 写入

`! Swap caps lock and escape
remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add 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 效率的,不要配置比应用的工夫还长

正文完
 0