12个VIM编辑器的高级玩法

vim 是一个很好用的编辑器,应用十分广泛。但关于 vim,总有一些你不知道的事情,我们需要持续不断的学习。

我经常使用 vim,也经常在各大社区、论坛看到 vim 专家用户分享经验,今天我们就总结其中常用的一部分,分享给大家。

1,使用内置帮助(built-in help)

使用 vim 的内置帮助是一个好习惯(虽然很多朋友更喜欢在网上搜索相关的使用方法)。查看帮助的语法如下表格所示:

前缀例子说明
::help :w有关 :w 命令的帮助
none:help j有关“j”键在正常模式上下文中的帮助
v_:help v_J有关在上下文中使用“J”键到视觉模式的帮助
i_:help i_<Esc>有关在上下文中使用“Esc”键插入模式的帮助
/:help /\n有关搜索模式“\n”的帮助

2,以普通用户身份打开,以 root 用户身份保存

在编辑系统文件或者受权限保护的文件的时候,很容易会忘记在 vim 编辑之前添加 sudo,这样将会以只读模式打开文件,也就是编辑后不能保存。

但是这时候,你可能已经对文件做了一些修改(尚未保存),很显然,强制退出不是一个好选择。

在这些情况下,在 vim 中键入以下命令:

:w !sudo tee %

键入此命令后,将要求您输入sudo命令的密码,然后文件就可以保存了。

注:我们应该使用 sudoedit 命令而不是 sudo vim 来编辑需要超级用户权限的文件。

我们将上述命令拆解来看下:

  • :w - 这是写入命令。由于没有给出参数,vim 将把整个文件写入标准输出;

  • !sudo - 将 sudo 命令作为 shell 命令而不是 vim 命令运行;

  • tee - tee命令用于读取标准输入并将其写入标准输出或文件;

  • % - vim 将其替换为您正在编辑的当前文件的名称。

:w 命令将整个文件写入 STDOUT(标准输出);然后,我们使用sudo命令(因为我们编辑的毕竟是一个系统文件)来获得临时权限。

百分号(%)表示文件名,tee 命令从 STDOUT 获取 vim 的输出并将其写入 % 文件。

这基本上适用于 <Vim's STDOUT> | sudo tee /etc/ssh/sshd_config,有点复杂...

3,将所有空格转为制表符(或者反过来)

我们都喜欢使用制表符(tab)或者空格,但是,如果我们正在编辑的文本其缩进使用的符号正好与我们的习惯相反,该怎么办?

3.1 将所有空格转换为制表符

如果当前文件使用空格缩进文本,希望将它们转换为制表符时,需要运行如下两个 vim 命令:

:set noexpandtab:retab!

这样做会将所有空格转换为其等效的制表符。如果文档使用两个空格作为缩进宽度,它们将转换为1个制表符。如果 4 个空格用作单个缩进宽度时,这 4 个制表位将替换为 1 个制表字符。

3.2 将所有制表符转换为空格

如果要编辑的文件使用制表符缩进,并且要将制表符转换为空格,则需要运行如下4个 vim 命令:

:set expandtab:set tabstop=4:set shiftwidth=4:retab

第一个命令(expandtab)告诉 vim 使用空格展开 tab,第二个命令(tabstop)设置使用多少个空格用作一个“缩进块”。

在我们的例子中,我们定义了“1个tab=4个空格”;当使用>>运算符时,shiftwidth 命令用于控制缩进,这也被设置为4个空格。

最后,retab 命令将所有制表符(用于缩进)转换为空格。

4,缩进所有行

错误的缩进,在 python 或者 YAML 程序中会报错,导致程序不能正确运行。

要缩进所有行,按 gg 键到达文件顶部,然后按 = 键表示“缩进”,最后按 G 键表示到“最后一行”。

这样将会自动缩进,从第一行到最后一行。

如下图所示,我使用 :gg=G命令缩进的演示:

图片

正如你所看到的(从这个有限的预览中),所有行都正确缩进。

5,粘贴代码时保留缩进

我们都有过在互联网上复制代码的时候。当将代码粘贴到文件中时,缩进都给弄乱了,这时候需要怎样做呢?

为了避免这种情况,请在 .vimrc 文件中添加以下代码:

set pastetoggle=<F2>

对 vimrc 文件进行如上更改后,在粘贴代码之前按 F2 键,这样做将确保代码粘贴正确的缩进。

6,以正确的缩进深度开始书写

假设光标在第一行第一列,但是所要写的内容需要缩进,那在不按下制表符(tab)和空格键的情况下,应该怎样做呢?

答案是在正常模式下按下 S 键。

当光标位于行的第一列时,按 Esc 键进入正常模式。然后按 S(大写)键,这会将光标移动到适当的缩进深度,并自动进入“插入”模式,以便开始键入。

图片

上图,我的光标位于第一列,通过按S键,光标移动到正确的缩进深度,Vim从正常模式切换到插入模式。

7,保存文件前显示差异

我们可能遇到过这样的情况:我修改了这个文件,但是忘记都做了哪些修改了,并且我担心其中有些地方可能修改错了。

解决此问题的方法是查看缓冲区和文件之间的差异。可在 vim 中执行如下命令:

:w !diff % -

我们将上述命令拆解来看:

  • :w  用于保存/写入,在这个特定场景中,如果命令中没有指定文件名,则输出将写入STDIN(标准输入)文件;

  • :!<command>  是执行 shell 命令的语法,在这个例子中,我们在 shell 中运行 diff 命令;

  • %  表示未修改的当前文件的名称;试试这个::!echo %

  • - 是 diff 命令的 STDIN 文件。

因此,该命令首先将所有[未保存]内容写入STDIN文件。然后diff命令读取当前文件(%)并将其与STDIN(-)文件进行比较。

这个命令大致等同于这个shell命令:diff <original-file> <Vim's STDOUT>

8,显示拼写错误

我们应该都使用过 Microsoft word,其拼写检查器在拼写错误的单词下会有一条红色的波浪线。

vim 也内置了拼写检查器,但默认情况下是关闭的。我们可以使用如下命令启用它:

:set spell

这样,你可能会看到拼写错误的单词被突出显示,其突出显示的方式取决于你的 vim 颜色方案。我在拼写错误的单词下面有一条白色下划线,如下图所示:

图片

要将这设置为 vim 的默认,可在 .vimrc 文件中添加如下配置:

set spell

9,显示行号

与许多 vim 用户一样,你可能喜欢在 vim 中显示行号。

有两种方法可以显示行号。一种是绝对行编号,在这种情况下,每行显示绝对行号,就像任何其他代码编辑器或IDE一样。

第二种是相对行号。在这种情况下,当前行的行号为0,其他行的行号为相比于光标所在行的相对数字。

这两种情况,也并不是只能选择一个,事实上,可以两种都要。

通过在 .vimrc 中添加以下行,可以在 vim 中启用“混合行编号”:

set number relativenumber

这将在光标所在行显示绝对行号,在其他行显示相对行号。如下图所示:

图片

当前光标位于第44行,因此该行显示绝对行号;其他行(光标上方和下方的行)显示相对行号。

10,使用 vim 打开文件的同时将光标定位在某一行

默认情况下,我们使用 vim 打开文件,光标总会在第一行。在某些时候,我们希望光标能够定位在我们指定的某一行,而不是第一行。

可以通过使用 +n(n为行号)选项来实现这一点,当然前提是你需要知道打开的文件总行数应大于或等于 n,如下:

vim +n <file-name>

11,使用可读的配色方案

当谈到使用配色方案时,人们通常会选择他们觉得最吸引人或最美观的配色方案。但是,当你作为一个代码编辑器兼 IDE 的 vim 时,最好放弃一些引人注目的东西,转而使用具有更好视觉指导的配色方案。

一个好的配色方案看起来很好,但是一个优秀的配色可以帮助你在颜色的帮助下轻松识别关键词、变量和其他标识符。

当然,每个人的喜好是不同的,配色当然也是不同的。我们在下图中贴出几个大家都觉得顺眼的方案,可以作为参考:

图片

图片

图片

12,在插入模式下删除文本

我们都知道,在正常模式(normal mode)下,可以使用 d 和 x 键删除文本,那么在插入模式下如何执行相同的操作(比如 dd)呢?

以下是常用的一些方案:

  • ctrl + w 删除前一个单词(字)(相当于正常模式下的 db);

  • ctrl + h 删除前一个字符;

  • ctrl  + u 删除当前行所有前面的字符(相当于正常模式下的 d0 );

  • ctrl  + k 删除当前行中所有主要字符(相当于正常模式下的 d$)。

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

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

相关文章

科普向丨语音芯片烧录工艺的要求

语音芯片烧录工艺要求烧录精度、速度、内存容量、电源稳定性、兼容性和数据安全性。这些要素需优化和控制以保证生产高效、稳定、安全并烧录出高质量的语音芯片。不同厂家生产的语音芯片在烧录工艺上存在差异&#xff0c;需相应设计和研发以实现兼容。 一、烧录精度 语音芯片烧…

hive排序

目录 order by (全局排序asc ,desc) sort by(reduce 内排序) Distribute by(分区排序) Cluster By&#xff08;当 distribute by 和 sorts by 字段相同时 &#xff0c;可以使用 &#xff09; order by (全局排序asc ,desc) INSERT OVERWRITE LOCAL DIRECTORY /home/test2 …

城市综合管廊运维的系统集成方案

摘 要&#xff1a;从网络拓扑结构、开放式实时以太网协议、控制层系统配置方面介绍了综合管廊的系统网络架构设计&#xff0c;分析了无线网络特性&#xff0c;阐述了基于HTML5架构所能实现的功能的初步构想&#xff0c;以便于综合管廊运维人员巡检&#xff0c;确保管廊本体安全…

2023年(2024届)双非保研历程(中南、东南、浙大、信工所、国防科大、北邮)

个人情况 学校层次&#xff1a;双非 专业&#xff1a;信息安全&#xff08;投的基本都是网安&#xff09; 排名&#xff1a;2/66 英语&#xff1a;六级565&#xff0c;四级560 竞赛&#xff1a;大英赛国三、美赛H、蓝桥杯省一、数竞省一、词达人省一、数模国赛省三。 论文&…

第二证券:国际油价大幅上涨 后市恐难持续走高

上个买卖周&#xff0c;受巴以冲突影响&#xff0c;原油商场成为各方关注的焦点。到上星期五收盘&#xff0c;布伦特原油周内涨幅达7%以上&#xff0c;为本年2月以来最大周涨幅&#xff0c;WTI原油周内累计上涨近6%。业内人士认为&#xff0c;其时地缘要素是导致油价出现异动的…

语音识别whisper的介绍、安装、错误记录

介绍 Whisper是OpenAI于2022年9月份开源的通用的语音识别模型。它是在各种音频的大型数据集上训练的模型&#xff0c;也是一个可以执行多语言语音识别、语音翻译和语言识别的多任务模型。 论文链接&#xff1a;https://arxiv.org/abs/2212.04356 github链接&#xff1a;https:…

关于京东API数据接口业务的详细介绍

参数说明 通用参数说明 url说明 https://…….cn/平台/API类型/ 平台&#xff1a;淘宝&#xff0c;京东等&#xff0c; API类型:[item_search,item_get,item_search_shop等]version:API版本key:调用key,测试key:test_api_keysecret:调用secret,测试secret:(不用填写)cache:[ye…

2023年中国城市矿产行业产值及发展趋势分析[图]

城市矿产是指工业化和城镇化过程中产生和蕴藏于废旧机电设备、电线电缆、通讯工具、汽车、家电、电子产品、金属和塑料包装物以及废料中&#xff0c;可循环利用的钢铁、有色金属、贵金属、塑料、橡胶等资源。 开展“城市矿产”示范基地建设是缓解资源瓶颈约束&#xff0c;减轻环…

第二证券:券商etf的买卖规则?

在当时迅速发展的证券商场中&#xff0c;ETF已经成为出资者的首选。ETF&#xff08;Exchange Traded Fund&#xff09;是一种证券东西&#xff0c;它被规划成类似于股票的生意办法。即出资者可以在证券生意所上以股票办法进行购买和出售。详细到券商ETF的生意规矩&#xff0c;咱…

【数据结构】双链表的相关操作(声明结构体成员、初始化、判空、增、删、查)

双链表 双链表的特点声明双链表的结构体成员双链表的初始化带头结点的双链表初始化不带头结点的双链表初始化调用双链表的初始化 双链表的判空带头结点的双链表判空不带头结点的双链表判空 双链表的插入&#xff08;按值插入&#xff09;头插法建立双链表带头结点的头插法每次调…

前端代码优化之从系统区分处理的业务场景看如何优化代码中的if判断

最近有个三端统一的技术场景&#xff0c;主要是以前移动端的 hybrid 网页在不考虑 UI 适配的情况下、期望能够直接在 PC 客户端投放。在评估修改面的时候发现了一段可以深思的代码&#xff1a; if (platform iphone) {location.href iphoneClientUrl; } else {location.href…

Webpack和JShaman相比有什么不同?

Webpack和JShaman相比有什么不同&#xff1f; Webpack的功能是打包&#xff0c;可以将多个JS文件打包成一个JS文件。 JShaman专门用于对JS代码混淆加密&#xff0c;目的是让JavaScript代码变的不可读、混淆功能逻辑、加密代码中的隐秘数据或字符&#xff0c;是用于代码保护的…

LED显示屏高刷新率和低刷新率有什么区别

LED显示屏的刷新率是指图像在LED显示屏上更新的速度&#xff0c;也即屏幕上的图像每秒钟出现的次数&#xff0c;它的单位是赫兹&#xff08;Hz&#xff09;。LED显示屏的刷新率越高&#xff0c;图像闪烁感就越小&#xff0c;稳定性也就越高&#xff0c;换言之对视力的保护也越好…

图片批处理工具 PhotoMill X直装 for mac

PhotoMill X是一款强大的图像处理软件&#xff0c;它可以帮助用户快速地对照片进行编辑、调整和转换。它支持在单个或批量模式下处理大量的图像文件&#xff0c;并具有直观的用户界面和易于使用的工具。 PhotoMill X具有的功能有&#xff1a; 裁剪、缩放、旋转、调整明暗度、…

python+django学生选课管理系统_wxjjv

1&#xff09;前台&#xff1a;首页、课程信息、校园论坛、校园公告、个人中心、后台管理。 &#xff08;2&#xff09;管理员&#xff1a;首页、个人中心、学生管理、教师管理课、程信息管理、课程分类管理、选课信息管理、作业信息管理、提交作业管理、学生成绩管理、校园论…

国际伦敦银点差费值得吗?

伦敦银是国际轨技术属市场上广受追捧的白银保证金交易品种&#xff0c;具有交易时长、交易制度灵活、资金利用率高等诸多的优点。 国际伦敦银的优势主要来自它所实行的是保证金交易制度。目前香港平台一般执行的保证金比例标准是2%&#xff0c;以目前22美元/盎司左右的白银价格…

epiiAdmin框架注意事项

1&#xff0c;epiiAdmin文档地址&#xff1a; 简介/安装 EpiiAdmin中文文档 看云 2&#xff0c;项目性想新建模块 composer.json文件——autoload选项——psr-4下增加模块名称&#xff0c;然后执行composer update命令。 "autoload": {"psr-4": {"…

代理现货白银有什么手续

成为现货白银代理商的好处有很多&#xff0c;一方面打理依然可以像普通投资者那样&#xff0c;采用平台的交易服务&#xff0c;直接在市场上通过交易&#xff0c;赚取高杠杆所带来的高回报&#xff0c;另一方面还可以根据自己客户的交易量&#xff0c;从平台获得一定的返佣&…

【剑指Offer】28.对称的二叉树

题目 给定一棵二叉树&#xff0c;判断其是否是自身的镜像&#xff08;即&#xff1a;是否对称&#xff09; 例如&#xff1a;下面这棵二叉树是对称的 下面这棵二叉树不对称。 数据范围&#xff1a;节点数满足 0≤n≤1000&#xff0c;节点上的值满足 0∣val∣≤1000 要求&am…

第二证券:市净率高好还是低好?

市净率是一个衡量公司股票投资价值的指标&#xff0c;通过比较公司股票价格和公司每股净资产的比值来评估公司股票的估值水平。市净率高好还是低好这个问题并没有一个简单的答案&#xff0c;取决于具体的市场环境和投资者的需求。本文将从多个角度分析市净率高好还是低好。 首…