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

一、导论

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

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

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

二、VSCode安装vim插件

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

4ae739d709ada6ea3c3d8185a35a2f9a.png

三、配置vim

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

如下图所示

fd293784279e63c3bb90eecfcaa11e99.png

配置语法

接下来来讨论一下如何编写配置,与原始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": [{"before": ["j", "j"],"after": ["<Esc>"]},{"before": ["S"],"commands": ["workbench.action.files.save"]},{"before": ["Q"],"commands": [":q!"],}],

正常模式下键位修改

这里我通过按下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下相对行号设置命令

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

如下图

d8d20b76ef84debe6f6a742a31c965ad.png

结束语

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

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

感谢观看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Spring 3 MVC处理表单验证

本文是有关Spring 3的系列文章的一部分。该系列的早期文章是使用Spring 3 MVC的Hello World和使用Spring 3 MVC的 Handling Forms 。 现在让我们更深入地研究Spring。 在本文中&#xff0c;我们将学习验证从表单中获取的数据。 让我们更仔细地看一下验证任务。 场景1 &#xf…

当事人角色 变更映射策略引起的问题

IBeamMDAA V2版本中&#xff0c;由于变更了 当事人角色 的继承机制&#xff0c;在添加 当事人角色时&#xff0c;为了 构建 当事人-当事人角色之间的关系&#xff0c;代码如下&#xff1a;//if (party.PartyRoles ! null && !party.PartyRoles.Contains(sysUser))//{//…

vs xxxxx nuget配置无效

重启vs转载于:https://www.cnblogs.com/zinan/p/7080668.html

巡回沙龙_美浮特全国巡回沙龙第一期结束撒花!

科技美肤&#xff0c;无龄焕变。美浮特2019全国美肤巡回沙龙第一期活动圆满结束&#xff01;优秀的小伙伴&#xff0c;雅致的茶歇环境&#xff0c;精美的甜点小食&#xff0c;理论与体验并行的肤感测试课堂……不知道是哪一个环节给大家留下了深刻的印象呢&#xff1f;首先让我…

Spring与网关的集成

这是有关Spring Integration系列的第二篇文章。 本文以我们介绍Spring Integration的第一篇文章为基础。 上下文设置 在第一篇文章中&#xff0c;我们创建了一个简单的Java应用程序&#xff0c;其中 通过频道发送了一条消息&#xff0c; 它被服务&#xff08;即POJO&#xf…

UIAutomation识别UI元素

MS UI Automation&#xff08;Microsoft User Interface Automation&#xff1a;UIA&#xff09;是随.net framework3.0一起发布的&#xff0c;虽然在如今这个几乎每天都有各种新名词、新技术出来的所谓的21世纪&#xff0c;它显得已经有些过时了。前些日子&#xff0c;正好一个…

【C++第一个Demo】---控制台RPG游戏3【登陆菜单树】

【登陆系统--树结构】 1 首先我这里设计&#xff0c;由一个基类MainMenu构建树结构&#xff0c;并实现控制台上菜单之间的切换和返回操作 1 #ifndef _UI_BASE_H_2 #define _UI_BASE_H_3 4 #include <string>5 #include <vector>6 #include"..//Marco.h"7…

不存在_施文忠 | ”存在“与“不存在”——巴蜀文明概论

海德格尔有句名言&#xff1a;“存在者存在&#xff0c;不存在者不存在&#xff01;”四川&#xff0c;一个伟大的存在&#xff0c;偏偏存在于四川的口头禅却是“不存在”。在不存在中追求存在&#xff0c;在存在中摆脱存在。六月白鹿镇&#xff0c;书院学习了《李白与海德格尔…

Spring和JSF集成:异常处理

大多数JSF开发人员都会熟悉“发生错误”页面&#xff0c;当在他们的代码某处引发意外异常时&#xff0c;该页面就会显示。 该页面在开发时确实很有用&#xff0c;但对于生产应用程序通常不是您想要的。 通常&#xff0c;在用库存JSF替换此页面时&#xff0c;您有两种选择。 您可…

Altium 原理图出现元件“Extra Pin…in Normal of part ”警告的解决方法

转载于&#xff1a; http://blog.csdn.net/idoming/article/details/45575627 使用Altium Designer的时候编译完后&#xff0c;只关注过错误没有关注过警告&#xff0c;现在认真排查一下有哪些警告。 正在进行的项目原理图编译完成后提示标题中的警告信息。经过在网上搜索&…

XidianOJ 1087 浪漫的V8

题目描述 V8为了讨女朋友开心&#xff0c;给lx承包大活后面那个水塘。为了筹集资金&#xff0c;V8偷偷地溜进了一座古墓&#xff0c;发现在他面前有金光闪闪的若干小箱子&#xff0c;里面全都是金粉&#xff0c;作为横行于各种#&#xffe5;&场所的V8来说&#xff0c;辨别不…

curl php 模拟来源_php 使用curl模拟ip和来源进行访问的实现方法

对于限制了ip和来源的网站&#xff0c;使用正常的访问方式是无法访问的。本文将介绍一种方法&#xff0c;使用php的curl类实现模拟ip和来源&#xff0c;访问那些限制了ip和来源的网站。1.设置页面限制ip和来源访问server.php$client_ip getip();$referer getreferer();$allow…

堆栈C语言实现

堆栈的抽象数据类型描述&#xff1a; 类型名称&#xff1a; 堆栈&#xff08;Stack&#xff09;。数据对象集&#xff1a; 一个有 0 个或多个元素的又穷表。操作集&#xff1a; 长度为 max_size 的堆栈 S ∈ Stack&#xff0c; 堆栈元素 item ∈ ElementType。stack creatc_sta…

woocommerce 分类到菜单_Woocommerce商店显示分类

我是wordpress的新手, 所以如果我输入的语言错误, 请仍然为我提供帮助。我想使用woocommerce显示具有可变产品的商店, 我希望商店链接登录页面显示具有该类别特征图像的商店类别。我当前的商店页面显示所有产品, 并分页到其他产品页面, 我找不到所有产品的模板。当我进入wp-adm…

JBoss BRMS 5.3 –添加了业务活动监视(BAM)报告

自从JBoss BRMS 5.3产品发布以来&#xff0c;添加了jBPM 5 BPM组件的最常见问题之一是业务活动监视&#xff08;BAM&#xff09;和报告功能。 本文将引导您完成添加过程&#xff0c;但是请注意&#xff0c;在撰写本文时&#xff0c;这不是产品的受支持功能。 在JBoss BRMS 5.3上…

Zookeeper开源客户端框架Curator简介

Curator是Netflix开源的一套ZooKeeper客户端框架. Netflix在使用ZooKeeper的过程中发现ZooKeeper自带的客户端太底层, 应用方在使用的时候需要自己处理很多事情, 于是在它的基础上包装了一下, 提供了一套更好用的客户端框架. Netflix在用ZooKeeper的过程中遇到的问题, 我们也遇…

【树形DP】 HDU 2196 Computer

题意&#xff1a;求节点间的最大距离 先DFS一次 记录下 每一节点的子树下的最大距离&#xff08;DP[ u ] [ 0 ]&#xff09;和第二大距离&#xff08;DP[ u ] [ 1 ]&#xff09; 用DP[ v ] [ 2 ] 表示由v的父节点来的最大距离 再取DP[ u ] [ 0 ] 与 DP[ u ][ 2 ] 的最值 #inclu…

适当的Java堆大小的5个技巧

确定生产系统合适的Java堆大小不是一件容易的事。 在我的Java EE企业经验中&#xff0c;我发现由于Java堆容量和调整不足而导致的多个性能问题。 本文将为您提供5个技巧&#xff0c;这些技巧可以帮助您确定当前或新生产环境的最佳Java堆大小。 这些技巧中的一些对于预防和解决j…

pythondocumentation是什么_怎样阅读Python官方文档

如何阅读官方Python文档的初学者,因为他们没有相关的经验,学习语言通常是费时且劳动密集型和效果不是很好。下面简要介绍如何阅读官方文件。一旦你学会快速查询官方文件,学习效率会提高很多文档门户。如何阅读API文档中内容标准库,如何快速找到你想要的。第一种方法是先查找索引…

数据库过大无法导入

导SQL数据库结构数据时&#xff0c;如果数据是批量插入的话会报错&#xff1a;2006 - MySQL server has gone away。 解决办法&#xff1a;找到你的mysql目录下的my.ini配置文件&#xff0c;加入以下代码 max_allowed_packet500M wait_timeout288000 interactive_timeout 2880…