当前位置: 首页 > news >正文

Vim工具使用全攻略:从入门到精通

引言

在软件开发的世界里,Vim不仅仅是一个文本编辑器,它是一个让你的编程效率倍增的神器。然而,对于新手来说,Vim的学习曲线似乎有些陡峭。本文将手把手教你如何从Vim的新手逐渐变为高手,深入理解Vim的操作模式,并掌握一些实用的技巧。

 

Vim的基本概念

Vim,一款自诞生以来就以其强大和灵活性著称的文本编辑器,其独特之处在于它的模式化操作,这也是它与其他编辑器最大的不同。理解Vim的模式对于掌握Vim至关重要。

Vim的工作模式

Vim的工作方式大致可以分为三种基本模式,每种模式下的键入操作都有不同的含义,这三种模式分别是:

  1. 正常模式(Normal Mode):

    • 这是Vim的默认模式。在这个模式下,你可以使用快捷键执行复制、粘贴、移动、删除等操作。这些操作都是基于文本行或字符的,而不是用于输入文本。正常模式是Vim中最强大的模式,因为它提供了许多命令来快速修改文本。
  2. 插入模式(Insert Mode)

    • 在插入模式下,你可以输入文本。这个模式类似于其他文本编辑器的常态。在Vim中进入插入模式的方法有多种,包括但不限于按下i(在光标前插入)、I(在当前行首插入)、a(在光标后插入)、A(在当前行尾插入)、o(在当前行之下新开一行插入)、O(在当前行之上新开一行插入)等。
  3. 末行模式(Command-Line Mode or Last Line Mode)

    • 在末行模式下,你可以输入一些命令,比如保存文件、查找和替换文本、打开新文件或者退出Vim等。这个模式通常用于执行那些影响整个文档的操作。进入这个模式的方法是在正常模式下按下:,然后在屏幕底部的命令行中输入命令。
Vim的其他模式

除了上述三种基本模式外,Vim还有其他一些模式,包括但不限于:

  • 可视模式(Visual Mode)

    • 在这个模式下,你可以用光标选择文本块,然后执行复制、粘贴等操作。进入这个模式的方法是在正常模式下按v(字符选择)、V(行选择)或Ctrl + v(块选择)。
  • 替换模式(Replace Mode)

    • 这个模式允许你替换光标所在位置的字符。进入这个模式的方法是在正常模式下按R,然后每输入一个字符,就会替换掉光标下的字符。
  • 执行模式(Ex Mode)

    • 类似于末行模式,但用于执行更复杂的编辑命令。可以在正常模式下通过输入Q进入。
模式的转换

掌握Vim的关键之一是理解这些模式之间是如何相互转换的。例如,从正常模式进入插入模式可以通过多种方式,而从插入模式回到正常模式则通常是通过按ESC键。

理解并熟练运用这些模式及其转换,是提高在Vim中编辑效率的关键。Vim之所以强大,就在于它能够让用户通过不同的模式和命令组合来实现高效的文本编辑。

2:输入i进入插入模式:

 

此时可以正常输入文本,要想退出我们需要先输入ESC进入命令模式后输入shift+; (也就是:)进入底行模式 然后输入wq即可退出

 Vim的基本操作

掌握Vim的操作几乎等同于掌握了一种新语言。以下是一些基本而重要的操作,它们构成了使用Vim时的基础。

文件操作
  • 打开文件

    • 使用命令vim 文件名来打开或创建文件。如果文件不存在,Vim将会创建一个新文件并等待你的输入。
  • 保存文件

    • 在末行模式下,输入:w保存你的更改。如果你想另存为一个新文件,可以使用:w 新文件名
  • 关闭Vim

    • 要退出Vim并保存更改,可以在末行模式下输入:wq或者:x。如果想退出但不保存更改,可以使用:q!
编辑操作
  • 插入文本

    • 如之前提到的,有多种方式进入插入模式以编辑文本,包括i(光标前插入)、I(行首插入)、a(光标后插入)、A(行尾插入)等。
  • 删除文本

    • 在正常模式下,x可用于删除光标下的字符。dd用于删除整行。如果想删除多行,可以使用d加上数字,例如2dd删除两行。
  • 复制和粘贴

    • yy是复制当前行,p是粘贴到光标后。如果想复制多行,可以使用y加上数字,例如2yy复制两行。
  • 撤销和重做

    • u用于撤销最近的操作,Ctrl + r用于重做被撤销的操作。
移动光标
  • 基本移动h(左移)、j(下移)、k(上移)、l(右移)。
  • 快速移动
    • 0移动到行首,$移动到行尾。
    • w跳到下一个词的开头,b跳回到上一个词的开头。
    • G跳到文件的末尾,gg跳到文件的开头。
    • {}可以在段落之间跳转。
查找与替换
  • 查找文本

    • 在正常模式下,使用/要查找的文本然后按下Enter进行查找。按n查找下一个匹配项,N查找前一个匹配项。
  • 替换文本

    • 在末行模式下,使用:s/原文本/新文本来替换当前行的第一个匹配项。如果想替换所有匹配项,可以使用:s/原文本/新文本/g。要在全文中进行替换,使用:%s/原文本/新文本/g
使用窗口和标签页
  • 分屏

    • :split:sp来水平分割窗口。
    • :vsplit:vsp来垂直分割窗口。
  • 在窗口间切换

    • 使用Ctrl + w加上方向键在窗口间切换。
  • 使用标签页

    • :tabnew打开一个新的标签页,:tabnext:tabprev在标签页之间切换。

挑战话题:如何批量化注释和去注释

首先ctrl + v  进入视图模式

 然后我们可以批量化用键选中,也可以n+shift+g

然后输入shinft+i进入插入模式

 

 最关键一步,此时输入双斜杠 并按两下esc即可批量注释

去注释同理,ctrl+v   选中两列 按L  d即可删除

Vim中的批量化注释

vim配置

vim不是简单的执行可执行程序,也会读取若干配置文件,比如 .vimrc

vim也只是一个执行文件

没有我们就自己创建一个 那么我们就可以将对应配置项写入.vimrc

具体一键配置可以网上搜索,配置好后我们直接使用即可

 

 

通过本篇博客,我们一起踏上了探索Vim这款强大文本编辑器的旅程。从Vim的基本概念、基本操作,到如何批量化注释与去注释的高级技巧,我们一步步深入了解了Vim的强大功能。Vim不仅仅是一个文本编辑器,它是一个提高你编程效率、优化你编码工作流程的强大工具。

Vim之所以独特,是因为它提供了一种与众不同的文本编辑哲学。通过学习Vim的多种模式和快捷键,我们可以实现快速编辑、高效编码的目标。尽管Vim有着陡峭的学习曲线,但一旦你熟练掌握了它的基本及高级操作,你会发现自己能够更快、更高效地完成工作。

记住,熟练使用Vim需要时间和实践。不要因为一开始的挑战而放弃。随着你不断的练习和探索,你会逐渐发现Vim提供的便捷和强大功能。让Vim成为你编程旅程中的忠实伙伴吧!

希望这篇博客能够激发你深入学习Vim的热情

相关文章:

  • 【ESP32+Python】WIFI连接包括固定账号密码+选择WIFI在输入密码
  • spring boot学习第十一篇:发邮件
  • YOLOv8改进 | 检测头篇 | 独创RFAHead检测头超分辨率重构检测头(适用Pose、分割、目标检测)
  • macOS Sonoma 14系统安装包
  • Xray 工具笔记
  • NCCL源码解析: P2P 连接的建立
  • Leetcode 121 买卖股票的最佳时机
  • 2-8 单链表+双链表+模拟栈+模拟队列
  • Vue-57、Vue技术路由的参数如何传递
  • vue3 可视化大屏自适应屏幕组件
  • error: object ‘FastMNNIntegration‘ not found
  • 159基于matlab的基于密度的噪声应用空间聚类(DBSCAN)算法对点进行聚类
  • 【echarts】入门示例
  • 基于微信小程序的新生报到系统的研究与实现,附源码
  • dolphinDB使用select筛选时间字段
  • JavaScript-如何实现克隆(clone)函数
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【知识碎片】第三方登录弹窗效果
  • Linux下的乱码问题
  • Vultr 教程目录
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 消息队列系列二(IOT中消息队列的应用)
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • kubernetes资源对象--ingress
  • zabbix3.2监控linux磁盘IO
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #{}和${}的区别是什么 -- java面试
  • #if #elif #endif
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (第一天)包装对象、作用域、创建对象
  • (二十三)Flask之高频面试点
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (转)关于pipe()的详细解析
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • ... 是什么 ?... 有什么用处?
  • .Net 4.0并行库实用性演练
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET 命令行参数包含应用程序路径吗?
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET下ASPX编程的几个小问题
  • @Query中countQuery的介绍
  • [ C++ ] 继承
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [ai笔记9] openAI Sora技术文档引用文献汇总