【Linux】vim的使用

进入vim

vim是一款编辑器。自带,使用成本较高。

touch code.c我们创建一个普通文件,然后vim code.c,进入vim。

想要退出vim,怎么做?

(因为当前我们不知道在什么模式下),我们先按下键盘最左上角的Esc,然后再按冒号,最后再打出一个q,然后回车。

还有另一种方式也可以退出vim:

把键盘切成大写,然后快速按两下Z。

多模式编辑器

vim是一款多模式编辑器,将行为分类。最常见的为3种模式。

命令模式、底行模式、插入模式。

首次打开,处在命令模式。它是默认的模式。

命令模式怎么切换插入模式?

输入一下i。出现INSERT,就代表进入了插入模式,我们就可以正常去写代码了。

怎么再由插入模式回到命令模式呢?

按左上角的Esc。

这样就进入命令模式了。

怎么由命令模式进入底行模式呢?

shift+;(也就是:)

在底行模式里,w是保存(写入),q是退出;wq是保存并退出。

在底行模式里,我们输入set nu,就可以在现在这样还没有配置的情况下,显示行号:

然后我们就有行号了:

怎么再由底行模式回到命令模式呢?

Esc

当我们不知道在什么模式,就Esc回到命令模式。

不同模式

命令模式

方便我们去快速编辑。

上下移动(不同行间移动)

gg:快速让光标回归到最开始。

shift+g(即G):快速将光标定位到结尾。

n+shift+g:将光标定位到我们要的那一行。

左右移动(当前行)

shift+4,即$:定位到当前行结尾。

shift+6,即^:定位到当前行开头。

上下左右移动

上下左右键现在也可以使用了,但是兼容性最好的是hjkl这四个键(在命令模式中)。

h是向左,l是向右,j是向上,k是向下。

这是因为以前的老键盘里,是没有上下左右键的,而vim是在那个时代产生的,所以就是hjkl能作为方向键。

7h是向左移动7个,8j是向下移动8个,以此类推。

w可以以单词为单位,向右移动;b可以以单词 为单位,向左移动。w和b前面也可以带数字。

指令级别的复制、黏贴、删除

(在命令模式下)

yy是复制当前行,p是光标所在位置粘贴,dd是删除当前行。

也可以一次复制并粘贴多行:3 yy p,或者一次删除多行。

u是撤销刚才动作。

我们知道有重做,也就是撤销刚才的撤销:ctrl+r。

这二者可以互相撤销彼此。

但是一旦退出vim后,重新进来code.c,就无法再撤销以前的操作了;如果只是保存,没有退出,还可以撤销。

n+yy+n+p,我们可以一次性复制多行,并粘贴多次,比如我们可以将3行的内容,粘贴1000次。

dd+p,我们可以将某一行的内容删除然后粘贴到某一行,也就是剪切。我们也可以n+dd,删除n行,然后n+p,重复粘贴上n次。

命令模式下的删除

x,可以不断删除光标所在位置的字符(相当于右侧不断前移被删除)。

3x,可以一次删3个字符。

shift+x,即X,是光标右侧不动,左侧删除(相当于与x相反)。

n+shift+x,和上面一样,也可以一次性删除多个左侧字符。

可以更形象地理解,x就是右边的字符不断过来被“吃”掉,而shift+x是不断往左走去“吃”左侧的字符。

而x和shift+x,也都是可以p进行粘贴的。

字符替换

(命令模式下)输入r,然后再输入我们要替换的字符,就能进行光标处的替换。

同样,这个也可以一次性操作多个字符,n+r+我们要替换的字符。

替换模式

shift+r,即R,我们就可以进入replace模式。

r是替换单个字符,所以R就是批量化替换。

其实就是覆盖式地去写。

怎么回去呢?无脑Esc。

大小写切换

shift+~

并不常用的翻页指令

ctrl+b 屏幕往上翻动一页

ctrl+f 屏幕往下翻动一页

ctrl+u 屏幕往上翻动半页

ctrl+d 屏幕往下翻动半页

批量化注释(视图模式)

ctrl+v,进入视图模式。

进入这个模式后,我们可以使用hjkl进行区域化的选择:

我们先用j往下选中我们要的行:

然后我们按shift+i,也就是I,这时我们从视图模式直接进入了插入模式,这时我们在我们选中区域第一行的位置输入//:

然后,我们此时按Esc,我们从视图模式退到命令模式,并且我们可以看到我们刚才选中的区域前面都有注释了:

也就是说,我们可以从命令模式按ctrl+v进入视图模式,选完我们要的区域后按shift+i进入插入模式,然后插入我们要给选中区域带的注释,然后按Esc退回到命令模式的同时完成批量化注释。

在上面的视图模式选择区域那一步,我们可以按shift+g,来选中以下的全部代码,后续进行注释。

也可以按gg,反向选择以上的全部代码。

我们也可以在刚才选择区域的那一步里,在按j向下选中区域的时候,前面直接带数字,也就是我们要选择的行数。

也可以n+shift+g,这是选中当前行到第n行。

怎么批量删除注释

切到视图模式,输入8+shift+g,直接选中我们要删的区域,然后按一次l,将右半部分的注释也选上,然后再按一次d,我们就成功删除了注释。

类似的逻辑,我们可以通过shift+g,将全部的内容选中进行注释或去注释。

当然,它的作用不只是注释。

对某个单词进行查找

shift+3也就是#,我们可以选中某个单词,然后按n,就可以对这个单词出现过的位置,进行逆向查找。

不同的进入插入模式的方法

输入a,也可以进入插入模式,但是光标会往后走一格。

输入o,也可以进入插入模式,光标会向下新起一行。

aio就是三种比较常用的进入插入模式的方式。

底行模式指令

加个!代表强制,w!是强制保存,q!是强制退出;wq!就是强制保存并退出。

保存并退出除了切成大写后快速按两下ZZ,还能按住shift的时候按两下zz,都是两个大写Z。

但是快捷方式不如命令可靠。所以最好还是使用前者进行退出,而非ZZ。

set nonu是取消行号。

!ls -l,这样会得到:

还可以!gcc code.c,编译。

然后!ls -al

可以看到多出了a.out。

然后!./a.out我们就可以执行编译好的这段代码:

也就是说,在底行中,输入感叹号后我们就可以直接输入命令。可以在不退出vim的情况下就执行命令。

批量化替换

这是一个很实用的方式。

%s/src/dst/,src是我们要替换的原本内容,dst是我们要替换的新内容。

比如:

然后按下后变成:

可以看到,就替换成功了。

vim一个原本不存在的文件

vim 文件名

然后通过wq退出,就会自动生成这个文件。

分屏操作

我们可以先打开code.c的情况下, 进入底行模式,然后输入vs test.c:

可以看到,code.c就到右边的分屏去了,左边是test.c。

如果此时再进入底行做同样的操作,还可以分三个屏……

此时我们wq,退出的是test.c,也就是回到code.c里了,再wq,就从code.c退出了也就是退出vim了。

所以我们可以看出,分屏时的底行,是左侧文件的底行。光标在哪个窗口下,就是在操作哪个窗口。

光标切换窗口

按住ctrl不动,然后按两下w,就切换到另一个终端窗口了。

底行搜索

底行也可以进行搜索(类似shift+3,也就是#)

:/printf,这样就是搜索printf,会将其高亮。然后按n,就会匹配下一个。

打开直接到报错行

比如我们现在第13行,少了个分号,所以在编译时会报错:

打开vim默认光标是在我们上一次退出时的位置,但是我们也可以在打开vim时直接来到我们想要的报错的那一行。

error前面我们看到是在14行的printf处报错,所以我们可以

vim code.c+14

这样打开时,光标默认就在第14行。

历史命令
查找历史命令

先输入ctrl+r,再输入vim:

执行最近命令

!v,这会让我们直接执行最近使用的v开头的命令比如vim code.c


那么,本文到此结束。

在这里插入图片描述

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

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

相关文章

计算机网络-VPN虚拟专用网络概述

前面我们学习了在企业内部的二层交换机网络、三层路由网络包括静态路由、OSPF、IS-IS、NAT等,现在开始学习下VPN(Virtual Private Network,虚拟专用网络),其实VPN可能很多人听到第一反应就是梯子,但是其实这…

【AI最前线】DP双像素sensor相关的AI算法全集:深度估计、图像去模糊去雨去雾恢复、图像重建、自动对焦

Dual Pixel 简介 双像素是成像系统的感光元器件中单帧同时生成的图像:通过双像素可以实现:深度估计、图像去模糊去雨去雾恢复、图像重建 成像原理来源如上,也有遮罩等方式的pd生成,如图双像素视图可以看到光圈的不同一半&#x…

Spark——安装步骤详细教程

1、安装步骤 1、上传 cd /opt/modules 2、解压 tar -zxf spark-3.1.2-bin-hadoop3.2.tgz -C /opt/installs 3、重命名 cd /opt/installs mv spark-3.1.2-bin-hadoop3.2 spark-local 4、创建软链接 ln -s spark-local spark 5、配置环境变量: vi /etc/prof…

Java语言程序设计 选填题知识点总结

第一章 javac.exe是JDK提供的编译器public static void main (String args[])是Java应用程序主类中正确的main方法Java源文件是由若干个书写形式互相独立的类组成的Java语言的名字是印度尼西亚一个盛产咖啡的岛名Java源文件中可以有一个或多个类Java源文件的扩展名是.java如果…

项目学习:仿b站的视频网站项目03-注册功能

概括 通过上一期,完成了项目和数据库的基础结构的搭建,接下来主要是完成项目的注册功能。该功能模块主要分为有两个接口,一个是验证码接口,一个是注册接口。 让我们开始吧! 验证码接口 验证码的生成主要配合下面这…

Linux——进程间通信之管道

进程间通信之管道 文章目录 进程间通信之管道1. 进程间通信1.1 为什么要进行进程间的通信1.2 如何进行进程间的通信1.3 进程间通信的方式 2. 管道2.1 匿名管道2.1.1 系统调用pipe()2.1.2 使用匿名管道进行通信2.1.1 匿名管道四种情况2.1.2 匿名管道的五大特性2.1.3 进程池 2.2 …

使用chrome 访问虚拟机Apache2 的默认页面,出现了ERR_ADDRESS_UNREACHABLE这个鸟问题

本地环境 主机MacOs Sequoia 15.1虚拟机Parallels Desktop 20 for Mac Pro Edition 版本 20.0.1 (55659)虚拟机-操作系统Ubuntu 22.04 服务器版本 最小安装 开发环境 编辑器编译器调试工具数据库http服务web开发防火墙Vim9Gcc13Gdb14Mysql8Apache2Php8.3Iptables 第一坑 数…

海洋通信船舶组网工业4G路由器应用

船舶是浩瀚海洋中探索与贸易的载体,更是船员们生活与工作的家园。为了在广阔的水域中搭建起稳定、高效的网络桥梁,工业4G路由器以卓越的通信组网能力,为船舶组网提供网络支持。 工业4G路由器以其强大的信号发射能力,确保船舶内部…

分类算法——基于heart数据集实现

1 heart数据集——描述性统计分析 import matplotlib.pyplot as plt import pandas as pd# Load the dataset heart pd.read_csv(r"heart.csv", sep,)# Check the columns in the DataFrame print(heart.columns)aheart.loc[:, y].value_counts() print(a) heart.l…

力扣面试经典 150(上)

文章目录 数组/字符串1. 合并两个有序数组2. 移除元素3. 删除有序数组中的重复项4. 删除有序数组的重复项II5. 多数元素6. 轮转数组7. 买卖股票的最佳时机8. 买卖股票的最佳时机II9. 跳跃游戏10. 跳跃游戏II11. H 指数12. O(1)时间插入、删除和获取随机元素13. 除自身以外数组的…

Vue3-后台管理系统

目录 一、完成项目历程 1、构建项目 2、项目的自定义选项 3、 封装组件 4、配置对应页面的路由 5、从后端调接口的方式 二、引入Element Plus、Echarts、国际化组件 1、Element Plus安装 2、Echarts安装 3、国际化 三、介绍项目以及展示 1、项目是基于Vue3、Element …

mq 消费慢处理方式,rocketmq消费慢如何处理,mq如何处理消费端消费速率慢。rocketmq优化

1. 问题:mq消费慢,如何加快处理速度 2. 分析: 没想到吧,官网上就有处理方式。! 3.链接: 基本最佳实践 | RocketMQ 4. 处理方式: 4.1 提高消费并行度 4.1.1 加机器,配置多个消费服…

内存级文件原理——Linux

目录 进程与文件 Linux下的文件系统 文件操作,及文件流 C语言函数 文件流 文件描述符 系统调用操作 系统调用参数 重定向与文件描述符 输出重定向 输入重定向 文件内容属性 Linux下一切皆文件 进程与文件 当我们对文件进行操作时,文件必…

MATLAB矩阵元素的修改及删除

利用等号赋值来进行修改 A ( m , n ) c A(m,n)c A(m,n)c将将矩阵第 m m m行第 n n n列的元素改为 c c c,如果 m m m或 n n n超出原来的行或列,则会自动补充行或列,目标元素改为要求的,其余为 0 0 0 A ( m ) c A(m)c A(m)c将索引…

并行IO接口8255

文章目录 8255A芯片组成外设接口三个端口两组端口关于C口(★) 内部逻辑CPU接口 8255A的控制字(★)位控字(D70)方式选择控制字(D71) 8255A的工作方式工作方式0(基本输入/输…

springboot3如何集成knife4j 4.x版本及如何进行API注解

1. 什么是Knife4j knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案, 取名knife4j是希望她能像一把匕首一样小巧,轻量,并且功能强悍!knife4j的前身是swagger-bootstrap-ui,swagger-bootstrap-ui自1.9.6版本后,正式更名为knife4j为了契合微服务的架构发展,由于原来…

js高级06-ajax封装和跨域

8.1、ajax简介及相关知识 8.1.1、原生ajax 8.1.1.1、AJAX 简介 AJAX 全称为 Asynchronous JavaScript And XML,就是异步的 JS 和 XML。 通过 AJAX 可以在浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据。 按需请求,可…

自然色调人像自拍照后期Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 自然色调人像自拍照后期通过 Lightroom 调色,旨在打造出清新、自然、真实的人像效果。这种风格强调还原人物的本来面貌,同时增强照片的色彩和光影表现力,让自拍照更加生动和吸引人。 预设信息 调色风格:清晰透明风格预…

RabbitMQ简单应用

概念 RabbitMQ 是一种流行的开源消息代理(Message Broker)软件,它实现了高级消息队列协议(AMQP - Advanced Message Queuing Protocol)。RabbitMQ 通过高效的消息传递机制,主要应用于分布式系统中解耦应用…

计算机网络(14)ip地址超详解

先看图: 注意看第三列蓝色标注的点不会改变,A类地址第一个比特只会是0,B类是10,C类是110,D类是1110,E类是1111. IPv4地址根据其用途和网络规模的不同,分为五个主要类别(A、B、C、D、…