知道了这些vim编辑器使用小技巧可以让你写代码的速度直接飞起

news2024/11/15 21:30:31

文章目录

    • 一、前言
    • 二、Vim 编辑器的简单介绍
      • 2.1 命令模式
      • 2.2 输入模式
      • 2.3 底部命令模式
      • 2.4 三种模式的切换
    • 三、Vim 编辑器常用操作
      • 3.1 Vim 最基本的操作
      • 3.2 Vim 的光标移动操作
      • 3.3 多窗口同时打开多个文件
    • 四、一些其他的 Vim 小技巧

一、前言

相信学习过Linux的朋友们对于Vim编辑器都不会陌生吧!Vim是许多开发人员和高级用户的首选编辑器。它是基于 Bill Joy 在 1970 年代为 UNIX 版本编写的 Vi 编辑器。它继承了 Vi 的键绑定,但也增加了大量原始 Vi 所缺少的功能和可扩展性。

尽管 Vim 不像最初标准 GUI 文本编辑器(如 Gedit)或文字处理器(如 OpenOffice.org 的 Writer)那样容易上手,但从长远来看,使用 Vim 可以提高工作效率。如果你是一个盲打的程序员,你会发现你的速度在 Vim 上会提高得更多,因为你的手不需要离开键盘,也不用操作鼠标。

今天我会从 Vim 编辑器的初级使用以及高级使用来进行讲解,你可以根据自己的情况选择阅读。

二、Vim 编辑器的简单介绍

Vi 其实是一个终端应用程序,你可以通过终端来启动它。Vim 编辑器有三种模式,分别是:命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)

2.1 命令模式

当你使用 Vim编辑器打开一个文件后会自动进入到命令模式,在这种模式下用户是不能对文件内容进行更改的,你可以理解为是以只读的方式打开了该文本文件,你可以通过鼠标滚轮或键盘上下左右键来浏览文本文件。

在命令模式下用户敲击键盘会被识别为命令而不是直接在文本中插入内容,例如我们可以通过输入 i 命令来切换到输入模式下,输入 x 会删除当前光标所在位置的字符,当然命令行模式下所支持的命令还有很多,后面会给大家列举出来!

另外大家需要注意的命令模式和底部命令行模式是有区别的,这些区别主要体现在两者能够识别的命令是不一样的,命令模式下的命令更多的是用来提高我们的是哟个效率的,例如我们可以通过命令跳转到某行、删除某行、跳转到行首、跳转到行尾等,这些命令都会使我们的使用更加高效。

下面我给大家列举出一些常用到的命令,大家可以在使用过程中慢慢的去记住这些指令,这些指令即使记不住也不会影响你对于 Vim 的使用,但是如果你会用了这些命令可以大大提高你的 Vim 使用效率。

h 将光标向左移动一个字符。
j 将光标向下移动一行。
k 将光标向上移动一行。
l 将光标向右移动一个字符。
0 将光标移动到行首。
$ 将光标移动到行尾。
w 向前移动一个单词。
b 向后移动一个单词。
G 移动到文件末尾。
gg 移动到文件的开头。
`.移至上次编辑。
6k 在移动命令前面加上一个数字将多次执行该移动

对于上面的命令大家需要多加练习,在使用中慢慢去记住这些小技巧,另外除了最初打开文件会进入到命令模式外我们还可以通过点击 Esc 键来从其他模式进入到命令模式下!

2.2 输入模式

讲解完命令模式后我们一起来看一下 Vim 编辑器的输入模式,要想了解输入模式我们首先需要先学习如何从其他模式进入到输入模式。

我们要想进入到输入模式首先需要进入到命令模式下,即在其他模式下我们首先点击 Esc 按键,然后在命令模式下输入 i 即可进入到输入模式下,退出输入模式也可以通过点击 Esc 按键进入到命令模式。

进入到输入模式后我们就可以对文本内容进行更改了,当然键盘上的一些特定的按键也是可以用的例如以下按键:

字符按键以及Shift组合,输入字符
ENTER,回车键,换行
BACK SPACE,退格键,删除光标前一个字符
DEL,删除键,删除光标后一个字符
方向键,在文本中移动光标
HOME/END,移动光标到行首/行尾
Page Up/Page Down,上/下翻页
Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
ESC,退出输入模式,切换到命令模式

除了通过输入 i 进入输入模式外我们还可以通过以下命令来进入到对应的输入模式:

i	在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动
I	在光标所在行的行首插入随后输入的文本,行首是该行的第一个非空白字符,相当于光标移动到行首执行 i 命令
o	在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本
O	在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本
a	在当前光标所在位置之后插入随后输入的文本
A	在光标所在行的行尾插入随后输入的文本,相当于光标移动到行尾再执行a命令

在该模式下,用户输入的任何字符都被 Vim 当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按下 Esc 键即可。但是我们如果想对输入的内容进行保存,我们可以还需要了解底部命令行模式,下面我们就开始介绍以下底部命令行模式。

2.3 底部命令模式

在命令模式下,用户按 : 键即可进入底部命令模式下,此时 Vim 会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个 : 作为底部命令模式的说明符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。

知道了如何进入到底部命令模式后我们就需要学习一下底部命令模式模式都支持哪些命令,下面就来一起介绍一下底部命令模式支持的命令:

:q	退出 vim 编辑器
:q!	不保存文件,直接退出 vim 编辑器
:w	只保存文件,但不退出 vim 编辑器
:wq	保存文件且退出 vim 编辑器
ZZ	保存文件且退出 vim 编辑器
:start,endd	从第 start 行开始到 end 行进行删除操作 最后一个 d 表示删除,如 :3,4d
:%d	清空文件内容(跳到行首 dG 执行也可删除)
:!command	暂时离开vim编辑器去到指令模式下执行 command 命令显示结果,如 :!ls
:/string	从文件首部开始查找到尾部;按 n 键可以跳到下一个,N 上一个,另外按 / 键后,按上下键可以找到以前查找的记录,同样的也有记录
:?string	同上,从当前光标向文件首部查找
:%s/word1/word2/g	从文件首到尾替换每一行的 word1为 word2
:set nu	显示行号 也可以输入 set number
:set nonu	取消行号
:set ai/noai	开启/关闭自动缩进

在底部命令行模式下除了上面这些还有很多,这里仅仅列出了一些常用的指令,感兴趣的可以看一下官方文档。

2.4 三种模式的切换

在这里插入图片描述
在这里插入图片描述

三、Vim 编辑器常用操作

通过前面的介绍相信大家已经对 Vim 编辑器有了一定的了解,但是如果你之前重来没有用过 Vim 的话相信你现在还是很迷惑,为什么一个好好的编辑器要弄的这么麻烦呢?编辑器难道不是就是输入和删除吗?

下面我们一起来看一下一些常用的 Vim 操作,相信这部分会让你知道 Vim是如何使用的:

3.1 Vim 最基本的操作

这部分的操作需要确定你的电脑上已经安装了 Vim,否者将无法进行操作,如果想要安装 Vim 编辑器可以使用以下指令:

sudo apt-get install vim

安装完 Vim 编辑器后就可以使用 Vim 编辑器对文本文件进行操作了,下面我们一起来看一下:

如果你想打开或新建一个名为 test.txt 的文本文件你可以进行以下操作:

$ vim test.txt

在这里插入图片描述
此时你就打开或新建了一个名为 test.txt 的文本文件,并进入了命令模式模式下,此时我们就可以使用前面介绍的操作了,例如我们想要在该文件中输入 111 我们就需要先输入 i 进入到输入模式下。
在这里插入图片描述
此时你再敲击键盘就会发现你所在键盘上点击的按键都输入到了文本中,例如我们输入 111

在这里插入图片描述
但是此时你所进行的操作还只是在控制台进行的操作,文本文件的内容还没有修改,如果想要将你输入的内容保存下来你还需要进行以下操作,即 保存文件 --> 退出文件

我们需要首先点击 Esc 进入到命令模式,在命令模式下输入 : 进入底部命令模式,并在底部命令模式下输入 wq 来保存并退出该文本文件,这样我们就将我们写入的内容保存到了文本文档中,上面的操作过程是 Vim 最基本的操作,也是我们使用 Vim 必须要会的操作。

3.2 Vim 的光标移动操作

首先在 Vim 编辑器的最长用的操作就是光标的移动了,此时你可能会 有疑问,光标移动不就用键盘上的方向键不就行了吗?为什么还要学其他的,有这个疑问的你可以想象一下你有一个几百行的文本文件,你要上下左右一个一个的移动什么时候能移动到行尾,所以 Vim 编辑器给我们准备了更加高效的光标移动操作。

虽然上下左右移动光标很多人依然用光标键,但 Vim 推荐用 hjkl,能够更高效移动光标。

下面给大家列举一些常用的操作,大家可以自己尝试一下:

基本操作:
	h:左
	l:右
	j:下
	k:上

高级操作:
	gg:文档顶部
	G:文件底部或行号
	w:下一个单词
	e:单词尾
	0:行首
	$:行尾
	H:将光标移动到当前可见页面的顶部(High)
	M:将光标移到当前可见页面的中间(Middle)
	L:将光标移动到当前可见页面的底部(Low)

快捷键操作:
	CTRL-D:向下翻页(Down)
	CTRL-U:向上翻页(Up)
	CTRL-E:向下滚动一行
	CTRL-Y:向上滚动一行
	):移至下一个句子的开头
	(:移至上一句的开头
	}:移至下一个段落的开头(以空白行分隔)
	{:移至下一段的开头(以空白行分隔)

上面的这些操作大家要多加练习,相信你也会用的很6

3.3 多窗口同时打开多个文件

下面再教大家几个比较秀的操作 – 多窗口打开多文件,Vim 的多窗口是动态的,可以开始编辑时就打开多窗口,也可以工作时随时增加新窗口,或者删除一个窗口。

$ vim  -o  file1 file2  打开一个编辑会话,显示为水平分割成两半的窗口,一个文件占用一个窗口。
$ vim  -O  file1 file2  和上面相同,不过是垂直分割两半的窗口

在这里插入图片描述
如果画面分割后不足以容纳下所有窗口,那么第一个文件会占用大部分窗口,余下的窗口则载入缓冲区,暂时不能看到,但仍可以取用。

-o 后面加一个数字 n ,是预分配窗口的形式打开:

$ vim  -O file1  file2  将左右切分窗口并同时打开文本文件
$ vim  -0 file1  file2  将上下切分窗口并同时打开文本文件

效果如下:
在这里插入图片描述
在这里插入图片描述
这时候你可能会有疑问,这同时打开了两个文件我怎么确定我们现在操作的是那个文件呢?我们可以通过光标来进行确定我们当前所操作的是哪个文件。

例如我们现在在操作file1,但是我们突然又需要操作file2 ,我们应该如何进行操作呢?

我们可以通过在命令模式下使用以下快捷键来进行窗口的切换,其中最常用的是:

Ctrl+ww 依次向后切换到下一个窗格中
Ctrl+6  两文件间的切换
:bn     下一个文件
:bp     上一个文件
:ls     列出打开的文件,带编号
:b1~n   切换至第n个文件

上面这几个操作都可以完成窗体间的切换,但是由于切换的原理和现象不同,下面给大家演示一下几种快捷键或命令的不同。

例如当前是在操作文件 file1 我们首先演示使用 Ctrl+ww 快捷键来切换窗口:

操作 Ctrl+ww 快捷键前:
在这里插入图片描述

在这里插入图片描述
这样 Vim 会在不更改窗口布局的情况下仅仅切换我们操作的串口,这个快捷键也是最常用的。

除了使用Ctrl+ww 快捷键进行操作外还可以使用下面的指令进行窗口的切换,但是大家需要注意的是下面的这些切换才是真正意义上的窗口切换,而上面我们讲的快捷键只是工作区的切换,我们来一起看一下窗体的切换指令效果:

初始状态下:
在这里插入图片描述
在命令模式下执行完命令后:
在这里插入图片描述
在这里插入图片描述
可以看到这个命令是把下一个窗口移动到了当前最左侧的窗口内,其他窗口保持不变,我们可以发现此时两个窗口打开的都是文件2.

除了上面这几个指令以及快捷键外 Vim 的多窗口操作还有很多,感兴趣的大家可以执行百度一下。

:sp: 	 将当前窗口水平一分为二。最初,每个窗口将显示相同的缓冲区。(split)在“ sp”之前加上数字以设置新窗口的高度。
:vs: 	 垂直拆分当前窗口。最初,每个窗口将显示相同的缓冲区。(vertical split)在“ vs”之前加上数字以设置新的窗口宽度。
CTRL-ww: 将光标切换到下一个窗口(window)
CTRL-w: 将焦点沿指示的方向(h,j,k,l)更改到指定窗口
CTRL-wc: 关闭当前窗口(close)
CTRL-w+: 增加当前窗口的大小
CTRL-w-: 减小当前窗口的大小
CTRL-w=: 将所有窗口设置为相等大小
#CTRL-w_: 将高度设置为前面的“#”指示的大小
:only: 	 关闭当前窗口以外的所有窗口
CTRL-wn: 使用新缓冲区打开新窗口(new)

四、一些其他的 Vim 小技巧

说到小技巧肯定要说一下复制、粘贴,下面我们来看一下如何在 Vim 中进行复制和粘贴的。

复制操作

  1. 复制光标所在行 按键:yy,粘贴:在想要粘贴的地方按下 p
  2. 以光标所在行为准(包含当前行),向下复制指定的行数 按键:数字yy,粘贴:p
  3. 可视化复制 按键:ctrl+v 然后按上下左右方向键来选中需要复制的区块,按下yy键进行复制,最后按下p键粘贴

剪切/删除

  1. 剪切/删除光标所在行 按键:dd (删除之后下一行上移)注意:dd 严格来说是剪切命令,但是如果剪切了不粘贴就是删除的效果
  2. 剪切/删除光标所在行为准(包含当前行),向下剪切/删除指定的行 按键:数字 dd(删除之后下一行上移)
  3. 剪切/删除光标所在的当前行,删除之后下一行不上移 按键:D

撤销/恢复

  1. 撤销:输入:u (u即undo)
  2. 恢复:ctrl+r (取消之前的撤销 )

注意: 上面的复制粘贴是限制在本文件内进行的操作,也就是说你复制的内容只能在该文件内进行复制粘贴,在外部粘贴是没有效果的。

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

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

相关文章

pmp证书含金量怎么样?

含金量的问题,其实经过了这一系列的学习,这个证书对于学员们来说,只是一个证明自己有这个能力的证件而已,就算没有这个证件,他所学习的知识就不在自己的脑中了吗?必然是不可能的! 这其实就是一…

excel函数应用:如何用数位函数分段提取身份证信息 下篇

在上篇内容中我们说到了用excel提取身份证号码中的户籍地址、出生日期、年龄、生肖、星座等内容,今天我们书接上回,继续带大家学习excel提取身份证信息的其他操作!4、生日提醒生日提醒的问题,作者觉得要分两部分来说。&#xff08…

Reids的BigKey和HotKey

1.什么是BigKey和HotKey 1.1.Big Key Redis big key problem,实际上不是大Key问题,而是Key对应的value过大,因此严格来说是Big Value问题,Redis value is too large (key value is too large)。 到底多大的value会导致big key问…

各行业执法图传系统建设建议(华脉智联内参二)

各行业执法图传系统建设建议 让执法透明,不断提高执法工作效能 题记:为实现执法过程中的证据固定与执法场景记录,采用照相机、录音笔或固定监控等传统手段进行取证一直是最本源的需求。随着时代的变迁,传统的手段取证已无法满足完…

知识图谱构建:py2neo案例100个知识点应用

连接到 Neo4j 数据库执行一条简单的 Cypher 查询从查询结果中提取节点和关系插入一个新节点并与另一个节点建立关系根据标签查找节点根据属性查找节点根据关系查找节点在事务中执行多条查询使用索引查找节点使用约束确保唯一性删除节点和关系使用 py2neo.ogm 在 Python 中创建对…

访问学者申请要求及各国情况

访问学者申请要求及各国情况,下面就随知识人网小编一起来看一看。一、访问学者申请要求1、自身条件:访问学者主要是参看申请人当前的工作背景,专业背景以及科研背景等。在职群体申请访学需要具备本科学历和学位。此外,最重要的就是…

2023年,开挖电商这座金矿,有飞项这个协同工具就够了

2023年电商潜力怎样?据Morgan Stanley 研究,全球电商渗透还未见顶,物流发展、移动设备普及和市场拓展等因素仍然有利于电商发展,长期来看仍有增长空间,当前3.3万亿美元的电商市场规模有望在2026年增长到5.4万亿。 如何…

测试的准入准出

测试的准入准出 测试的准入住处是指什么情况下可以开始当前版本的测试工作,什么情况下可以结束当前版本的测试工作。不同项目、不同公司的测试准入准出标准都会有所不同。下面介绍一些通用的测试准入准出标准。 测试准入标准如下: (1)开发编码结束&#…

webpack概念

webpack概念webpackwebpack-概念webpack-使用准备webpack-基础使用webpack-更新打包webpack-配置修改webpack-打包流程图webpack 使用ES6模块化默认导出和导入 // 默认导出 export default {a: 10,b: 20 }// 默认导入 import Obj from js文件路径按需导出和导入 // 按需导出…

【每日一题】【LeetCode】【第三天】删除有序数组中的重复项

删除有序数组中重复项的解决之路 这个标签是简单,所以比较好过。 题干描述 根据题目描述,重点在于原地删除,也就是空间复杂度为O(1)。 测试案例(部分) 第一次 根据题目描述,重点在于原地删除。 class…

解决Linux【-bash: fork: retry: 没有子进程】

解决Linux【-bash: fork: retry: 没有子进程】问题发现问题解决设置Linux最大用户线程数设置单个用户可用最大进程数问题发现 日常工作中,服务器连不上,好在昨天登陆的服务器用户没有下线,然后执行任何命令时返回- bash: fork: retry: 没有子…

React(coderwhy)- 03(高阶组件+动画)

1.React性能优化SCU React更新机制 React的更新流程 ◼ React在props或state发生改变时,会调用React的render方法,会创建一颗不同的树。 ◼ React需要基于这两颗不同的树之间的差别来判断如何有效的更新UI:  如果一棵树参考另外一棵树进行完…

可观测产品的最佳实践,涵盖端到端的可观测解决方案丨阿里云用户组深圳站

2022 年 9 月 28 日,阿里云在深圳举办了第 11 场阿里云用户组(AUG)活动,活动主题“可观测性实践”吸引了众多技术从业者及企业管理者来到现场。通过本次活动,参会企业了解到三块内容:1. Java 应用最佳实验&…

小蓝本 第一本 《因式分解技巧》 第八章 多项式的一次因式 笔记 (第八天)

小蓝本 第一本 《因式分解技巧》 第八章 多项式的一次因式 笔记 (第八天)前言余数定理有理根求法第一步第二步(可能有理根多的情况下,可以用)第三步快速识别特殊有理根情况1情况2求解注意习题8题目题解改错前言 坚持的第8天,因为…

北大陈斌Python算法笔记(一)

前言 🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 🍁个人主页:红中 🍂不就是蓝桥杯嘛,干他!!我堂堂 线性结构 线性结构是一种有序数…

优先级反转问题及解决办法

优先级反转问题及解决办法什么是优先级反转解决方法1:优先级继承解决方法2:优先级天花板总结什么是优先级反转 优先级反转,是指在多线程的环境下,并且使用了信号量时,可能会出现的这样一种不合理的现象,即…

@PostConstruct 和 @PreDestroy 使用

目录1.简介2.使用3.注意事项4.执行顺序5.测试6.测试结果1.简介 PostConstruct: Java 自带的注解,在方法上使用该注解,会在项目启动的时候执行被修饰的方法。 PreDestroy: Java 自带的注解,在方法上使用该注解&#xff…

element 日期选择器数据更改,第一次进入页面,页面上没有回显(数据格式问题导致)

需求 页面列表数据,默认是展示一个月的数据 遇到的问题 一进来页面,日期选择器上是空的,但绑定的值是有数据的,页面上并没正确回显,但是去手动选择日期,也是可以正常回显的 思考 其实,选择…

【MySQL进阶教程】 索引详细介绍

前言 本文为 【MySQL进阶教程】 索引 相关知识介绍,下边具体将对索引概述,索引结构(包括:索引结构概述,二叉树,B-Tree,BTree,Hash),索引分类,索引…

leetcode练习之商品折扣后的最终价格(单调栈算法)

题目描述 给你一个数组 prices &#xff0c;其中 prices[i] 是商店里第 i 件商品的价格。 商店里正在进行促销活动&#xff0c;如果你要买第 i 件商品&#xff0c;那么你可以得到与 prices[j] 相等的折扣&#xff0c;其中 j 是满足 j > i 且 prices[j] < prices[i] 的 最…