一、导论

对于不用vim的人来说,vim简直是个噩梦,复杂的指令、丑陋的界面、令人头痛的配置文件,任何一项都足以劝退一大波人,但是对于已经习惯了使用vim的人来说,vim简直就是马良神笔,似乎vim除了生孩子什么都可以做。

虽然从定义来说,vim只是编辑器并非编译器,但是它强大的扩展性给它带来了无限的可能,丰富的插件和独特的配置语法让它在许多程序员心中有了一席之地。

但是众所周知一般都是在Linux工作的人才有可能使用vim,换到Windows下使用vim就需要下载其他软件来间接的使用vim,比如WSL或者Git Bash、VSCode。然而接下来我就来介绍如何在VSCode下安装和配置VIM

二、VSCode安装vim插件

在vscode的扩展商店中搜索vim,安装第一个插件,这个插件可以完成大部分原生vim的操作。

三、配置vim

安装完成以后我们需要配置vim,原生的vim有一部分操作十分的不友好,我们常常需要改键配置合适自己的vim。我们通常在setting.json中配置vscode,如果不知道如何打开setting.json可以点开文件->首选项->设置->文本编辑器,向下拉找到“在setting.json中编辑”。

如下图所示

配置语法

接下来来讨论一下如何编写配置,与原始vim不同的是,在原生vim中的配置语法是独属于vim的,但是在vscode中使用的是json格式,json格式是一种轻便易读的格式,如果不了解的同学可以提前学习一下。

如果是第一次配置setting.json的同学,里面应该是没有多少内容,最多几行简单配置。在最后一句配置语句后面打上一个逗号,然后开始新起一行准备写vim配置文件,如下所示。

{//默认状态下setting.json文件内容 Begin"editor.fontSize": 20,"C_Cpp.updateChannel": "Insiders","files.autoGuessEncoding": true,"[c]": {"editor.defaultFormatter": "ms-vscode.cpptools"},//默认状态下setting.json文件内容 End//关于vim的配置文件"vim.commandLineModeKeyBindingsNonRecursive": [],"vim.insertModeKeyBindings": [],"vim.normalModeKeyBindingsNonRecursive": []
}

  1. vim.commandLineModeKeyBindingsNonRecursive指的是命令行模式非递归键位绑定,在原生vim中等同于norecmap。
  2. vim.insertModeKeyBindings指的是插入模式下键位绑定,在原生vim里面指的是imap。
  3. vim.normalModeKeyBindingsNonRecursive指的是普通模式下非递归键位绑定,在原生vim中是noremap。

插入模式下键位修改

我这里把esc键映射为jj,意思是在插入模式下,按下两次j会回到正常模式、按下大写s可以保存当前文件、按下大写q可以关闭当前文件。这vim的配置文件中,可以兼容原生vim指令和vscode命令,"workbench.action.files.save" 属于vscode命令,":q!" 属于原生vim命令。如果想修改其他键位可以根据下面的语法规则进行修改测试。

以下内容只是作为示例,不推荐大家使用大写s和q作为保存和退出,因为在编写程序的时候,我们可能就需要到大写s和q,我建议是先退出到普通模式再保存退出

"vim.insertModeKeyBindings"

正常模式下键位修改

这里我通过按下leader键+s 可以保存当前文件、按下leader+q关闭文件、按下leader+sq 保存并退出文件。在下面我会提到leader键的设置。

 "vim.normalModeKeyBindingsNonRecursive": [{"before": ["<leader>", "s"],"commands":[":w!"]},{"before": ["<leader>", "q"],"commands":[":q!"]},  {"before": ["<leader>", "sq"],"commands":[":wq!"]}],

leader键位设置和取消vim键位映射

leader在vim中的意思是“前缀”的意思,和tmux中的Ctrl+b是一个意思,可以通过自定义leader键,来构建自己需要的组合快捷键。

在这里我把leader键位映射为空格键<space>。

在vscode里面使用vim有时候vscode原生键位比vim原生键位要舒服一些,我们可以取消到vim里面的键位映射来使用vscode的键位。

比如下面我取消掉了Ctrl+a,Ctrl+f,Ctrl+n在vim中的键位映射,这样子在写代码的时候,我按下Ctrl+a,Ctrl+f,Ctrl+n就可以使用vscode中的全选,查找和新建。

 "vim.leader": "<space>","vim.handleKeys": {"<C-a>": false,"<C-f>": false,"<C-n>": false
}

我在vim中设置了相对行号,这样子在进行跳转的时候就可以精确定位行数而且不需要数行号,比如我当前在16行,我想跳到“//关于vim的配置文件”这一句,我只需要在普通模式下按下6h,就会自动跳到16-6行。

设置方法:

 "editor.lineNumbers":"relative"

有意思的是,如果在vscode中我们找不到对应的设置语句,可以先指定一个键位,在映射到对应的vim命令,然后执行这个命令,比如我在设置相对行号的时候找不到对应的vscode命令,我就可以这样子做:

 "before": ["<leader>", "<leader>"],"commands":[":set relativenumber"]//vim下相对行号设置命令

这样子在使用完这个命令以后就可以删掉这句配置语句同时保留这个设置。

如下图

结束语

我们没必要纠结那个编辑器厉害或者有没有用,不同的人适合不同的编辑器,我们可以不喜欢,但是应该尊重别人的想法。在浏览大量代码的时候,使用鼠标无疑更舒服,但是在编写程序的时候vim可以来带更高效的操作。

希望这篇文章能够给需要的同学带来帮助。

感谢观看。

vscode 逗号不换行_在VSCode里面配置Vim正确姿势(细节解析)相关推荐

  1. 行号 设置vim_在VSCode里面配置Vim正确姿势(细节解析)

    一.导论 对于不用vim的人来说,vim简直是个噩梦,复杂的指令.丑陋的界面.令人头痛的配置文件,任何一项都足以劝退一大波人,但是对于已经习惯了使用vim的人来说,vim简直就是马良神笔,似乎vim除 ...

  2. vscode 逗号不换行_来自一个插件的疯狂夸赞,VS Code「彩虹屁」插件问世,网友:我想要郭德纲版...

    听说有人开发了「虚拟程序员鼓励师」,安装使用后的我疯狂捶墙,导致我家变成了单间. 机器之心报道,机器之心编辑部. 你可能从未想过,会有这么一个人: 对你写的每一行代码都不吝夸赞,知道你什么时候想骂人, ...

  3. vscode 逗号不换行_你肯定不知道的,苹果手机输入法小技巧,大大提高我们打字效率哦...

    Iphone手机因为它的IOS系统,是很多人选择苹果手机的原因.Iphone手机用了这么久,可能大多数人都对ihpone手机技巧了如指掌,今天我们就来分享几个较冷门的实用小技巧,你不一定全都知道哦. ...

  4. vscode 逗号不换行_苹果手机九宫格怎么换行 苹果手机九宫格换行操作步骤

    苹果手机九宫格怎么换行?还有部分小伙伴还不知道方法,下面小编就来给大家演示一下,快来学习吧. 苹果手机九宫格怎么换行 苹果手机九宫格换行操作步骤 工具/原料 演示手机:iphone11系统版本:iOS ...

  5. python环境变量配置_?Python项目读取配置的正确姿势

    读取配置是大部分python应用都会面临的问题,例如应用运行时需要读取数据库的配置,存储文件需要知道文件路径配置,应用在不同的环境的配置也不尽相同.因此,配置管理是一个必不可少的问题,配置读取的方式一 ...

  6. vscode java settings设置_兼容vscode插件的主题服务

    背景介绍 今年有幸参与了 IDE 共建项目组,负责主题服务的设计实现.说到主题服务,我们可能立马会想到 VSCODE 丰富的主题生态.VSCODE 有着庞大的插件市场,主题插件是其中非常重要的一部分. ...

  7. vscode 全项目替换_利用vscode插件提升前端国际化开发效率

    1. 起因 国际化是我们目前开发工作中非常重要的一环.对于老项目,我们可以通过便捷的方式对中文文案进行批量国际化:但是对于新增的功能或者模块开发,一般还是开发同学对文案逐个进行国际化.我自己的开发流程 ...

  8. vscode 新建cpp文件_利用vscode搭建c

    利用vscode搭建c/c++开发平台 Visualstudio是微软公司专为程序开发人员推出的开源代码编辑器,其具有跨平台,轻量化的特点,可作为轻量化的开发平台使用,通过配置设置,可作为LiteCo ...

  9. vscode输入vue自动_使用vscode,新建.vue文件,tab自动生成vue代码模板

    第一步: 新建模板并保存 文件 --> 首选项 --> 用户代码片段 --> 输入vue,选择vue.json -->复制 第三步中的模板内容中内容保存 第二步: 添加配置,让 ...

最新文章

  1. JSP项目_Web路径_磁盘物理路径
  2. OBS集成WebRTC
  3. str转list_数据运算030篇字符串处理str_dec的局限
  4. MySQL数据库:drop、truncate、delete的区别
  5. 前端学习(1418):服务器响应的数据格式
  6. dp线和hdmi区别_HDMI铜线与光纤线有啥区别?为什么铜线传播速度更快?看完涨知识...
  7. firstchild.data与childNodes[0].nodeValue意思
  8. java preference,Java使用Preference类保存上一次记录的方法
  9. IT企业是如何选择容器管理平台的
  10. 大疆aeb连拍_大疆 AIR2 玩机(一)包围曝光及后期处理
  11. 屏幕为什么要正负压供电_焦炉煤气脱硫为什么要选择负压脱硫工艺?
  12. VsVim - Shortcut Key (快捷键)
  13. 导出到word时,报错
  14. html背景图片被白色覆盖,html – CSS背景图片淡出白色
  15. Could not start AVD
  16. CCF数据库专委会杜小勇:数据库40年激荡历程
  17. mysql python 2.7.14_python 2.7.14安装包下载|
  18. android ip地址,手机号码,邮箱格式验证
  19. 哪些是性价比高的骨传导蓝牙耳机,五款骨传导蓝牙耳机推荐
  20. KSO - Vue2的生命周期的个人理解

热门文章

  1. python使用psutil获取系统(Windows Linux)所有运行进程信息实战:CPU时间、内存使用量、内存占用率、PID、名称、创建时间等;
  2. K近邻(KNN)算法是基于实例的算法,如果训练样本数量庞大,预测的时候挨个计算距离效率会很低下,如何破解?
  3. 编译+构建+链接+运行之间的关系分析
  4. angular4创建html,angular 4减少html内容
  5. 项目快速开发的几点感悟
  6. (邓爱萍)类 对象 例题
  7. vue文件快速生成模板代码
  8. 动手学深度学习笔记一线性回归
  9. 目标检测--Wide-Residual-Inception Networks for Real-time Object Detection
  10. java转换ip地址格式转换_Java编程IP地址和数字相互转换代码示例