Linux编辑器-vim的使用

vim的基本概念

vim的三种模式(其实有好多模式,目前掌握这3种即可),分别是命令模式(command mode)、插
入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:

正常/普通/命令模式(Normal mode)

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode

插入模式(Insert mode)

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。

末行模式(last line mode)

文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。

要查看你的所有模式:打开vim,底行模式直接输入
:help vim-modes

vim的基本操作

进入vim,在系统提示符号输入vim及文件名称后,就进入vim全屏幕编辑画面:
vim test.c


不过有一点要特别注意,就是你进入vim之后,是处于[正常模式],你要切换到[插入模式]才能够输入文字。

三种模式的切换

[正常模式]切换至[插入模式]
输入a
输入i
输入o


[插入模式]切换至[正常模式]
目前处于[插入模式],就只能一直输入文字,如果发现输错了字,想用光标键往回移动,将该字删除,可以先按一下「ESC」键转到[正常模式]再删除文字。当然,也可以直接删除。


[正常模式]切换至[末行模式]
「shift + ;」, 其实就是输入「:」


退出vim及保存文件

在[正常模式]下,按一下「:」冒号键进入「Last line mode」,例如:
: w (保存当前文件)
: wq (输入「wq」,存盘并退出vim)
: q! (输入q!,不存盘强制退出vim)

vim正常模式命令集


插入模式
按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件;
按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
从插入模式切换为命令模式
按「ESC」键。
移动光标
vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格
按「G」:移动到文章的最后
按「 $ 」:移动到光标所在行的“行尾”
按「^」:移动到光标所在行的“行首”
按「w」:光标跳到下个字的开头
按「e」:光标跳到下个字的字尾
按「b」:光标回到上个字的开头
按「#l」:光标移到该行的第#个位置,如:5l,56l
按[gg]:进入到文本开始
按[shift+g]:进入文本末端
按「ctrl」+「b」:屏幕往“后”移动一页
按「ctrl」+「f」:屏幕往“前”移动一页
按「ctrl」+「u」:屏幕往“后”移动半页
按「ctrl」+「d」:屏幕往“前”移动半页
删除文字
「x」:每按一次,删除光标所在位置的一个字符
「#x」:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符
「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符
「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符
「dd」:删除光标所在行
「#dd」:从光标所在行开始删除#行
复制
「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
「#yw」:复制#个字到缓冲区
「yy」:复制光标所在行到缓冲区。
「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
替换
「r」:替换光标所在处的字符。
「R」:替换光标所到之处的字符,直到按下「ESC」键为止。
撤销上一次操作
「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复。
「ctrl + r」: 撤销的恢复
更改
「cw」:更改光标所在处的字到字尾处
「c#w」:例如,「c3w」表示更改3个字
跳至指定的行
「ctrl」+「g」列出光标所在行的行号。
「#G」:例如,「15G」,表示移动光标至文章的第15行行首。

vim末行模式命令集

列出行号
「set nu」: 输入「set nu」后,会在文件中的每一行前面列出行号。
跳到文件中的某一行
「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。
查找字符
「/关键字」: 先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。
「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。
保存文件
「w」: 在冒号输入字母「w」就可以将文件保存起来
离开vim
「q」:按「q」就是退出,如果无法离开vim,可以在「q」后跟一个「!」强制离开vim。
「wq」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。

简单vim配置

在目录 /etc/ 下面,有个名为vimrc的文件,这是系统中公共的vim配置文件,对所有用户都有效。
而在每个用户的主目录下,都可以自己建立私有的配置文件,命名为:“.vimrc”。例如,/root目录下,通常已经存在一个.vimrc文件,如果不存在,则创建之。
切换用户成为自己执行 su ,进入自己的主工作目录,执行 cd ~
打开自己目录下的.vimrc文件,执行 vim .vimrc

网上会有许多大佬配置好的vimrc文件,如果需要省事可以去找找大佬们配置好的使用。

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

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

相关文章

中医优势病种诊疗方案数据库

中医诊疗方案结合了几千年的实践经验与理论体系,形成了一套独特的诊疗方法。随着国家对中医药事业的重视,多个中医诊疗方案被国家卫生健康委员会和国家中医药管理局等权威机构正式发布,这对规范中医临床诊疗行为,提升医疗服务质量…

富格林:学习甄别暗箱陷阱阻挠受害

富格林悉知,黄金投资在投资市场上扮演着重要的角色,在任何时期总有人在投资黄金。然而,对于新手投资者来说,了解虚假信息防止诱骗暗箱受害是非常关键的,投资者在进入投资市场之前,需要掌握一定的技术要领&a…

MTK MFNR

一、MFNR 简介 二、MFNR 开关与决策 三、MFNR 相关的adb 命令 四、MFNR log 分析 五 参考文献 一、MFNR 简介 MFNR : Multiple Frame Noise Reduction MFLL : Multiple Frame Low Light BSS : Best Select Shot MFNR 跟 MFLL 是两个功能一致,名称不同的简称&#xf…

SAP MESSAGEID FF759 不能过帐凭证:本币计的税基为0的快捷方案

不能过帐凭证:本币计的税基为0 消息编号 FF759 诊断 尝试步成本币中计税基数为零的凭证,尽管外币中税金额和计税基数不为零, 系统响应 拒绝凭证输入。 步骤 再次输入凭证。 这个错误的原因,是因为四舍五入导致的税为零。根据百度的反馈&…

执行npm命令一直出现sill idealTree buildDeps怎么办?

一、问题 今天在运行npm时候一直出项sill idealTree buildDeps问题 二、 解决 1、先删除用户界面下的npmrc文件(注意一定是用户C:\Users\{账户}\下的.npmrc文件下不是nodejs里面),进入到对应目录下,Mac启动显示隐藏文件操作&…

生产服务器变卡怎么排查

服务器变卡怎么排查,可以从以下四个方面去考虑 生产服务器变卡怎么排查 1、网络2、cpu的利用率3、io效率4、内存瓶颈 1、网络 可以使用netstat、iftop等工具查看网络流量和网络连接情况,检查是否网络堵塞、丢包等问题 2、cpu的利用率 1、用top命令定…

【arcpy】 解决构建过小面矢量无效

问题描述 通常利用arcpy向面矢量添加面数据的方法如下 import arcpy singlePolygon [[86.30491319444444, 31.08521484375], [86.30491427951388, 31.08521484375], [86.30491427951388, 31.085215928819444], [86.30491319444444, 31.085215928819444],[86.30491319444444,…

python在selenium网页模拟运行过程中需要打开文件夹上传文件的情况的解决方法

在selenium运行过程中,可能会遇到网页需要上传文件图片等情况,有时可以直接用selenium中send_keys直接上传,但是有时不行,这时我们需要用到另一个包,pywinauto 具体的代码如下, import pywinauto # pywina…

JNI NDK错误汇总

问题一:This app only has 32-bit [armeabi-v7a] native libraries. 解决:在app目录下的build.gradle的android结构里加上arm64-v8a,如下: android {.......defaultConfig{ndk{ abiFilters armeabi-v7a, arm64-v8a //abiFilters a…

驱动执行篇之电机编码器:编码器基础与双编码器方案

目录 |1.编码器概述 |2.编码器分类 |2.1.增量式编码器和绝对值编码器 |2.2.光电编码器 |3.双编码器方案 |3.1几种扭矩感知方案 |3.3双编码器安装方式 |1.编码器概述 编码器 编码器,是将信号(如比特流)或数据进行编制、转换为可用以通讯…

ECA-Net:深度卷积神经网络中的高效通道注意力机制【原理讲解及代码!!!】

ECA-Net:深度卷积神经网络中的高效通道注意力机制 在深度学习领域,特别是在深度卷积神经网络(DCNN)中,注意力机制已经成为提升模型性能的关键技术之一。其中,ECA模块(Efficient Channel Attent…

C# 中优雅的动态序列化接口返回数据

在C#中,与Web服务的交互经常涉及到数据的序列化和反序列化。当我们与不同的API接口交互时,返回的数据结构和类型可能会有所不同。为了处理这种多样性,我们需要一种方法来动态地序列化接口返回的数据。 本文将介绍如何使用C#中的Json.NET&…

前端项目的导入和启动

安装依赖 前端安装依赖只需要在控制台执行“npm i”即可。Tips:当我们执行的时候,有时候会很慢。可以考虑使用yarn或者pnpm。然而使用yarn或者pnpm有时候有一些莫名其妙的问题。所以还是得使用npm, 这个时候可以通过更换镜像源为淘宝镜像源。…

【C++】容器:vector的接口介绍大全

vector的接口介绍大全 一、vector的接口介绍二、常用接口的使用1. 定义vector2. vector赋值操作3. 迭代器4. 容量操作resizereserve 5. 访问元素[] front back at 6. 修改容器assignpush_back pop_backinserteraseclear 7. 容器的其他操作swap vector 是 C 标准模板库&#xff…

B2134 质数的和与积

题目描述: 两个质数的和是 S,它们的积最大是多少? 代码: package lanqiao;import java.math.BigInteger; import java.util.*;public class Main {public static int[] prime new int[10000];public static void main(String[] args) {Scanner sc n…

淘宝商家号码采集软件教程步骤

淘宝商家号码采集工具的原理可以通过以下几个步骤来解释: 搜索关键词:工具首先通过用户输入的关键词,在淘宝平台上进行搜索。关键词可以是商品类别、商家名称等。 解析网页:工具通过网络请求获取淘宝搜索结果页面的源码&#xff…

vue3+ts实现表格单元格编辑功能

使用 el-table-plus 中的 el-switch 组件来控制表格的可编辑状态,并且使用 el-table-plus 组件显示表格。通过 :edit-table 属性来控制表格是否可编辑,而 :edit-config 属性用来配置编辑时的样式和允许编辑的列。当 switch 组件的状态发生改变时&#xf…

Python 学习笔记(十)—— 文件

目录 一、文件基本概念 二、文件打开和关闭 2.1 打开文件 open() 方法 2.2 File 对象的属性 2.3 关闭文件 close() 方法 三、文件操作 3.1 写入操作方法 3.1.1 write() 方法 3.3.2 writelines() 方法 3.2 读取操作方法 3.2.1 read() 方法 3.2.2 readline() 方法 3…

Docker Mysql 5.7搭建主从复制 CentOS7

文章目录 一、 环境介绍:二、 搭建步骤:1、容器启动2、master配置3、slave配置4、主从配置1、master配置2、slave配置 一、 环境介绍: 系统: CentOS7 mysql:5.7 docker:25.0.0.0 二、 搭建步骤&#xff1…

flex上下固定中间占固定高度(中间左右菜单)且内容自动滚动

效果图 布局&#xff1a; <view class"pop_tSet"><view class"pop_Con"><view class"box_bb"><view class"bb_title">{{titleObj[popType]}}</view></view><view class"box_bb_bot"…