【Linux学习】vim编辑器的使用

2023-11-18

前言

所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。但是目前我们使用比较多的是 vim 编辑器。
vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。

一、vim是什么?

vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。

vim键盘图

二、vim的使用

1. vim的三种模式

基本上 vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。

1.1 命令模式(Command mode)

当我们在命令行输入vim,就启动了vim,进入了命令模式。
此状态下敲击键盘动作会被vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:

  • i 切换到输入模式,以输入字符。
  • x 删除当前光标所在处的字符。
  • : 切换到底线命令模式,以在最底一行输入命令。

若想要编辑文本:启动vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

1.2 输入模式(Insert mode)

在命令模式下进入输入模式的方式:

  • 输入a
  • 输入i
  • 输入o

在输入模式中,可以使用以下按键:

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

1.3 底线命令模式(Last line mode)

在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
按ESC键可随时退出底线命令模式。

简单的说,我们可以将这三个模式想成底下的图标来表示:

2. vim命令集

2.1 vim命令模式命令集

  1. 进入输入模式:
命令 说明
按「i」 进入插入模式「insert mode」,按 “i” 进入插入模式后是从光标当前位置开始输入文件
按「a」 进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字
按「o」 进入插入模式后,是插入新的一行,从行首开始输入文字
  1. 从插入模式切换为命令模式
按「ESC」键
  1. 移动光标
命令 说明
按「h」 左移一格
按「j」 下移一格
按「k」 上移一格
按「l」 右移一格
按「G」 移动到文章的最后
按「$」 移动到光标所在行的“行尾”
按「^」 移动到光标所在行的“行首”
按「w」 光标跳到下个字的开头
按「e」 光标跳到下个字的字尾
按「b」 光标回到上个字的开头
按「#l」 (#代表数字)光标移到该行的第#个位置,如:5l,56l
按[gg] 进入到文本开始
按[shift+g] 进入文本末端
按「ctrl」+「b」 屏幕往“后”移动一页
按「ctrl」+「f」 屏幕往“前”移动一页
按「ctrl」+「u」 屏幕往“后”移动半页
按「ctrl」+「d」 屏幕往“前”移动半页
  1. 删除文字
命令 说明
按「x」 每按一次,删除光标所在位置的一个字符
按「#x」 例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符
按「X」 大写的X,每按一次,删除光标所在位置的“前面”一个字符
按「#X」 例如,「20X」表示删除光标所在位置的“前面”20个字符
按「dd」 删除光标所在行
按「#dd」 从光标所在行开始删除#行
  1. 复制
命令 说明
按「yw」 将光标所在之处到字尾的字符复制到缓冲区中。
按「#yw」 复制#个字到缓冲区
按「yy」 复制光标所在行到缓冲区。
按「#yy」 例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
按「p」 将缓冲区内的字符贴到光标所在位置。

注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。

  1. 替换
命令 说明
按「r」 替换光标所在处的字符
按「R」 替换光标所到之处的字符,直到按下「ESC」键为止
  1. 撤销上一次操作
命令 说明
按「u」 如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复
按「ctrl + r」 撤销的恢复
  1. 更改
命令 说明
按「cw」 更改光标所在处的字到字尾处
按「c#w」 例如,「c3w」表示更改3个字
  1. 跳至指定的行
命令 说明
按「ctrl」+「g」 列出光标所在行的行号
按「#G」 例如,「15G」,表示移动光标至文章的第15行行首

2.2 vim底线模式命令集

在使用末行模式之前,请记住先按「ESC」键确定已经处于正常模式,再按「:」冒号即可进入末行模式。

  1. 列出行号
命令 说明
输入「set nu」 输入「set nu」后,会在文件中的每一行前面列出行号
  1. 跳到文件中的某一行
命令 说明
输入数字「#」 「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行
  1. 查找字符
命令 说明
「/关键字」 先按「/」键,再输入想寻找的字符,如果第一次找的关键字不是想要的,可以一直按「n」会往后寻找到想要的关键字为止
「?关键字」 先按「?」键,再输入想寻找的字符,如果第一次找的关键字不是想要的,可以一直按「n」会往前寻找到想要的关键字为止
  1. 保存文件
命令 说明
「w」 在冒号输入字母「w」就可以将文件保存起来
  1. 离开vim
命令 说明
「q」 按「q」就是退出,如果无法离开vim,可以在「q」后跟一个「!」强制离开vim
「wq」 一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Linux学习】vim编辑器的使用 的相关文章

  • 是否可以找到哪个用户位于 localhost TCP 连接的另一端?

    这是一个编程问题 但它是 Linux Unix 特定的 如果我从本地主机获得 TCP 连接 是否有一种简单的方法可以告诉哪个用户在 C 程序内建立了连接而无需 shell 我知道这对于 Unix 域套接字来说并不太难 我已经知道远程 IP
  • Alsa 带有来自调制解调器的 PCM 接口

    我有一个基于 imx28 CPU 的定制板 CPU 的串行端口连接到调制解调器的 PCM 输出 我必须为调制解调器的 PCM 接口开发一个驱动程序 使其成为 ALSA SoC 的一部分 您能指出内核树 中与我的设置重新组合的一些驱动程序吗
  • jpackage linux 创建的桌面文件不足

    我刚刚开始使用 jpackage 它是一个非常棒的工具 只要迈出一步 我的肩上的工作就减轻了很多 我对看起来硬编码且无法定制的东西越感到惊讶 JPackage 自动生成启动器 lib
  • 无法为 Python 3.4 创建工作虚拟环境

    I 安装Python 3 4 2 https docs python org 3 using unix html building python和我的 Linux Mint 17 1 中的 Virtualenv 12 0 5 然后我尝试创建
  • 使用netcat将unix套接字传输到tcp套接字

    我正在尝试使用以下命令将 unix 套接字公开为 tcp 套接字 nc lkv 44444 nc Uv var run docker sock 当我尝试访问时localhost 44444 containers json从浏览器中 它不会加
  • 原生 Linux 应用程序可像 ResHacker 一样编辑 Win32 PE

    我想运行自动修改 dll服务 用户提交特定的 dll 我在服务器上修改它 然后用户可以下载 dll的修改版本 是否有任何本机 Linux 应用程序提供常见的 Win32 PE 修改功能 例如图标 字符串 加速器 对话等 至少提供命令行或脚本
  • 退出 bash 脚本但保持进程运行

    我正在运行服务器 需要使用参数执行以下命令 这些脚本目前工作得很好 但问题是当我运行脚本时我无法返回到控制台 它在控制台中保持运行 如果我强行停止它 那么该过程也会停止 我想继续运行该进程并返回到控制台 bin sh php home st
  • 在中断时获取 current->pid

    我正在Linux调度程序上写一些东西 我需要知道在我的中断到来之前哪个进程正在运行 当前的结构可用吗 如果我在中断处理程序中执行 current gt pid 我是否可以获得我中断的进程的 pid 你可以 current gt pid存在并
  • 是否有可能通过 mmap 匿名内存“打孔”?

    考虑一个使用大量大致页面大小的内存区域 例如 64 kB 左右 的程序 每个内存区域的寿命都相当短暂 在我的特定情况下 这些是绿色线程的替代堆栈 如何最好地分配这些区域 以便一旦该区域不再使用 它 们的页面可以返回到内核 天真的解决方案显然
  • Windows 与 Linux 文本文件读取

    问题是 我最近从 Windows 切换到 Ubuntu 我的一些用于分析数据文件的 python 脚本给了我错误 我不确定如何正确解决 我当前仪器的数据文件输出如下 Header 有关仪器等的各种信息 Data 状态 代码 温度 字段等 0
  • 如何从 Linux 的 shell 中删除所有以 ._ 开头的文件?

    确实如标题所示 我已将许多文件从 Mac 复制到 Raspberry Pi 这导致了许多以前缀开头的多余文件 我想删除以以下开头的文件夹中的每个文件 我该怎么做 尝试类似的方法 cd path to directory rm rf 或者 如
  • Linux命令列出所有可用命令和别名

    是否有一个 Linux 命令可以列出该终端会话的所有可用命令和别名 就好像您输入 a 并按下 Tab 键一样 但针对的是字母表中的每个字母 或者运行 别名 但也返回命令 为什么 我想运行以下命令并查看命令是否可用 ListAllComman
  • svn:使用vim合并冲突

    我正在尝试看看如何使 svn 中的合并变得容易 This page http svnbook red bean com en 1 7 svn advanced externaldifftools html提到可以使用外部工具进行合并 vim
  • 进程名称长度的最大允许限制是多少?

    进程名称允许的最大长度是多少 我正在读取进程名称 proc pid stat文件 我想知道我需要的最大缓冲区 我很确定有一个可配置的限制 但就是找不到它在哪里 根据man 2 prctl http man7 org linux man pa
  • 如何通过代理将套接字连接到http服务器?

    最近 我使用 C 语言编写了一个程序 用于连接到本地运行的 HTTP 服务器 从而向该服务器发出请求 这对我来说效果很好 之后 我尝试使用相同的代码连接到网络上的另一台服务器 例如 www google com 但我无法连接并从网络中的代理
  • 具有少量父设备属性的 udev 规则

    我需要复杂且通用的udev规则来确定插入任何 USB 集线器的特定端口的 USB 设备 所以 我必须结合设备树不同层的父属性 我有这个 udevadm info query all name dev ttyUSB0 attribute wa
  • “grep -q”的意义是什么

    我正在阅读 grep 手册页 并遇到了 q 选项 它告诉 grep 不向标准输出写入任何内容 如果发现任何匹配 即使检测到错误 也立即以零状态退出 我不明白为什么这可能是理想或有用的行为 在一个程序中 其原因似乎是从标准输入读取 处理 写入
  • 如何从linux命令行运行.exe可执行文件? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 Windows 中有一个 abc exe 可执行文件 我可以使用 DOS 命令提示来执行此应用程序 并为其提供一些运行时变量 我想从
  • touch命令在一个目录下创建多个文件(不同名称)

    我想制作一个在 bash 中创建目录和文件结构的脚本 我尝试过这样的事情 mkdir p 1 2 touch 1 2 a b c a b c 应该是在一个命令或其他命令中创建的文件 但由于某种原因 结构是这样的 current folder
  • 将数组传递给函数名称冲突

    Specs GNU bash 版本 3 1 17 无法升级 Premise 我一直在摆弄数组 我想知道是否有任何方法可以让函数的本地变量与所述函数外部的数组同名 Example 在下面的示例中 我将尝试显示该问题 Working bin b

随机推荐

  • 转行做Linux运维工程师,简历的项目经验应该怎么写比较好?

    转行做linux运维工程师 首先要了解linux运维要做多少事情 需要什么基础 然后根据自己的情况进行有的放矢的追踪学习 先了解下做linux运维工程师需要做的事情 1 熟悉linux命令基本操作 玩不转基本操作别的都是空中楼阁 2 熟悉t
  • PNG文件格式分析

    目录 PNG简介 PNG文件组成成分是什么 File header Chunks 关键数据块 辅助数据块 实例分析 分析下图 File header Chunks 关键数据块分析 辅助数据块分析 PNG总结 参考文献 PNG简介 PNG是2
  • C语言中内嵌汇编asm语法

    内联汇编使用 asm C 和 asm C和C 关键字声明 语法格式如下所示 内联汇编支持大部分的ARM指令 但不支持带状态转移的跳转指令 如BX和BLX 指令 asm instruction instruction 必须为单条指令 asm
  • 计算机网络课程.doc,计算机网络课程-网络教学.DOC

    计算机网络课程 网络教学 计算机网络 课程教学大纲 Computer Networks 学时 50 60 一 简要说明 计算机网络是面向电子信息工程本科专业的一门重要的专业核心课 也是计算机科学与技术专业的专业基础课 目的是使学生掌握计算机
  • visual studio community 2019安装

    新电脑装好了pycharm anaconda 打算装cuda的时候 发现要先装visual studio 下载地址在微软官网https visualstudio microsoft com zh hans 选择community 2019下
  • 利用K-means聚类算法对未标注数据分组

    k 均值算法的工作流程 首先 随机确定k个初始点作为质心 接着 将数据集中的每个点分配到一个簇中 即为每个点找到距离其最近的质心 并将其分配给该质心所对应的簇 然后 每个簇的质心更新为该簇所有点的平均值 再次重新分配数据集中所有的点 如果所
  • UE4_插件开发引用第三方库编译报错[Error C4668]

    C Program Files x86 Windows Kits 10 include 10 0 16299 0 um winioctl h 7542 error C4668 WIN32 WINNT WIN10 TH2 is not def
  • 基于 APISIX 的服务网格方案 Amesh 积极开发中!

    作者 lingsamuel API7 ai 云原生技术专家 Apache APISIX Committer 在云原生快速发展的前提下 服务网格领域也开始逐渐火热 目前阶段 大家所熟知的服务网格解决方案很多 每种产品又各有其优势 因此在面对不
  • 禁止浏览器访问某些页面

    windows下 利用php apache http代理 实现本地页面黑名单 背景 准备工作 解决方案 背景 有一个项目 需要给第三方桌面软件做二次开发 但是这个软件启动时会弹出一个页面 这个页面的权限很大 如果不禁止掉的话 会给系统安全带
  • 51Nod 1081 子段求和

    题目链接 http www 51nod com Challenge Problem html problemId 1081 include
  • linux笔记整理

    Linux基础 一 基础目录 根目录 下 bin 存放普通用户可以使用的命令 boot 存放引导程序 内核等 dev 设备文件目录 etc 配置文件目录 home 普通用户家目录 lib 库文件和内核模块存放目录 lib64 64位库 pr
  • mybatis 日期格式化

    例子 SELECT date format create date Y m d H i s date format update date Y m d FROM user Y m d H i s 带时分秒 Y m d 不带时分秒
  • 设计一个算法判断表达式中的括号是否匹配

    一 问题描述 设计一个算法判断表达式中的括号是否匹配 二 问题解答 解析 这里需要用到STL在算法设计中的应用 STL在算法设计中的应用有如下几种 存放主数据 存放临时数据 检测数据元素的唯一性 数据的排序 优先队列作为堆 因此这里需要用上
  • 安装visio报错,提示无法安装64位版本的Office,找到了以下32位程序怎么办

    今天安装Visio准备用来写系统详细说明书上面画图的结果发现居然报错 实在是我也没有装过office 试过了几个方案什么office修复助手啊 什么什么的发现卵用没有 最后解决方案 win r打开运行 输入regedit 依次到HKEY C
  • 服务器拔下内存条系统不能启动,电脑主板不能启动的解决方法

    电脑主板不能启动的解决方法 因为主板扩展槽或扩展卡有问题 导致插上显卡 声卡等扩展卡后 主板没有响应 因此造成开机无显示 例如蛮力拆装agp显卡 导致agp插槽开裂 即可造成此类故障 下面是JY135小编收集整理的电脑主板不能启动的解决方法
  • 操作系统习题整理

    操作系统习题整理 从网上和课本上汇总整理了一些操作系统相关的习题 可以作为复习资料使用 1 操作系统是一种 B A 通用软件 B 系统软件 C 应用软件 D 软件包 2 操作系统是对 C 进行管理的软件 A 软件 B 硬件 C计算机资源 D
  • replaceAll()正则表达式替换内容

    String input camelCasing input input replaceAll A Z 1 System out println input 输出结果为 camel Casing
  • Pandas rank()函数排名的用法与解释

    之前搜关于pandas rank 函数的帖子 好几个大哥都是照搬书 当然也有一些大神直接一顿操作 截图 我结合了书还有自己的理解 希望没有错误 也希望和我一样的新手能看懂 谢谢 1 rank 默认情况下 rank 通过将平均排名分配到每个组
  • thinkphp6 入门(6)--中间件是什么 怎么用

    一 什么是中间件 当客户端发送请求至服务器时 HTTP请求会经过多个中间件 最后返回响应给客户端 中间件可以 在请求到达目标控制器或动作之前对请求进行操作 可以在响应离开目标控制器或动作之前对响应进行操作 二 中间件的作用 我们可以在不修改
  • 【Linux学习】vim编辑器的使用

    Linux环境中vim编辑器的使用 前言 一 vim是什么 二 vim的使用 1 vim的三种模式 1 1 命令模式 Command mode 1 2 输入模式 Insert mode 1 3 底线命令模式 Last line mode 2