Linux友人帐之Vim编译器

news2024/12/27 11:23:42

一、概述

1.1简介

Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。

vim 则可以说是程序开发者的一项很好用的工具。

所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。

连 vim 的官方网站 (http://www.vim.org) 自己也说 vim 是一个程序开发工具而不是文字处理软件。

 

 1.2三种使用模式

1.3命令行模式(Command Mode) 

用户刚刚启动 vi/vim,便进入了命令模式。

此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。

以下是常用的几个命令:

  • i 切换到输入模式,以输入字符。

  • x 删除当前光标所在处的字符。

  • : 切换到底线命令模式,以在最底一行输入命令。如果是编辑模式,需要先退出编辑模式!ESC

若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。

命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

移动光标的方法

(1)h或←

光标向左移动一个字符

(2)j或↓

光标向下移动一个字符

(3)k或↑

光标向上移动一个字符

(4)l或→

光标向右移动一个字符

(5)【Crtl】+【f】

屏幕“向下”移动一页

相当于【Page Down】按键

(6)【Crtl】+【b】

屏幕“向上”移动一页

相当于【Page Up】按键

(7)【Crtl】+【d】

屏幕“向下”移动半页

(8)【Crtl】+【u】

屏幕“向上”移动半页

(9)+

光标移动到下一行的非空字符(第一个)

(10)-

光标移动到上一行的非空字符(第一个)

(11)n【Space】

n代表数字,比如20。按下数字后再按空格,光标会向右移动这一行的n个字符

例如:20【Space】则光标会向后移动20个字符的距离

(12)0 (注意不是数字盘的数字)

数字键0:移动到该行的最前面的字符处

(13)^

与正则表达式类似,移动到该行的最前面的字符处

(14)$

与正则表达式类似,移动到该行的最后面的字符处

(15)H

光标移动到此时屏幕的最上面那一行的第一个字符

(16)M

光标移动到此时屏幕的中间那一行的第一个字符

(17)L

光标移动到此时屏幕的最下面那一行的第一个字符

(18)G

移动到改文件的最后一行

(19)nG或ngg

n为数字。移动到该文件的第n行

例如:20G或20gg则会移动到该文件的第20行

可配合:set nu

(20)gg

移动到该文件的第一行

(21)n【Enter】

n为数字。光标向下移动n行

 搜索与替换方法

(1)/word

向光标之下寻找一个名为word的字符串

例如:要在文件中搜索Linux这个字符,输入/Linux即可

(2)?word

向光标之上寻找一个名为word的字符串

(3)n

为按键n。代表“重复前一个搜索动作”

(4)N

为按键N。与n相反,为“反向”进行前一个搜索

(5):n1,n2/word1/word2/g

n1、n2为数字。在第n1行到第n2行之间寻找word1这个字符串,并将该字符串替换为word2

例如,在100行到200行之间寻找windows并替换为linux,为:100,200s/windowns/linux/g

(6):1,$/word1/word2/g或:%s/word1/word2/g

从第1行到最后一行寻找word1字符串,并替换为word2

(7):1,$%/word1/word2/gc

从第1行到最后一行寻找word1字符串,并替换为word2。在替换前进行询问

 删除、复制和粘贴方法 

(1)x、X

在一行当中,x为向后删除一个字符(delete)

X为向前删除一个字符(backspace)

(2)nx

n为数字。连续向后删除n个字符

例如:需要连续删除10个字符,则为10x

(3)dd

删除光标所在的那一行

(4)ndd

n为数字。删除光标所在的向下n行

例如:20dd就是删除20行

(5)d1G

删除光标所在到第一行的所有数据

(6)dG

删除光标所在到最后一行的所有数据

(7)d$

删除光标所在处,到该行的最后一个字符

(8)d0

删除光标所在处,到该行的最前面一个字符

(9)yy

复制光标所在的行

(10)nyy

n为数字。复制光标所在的向下n行

例如:20yy就是复制20行

(11)y1G

复制光标所在到第一行的所有数据

(12)yG

复制光标所在到最后一行的所有数据

(13)y0

复制光标所在处,到该行行首的所有数据

(14)y$

复制光标所在处,到该行行尾的所有数据

(15)p、P

p为将已复制的数据在光标下一行粘贴

P则为粘贴在光标所在行之前

例如,目前光标在第20行,且已经复制了10行的数据。此时按下p,那10行数据会粘贴在原本的20行之后,即从21行开始粘贴;此时若按下P,原来的第20行,会被推至第30行。

(16)J

将光标所在行与下一行的数据结合成一行

(17)c

重复删除多个数据

例如向下删除10行,10cj

j为方向

(18)u

复原前一个动作

(19)【Ctrl】+r

重做上一个动作

(20).

重复前一个动作

 1.4编辑模式(Insert Mode)

在命令模式下按下i就进入了编辑模式。

在编辑模式中,可以使用以下按键:

  • 字符按键以及Shift组合,输入字符

  • ENTER,回车键,换行

  • BACK SPACE,退格键,删除光标前一个字符

  • DEL,删除键,删除光标后一个字符

  • 方向键,在文本中移动光标

  • HOME/END,移动光标到行首/行尾

  • Page Up/Page Down,上/下翻页

  • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线

  • ESC,退出输入模式,切换到命令模式

1. i、I

进入插入模式

i:从目前光标所在处插入

I:在当前所在行的第一个非空字符处开始插入

2. a、A

进入插入模式

a:从当面光标所在的下一个字符处开始插入

A:从当面光标所在行的最后一个字符处开始插入

3. o、O

进入插入模式

o:在当前光标所在的下一行处插入新的一行

O:在当前光标所在的上一行处插入新的一行

4. r、R

进入替换模式

r:之后替换光标所在的那一个字符一次

R:一直替换光标所在字符,直至按下【ESC】为止

5.【ESC】

退出编辑模式,回到命令行模式

1.5底行模式(Last Line Mode)

在命令模式下按下:(英文冒号)就进入了底线命令模式。

底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。

在底线命令模式中,基本的命令有(已经省略了冒号):

  • q 退出程序

  • w 保存文件

按ESC键可随时退出底线命令模式。

(1):w

将编辑的数据写入硬盘中

(2):W

若文件属性为“只读”时,强制写入该文件

但是,成功与否,与权限相关

(3):q

离开vim

(4):q!

若曾修改过文件,又不想保存,使用!强制退出且不存储文件

(5):wq

保存并离开

若为:wq!,则为强制保存并离开

(6)ZZ

若文件没有更改,则不存储离开

若文件已被更改,则存储后离开

(7):w 【filename】

将编辑的数据存为另一个文件

类似于“另存为”

(8):r 【 filename】

在编辑的数据中,读入另一个文件的数据

即将【filename】这个文件的内容加到光标所在行的后面

(9):n1,n2 w 【filename】

将n1到n2行的内容保存为filename这个文件

(10):! command

暂时离开vim,到Shell环境下执行command并显示结果

例如,:! ls /home,即可在vim当中查看/home下以ls输出的信息

 

 1.6vim环境的变更

(1):set nu

显示行号

设定之后,会在每一行的前缀显示该行的行号

(2):set nonu

与set nu相反,为取消行号

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

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

相关文章

OpenCV报错:AttributeError: module ‘cv2.cv2‘ has no attribute ‘SIFT_create‘

报错位置: sift cv2.SIFT_create()报错原因:opencv将SIFT等算法整合到xfeatures2d集合里面了。 改为: sift cv2.xfeatures2d.SIFT_create()

JavaSE入门--初始Java

文章目录 Java语言概述认识Java的main函数main函数示例运行Java程序认识注释认识标识符认识关键字 前言: 我从今天开始步入Java的学习,希望自己的博客可以带动小白学习,也能获得大佬的指点,日后能互相学习进步,都能如尝…

组合数与莫队——组合数前缀和

用莫队求组合数是一种常见套路 莫队求 S ( n , m ) ∑ i 0 m ( n i ) S(n,m)\sum_{i0}^m\binom n i S(n,m)∑i0m​(in​) S ( n , m 1 ) S(n,m1) S(n,m1) 直接做个差,然后就相当于加上 ( n i 1 ) \binom n {i1} (i1n​) 求 S ( n 1 , m ) S(n1,m) S(n1,m)…

1认识一下防火墙

国内有很多防火墙的企业,像华为、H3C、Hillstone。 作为小白,我们来研究一下Hillstone的防火墙。官网为:https://www.hillstonenet.com.cn/,知识库位置:https://kb.hillstonenet.com/cn/ 作用 山石网科防火墙是一款…

【C语言进阶(11)】动态内存管理

文章目录 Ⅰ 存在动态内存分配的原因Ⅱ 动态内存函数1. malloc2. calloc3. realloc4. free (重要) Ⅲ 常见动态内存错误1. 对 NULL 指针的解引用操作2. 对动态开辟空间的越界访问3. 对非动态开辟内存使用 free 释放4. 使用 free 释放一块动态开辟内存的一部分5. 对同一块动态内…

基于SpringBoot的小区物业管理系统

基于SpringBoot的小区物业管理系统的设计与实现 开发语言:Java数据库:MySQL技术:SpringBootMyBatis工具:IDEA/Ecilpse、Navicat、Maven 系统展示 首页 管理员界面 摘要 基于SpringBoot的小区物业管理系统是一款为小区物业管理提…

华硕平板k013me176cx线刷方法

1.下载adb刷机工具, 或者刷机精灵 2.下载刷机rom包 华硕asus k013 me176cx rom固件刷机包-CSDN博客 3.平板进入刷机界面 进入方法参考: ASUS (k013) ME176CX不进入系统恢复出厂设置的方法-CSDN博客 4.解压ME176C-CN-3_2_23_182.zip,把UL-K013-CN-3.2.…

玩转快速排序(C语言版)

W...Y的主页 😊 代码仓库分享 💕 🍔前言: 本篇文章,我们来讲解一下神秘的快速排序。对于快速排序我相信大家都已经有所耳闻,但是快速排序是有很多的版本的。我们这次的目的就是快排的所有内容搞懂&#…

vs2015 设置字体

Source Code Pro一款堪称完美的编程字体_source code字体-CSDN博客

zkPoT:基于机器学习模型训练的ZKP

1. 引言 Sanjam Garg等人2023年论文 Experimenting with Zero-Knowledge Proofs of Training 中,所设计的zkPoT(zero-knowledge proof of training)协议: 为streaming-friendly的。所需RAM与训练电路size不呈比例。结合了MPC-in…

Kaggle - LLM Science Exam上:赛事概述、数据收集、BERT Baseline

文章目录 一、赛事概述1.1 OpenBookQA Dataset1.2 比赛背景1.3 评估方法和代码要求1.4 比赛数据集1.5 优秀notebook 二、BERT Baseline2.1 数据预处理2.2 定义data_collator2.3 加载模型,配置trainer并训练2.4 预测结果并提交2.5 相关优化 前言:国庆期间…

基于Java的手机在线商城设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

竞赛 机器视觉人体跌倒检测系统 - opencv python

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 机器视觉人体跌倒检测系统 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数&…

【软考】4.3 模式分解/事务并发/封锁协议

《模式分解》 保持函数依赖分解 无损分解 分解后可还原关系模式充分必要条件:R1∩R2 —>(R1 - R2) || R1∩R2—>(R2 - R1)“R1 - R2” 即在R1筛选除了R2的元素 《并发控制》 事务的四种特性:原子…

UE4.27.2 自定义 PrimitiveComponent 出现的问题

目录 CreatePrimitiveUniformBufferImmediateFLocalVertexFactory 默认构造函数GetTypeHashENQUEUE_RENDER_COMMANDnull resource entry in uniform buffer parameters FLocalVertexFactory 在看大象无形,其中关于静态物体网络绘制的代码出错的 bug 我也搞了一会………

RabbitMQ-发布订阅模式和路由模式

接上文 RabbitMQ-工作队列 1 发布订阅模式 将之前的配置类内容都替换掉 Bean("fanoutExchange")public Exchange exchange(){//注意这里是fanoutExchangereturn ExchangeBuilder.fanoutExchange("amq.fanout").build();}Bean("yydsQueue1")publ…

全栈开发笔记2:项目部署上线的三种方式

文章目录 最原始的方式宝塔Docker 部署其他 本文为编程导航实战项目学习笔记。 项目部署的三种方式: 最原始方式✅ yum 手动安装 jdk mysql tomcat nginx打包前端项目,放到某个目录,修改 nginx 配置修改线上的 mysql 配置,打包 j…

MySQL 多表关联查询优化实践和原理解析

目录 一、前言二、表数据准备三、表关联查询原理和两种算法3.1、研究关联查询算法必备知识点3.2、嵌套循环连接 Nested-Loop Join(NLJ) 算法3.3、基于块的嵌套循环连接 Block Nested-Loop Join(BNL)算法3.4、被驱动表的关联字段没索引为什么要选择使用 BNL 算法而不使用 Nested…

C++_pen_静态与常量

成员 常成员、常对象(C推荐使用 const 而不用#define,mutable) const 数据成员只在某个对象生存周期内是常量,而对于整个类而言却是可变的(static除外) 1.常数据成员(构造函数初始化表赋值) c…

华为云云耀云服务器L实例评测|安装搭建学生成绩管理系统

1.前言概述 华为云耀云服务器L实例是新一代开箱即用、面向中小企业和开发者打造的全新轻量应用云服务器。多种产品规格,满足您对成本、性能及技术创新的诉求。云耀云服务器L实例提供丰富严选的应用镜像,实现应用一键部署,助力客户便捷高效的在…