Linux-----14、vim

2023-12-19

# vim

  • Linux平台下的 文本编辑器: emacs、nano、gedit、 vi vim

vi(visual editor)编辑器通常被简称为vi,它是Linux和Unix系统上最基本的文本编辑器,类似于Windows 系统下的记事本。学会它后,我们将在Linux 的世界里游刃有余。

  • 为什么要学习vim?

    1. 所有的Unix like系统都会 内置 vi文本编辑器,其他的文本编辑器则不一定会存在

    2. 很多软件的编辑接口都会主动调用vi

    3. vim具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性,方便程序设计

    4. 程序简单,编辑速度快

    5. vim是vi的升级版

# ㈠ vim编辑器三种模式

# 1、命令行模式

问:命令行可以干什么?

答:可以进行一些基本的复制、删除、跳转、撤销、移动等操作

命令 含义 备注
yy 复制光标所在行 3yy表示复制3行
p(小写p) 光标所在行后面粘贴
P(大写P) 光标所在行前面粘贴
gg 光标快速跳到文件首行,并且定位到首字符 3gg表示快速跳到文件第3行行首字符
G 光标快速跳到文件尾行,并且定位到首字符
home 跳转到行首 Shift+6 即 ^ 符号表示行首
end 跳转到行尾 Shitf+4 即 $ 符号表示行尾
dd 删除光标所在行 3dd表示删除3行(包括光标所在行
d^ 从光标位置删至行首,不包括光标位
d$ 从光标位置删至行尾,包括光标位,与D作用相同
dG 删除光标所在行以及下面所有行
dgg 删除光标所在行以及上面所有行
x(小写) 删除光标所在字符后面一个字符,3x删除3个字符 类似于windows下的delete键
X(大写) 删除光标所在字符前面一个字符,3X删除3个字符 类似windows下的backspace键
u 撤销操作 ctrl+r 取消撤销

举例说明

① 环境准备

  1. 删除/tmp/目录里的所有内容

  2. 将/etc/passwd文件拷贝到/tmp目录里

# rm -rf /tmp/*
# cp /etc/passwd /tmp/

② 使用vim工具打开文件

用法1: vim 文件名 默认会进入命令行模式

[root@localhost ~]# vim /tmp/passwd

用法2: vim +数字 文件名 打开指定的文件,并且将光标移动到指定行

[root@localhost ~]# vim +5 /tmp/passwd

用法3: vim +/关键字 文件名 打开指定的文件,并且高亮显示关键词

[root@localhost ~]# vim +/shutdown /tmp/passwd

# 2、编辑模式

功能:编辑文件内容。

image-20231102110923623

# 3、底行模式

① 如何进入底行模式?

  • 命令模式进入底行模式:按冒号 :

  • 编辑模式进入底行模式:先按 Esc键 退出到命令模式,然后再按冒号 :

② 底行模式能做什么?

  1. 保存和退出

    保存文件,命令 :w ;另存为到其他文件,命令 :w 文件名

    保存退出,命令 :wq ;强制保存退出 :wq!

    退出不保存,命令 :q ;强制退出 :q!

    命令 :x 在文件没有修改的情况下,表示直接退出(等价于:q),在文件修改的情况下表

    示保存并退出(:wq)

  2. 搜索替换

    搜索摸索
    :/root n往下匹配;N往上匹配
    
    
    替换模式
    :%s/root/ROOT/ 全文搜索,替换每一行匹配到的第一个关键字
    :%s/root/ROOT/g 全文搜索,替换每一行所有匹配的关键字
    :%s/root/ROOT/gc 交互式替换
    :%s/\/sbin\/nologin/\/bin\/bash/ \转义符
    :%s#/sbin/nologin#/bin/bash#g 更换分隔符
    :7s/shutdown/SHUTDOWN/g 只替换第7行的内容
    取消高亮
    :noh (no highlight)
    
    
  3. 其他功能

    临时设置行号
    :set number 或 :set nu
    永久设置行号
    echo "set number" >> /etc/vimrc
    
    :set list 查看控制符
    
    地址定位
    :1,5 w /tmp/5.txt 保存前5行内容到/tmp/5.txt
    :r /tmp/5.txt 在光标所在行下面读取/tmp/5.txt文件内容
    :3r /tmp/5.txt 在当前文本的第3行后读取/tmp/5.txt文件
    :1,8d 删掉文本的1到8行
    :nr !command 在第n行下面读取命令所执行的结果
    :n! command 用命令的执行结果替换第n行内容
    
    

# vim编辑器三种模式切换

image-20231102111144378

# ㈢ 多窗口编辑问题

当两个终端同时打开或者意外结束文件时,会产生一个.swap文件 (交换文件)

# 举例说明:

你在两个终端同时打开/tmp/passwd文件,会产生/tmp/.passwd.swp。这时,有六个按钮可以使用:

O(pen for Read-Only):打开成只读文件。
E(dit):用正常方式打开要编辑的文件,并不会载入暂存文件的内容。这很容易出现两个用户相互改变对方的文件的问题。
R(ecover):加载暂存文件的内容。
D(elete):如果你确定这个暂存文件是没有用的,则可以删除。
Q(uit):不进行任何操作,回到命令行。
A(bort):忽略这个编辑行为,和Q类似。

需要注意的是:
这个暂存文件不会因为你结束vim后自动删除,必须要手动删除。否则每次打开对应的文件时都会出现这样的提示。

# ㈣ 可视化模式(了解)

按键:ctrl + v(可视块)或V(可视行),然后按下↑ ↓ ← →方向键来选中需要

复制的区块,按下y 键进行复制(不要按下yy),最后按下p 键粘贴

退出可视模式按下Esc

# 快速注释
ctrl + v
选中区块
I
输入文字
esc

# 快速删除
ctrl + v
选中区块
d

# ㈤ 课堂练习

  1. 将/etc/passwd 拷贝到/tmp/下面。修改/tmp/passwd,在文件的第15行下添加“hello heima”,光标停留在hello heima上,复制5行,粘贴在文件的最下面,保存;然后全文搜索将“/bin/bash”替换成itcast,保存后面20行到/tmp/passwd.bak,退出编辑。

  2. 查找/etc/下面的所有目录,并将其重定向到/tmp/etcdir文件里

  3. 在/tmp/etcdir文件中追加“好好学习,天天向上”,然后把/etc/passwd文件的内容添加到/tmp/etcdir文件里面,并重命名为newetcdir

# 高频命令

命令行模式:
# 复制一行
yyp
# 删除行
dd
# 撤回
u
# 取消撤回
ctrl + r
# 文件末尾
G
# 文件首位
gg
# 行首
^
# 行末
$

# 挂起shell
Ctrl + z  
fg重新进入vim

# 快速注释
ctrl + v
选中区块
I
输入文字
esc

# 快速删除
ctrl + v
选中区块
d

# 选择复制
v
选中区
y
p


底行模式:
临时设置行号
:set number 或 :set nu


搜索摸索
:/root n往下匹配;N往上匹配
:%s/root/ROOT/gc 交互式替换
取消高亮
:noh (no highlight)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux-----14、vim 的相关文章

  • 如何通过 makefile 在 Linux 上安装程序? [复制]

    这个问题在这里已经有答案了 可能的重复 Linux Unix make install 应该包含什么 https stackoverflow com questions 528399 what should linux unix make
  • PIL 的 Image.show() 带来*两个*不同的查看器

    在 python shell 中处理图像时 我使用 image show 其中 image 是 Image 的实例 很久以前什么也没发生 但在定义了一个名为 xv 的 Mirage 符号链接后 我很高兴 最近几天 show 将显示 Imag
  • 选择fasta文件中氨基酸超过300个且“C”出现至少4次的序列

    我有一个包含蛋白质序列的 fasta 文件 我想选择超过 300 个氨基酸且半胱氨酸 C 氨基酸出现超过 4 次的序列 我使用此命令来选择具有超过 300 个 aa 的序列 cat 72hDOWN fasta fasta bioawk c
  • 对于任何真实数据集,数据压缩比的最小可能值是多少

    我在写信ZLIB类似于嵌入式硬件压缩器的 API 它使用 deflate 算法来压缩给定的输入流 在进一步讨论之前 我想解释一下数据压缩率 数据压缩率定义为未压缩大小与压缩大小之间的比率 压缩比通常大于一 这意味着压缩数据通常比未压缩数据小
  • 使用 shell 脚本发送 HTML 邮件

    如何使用 shell 脚本发送 HTML 电子邮件 首先 您需要撰写消息 最低限度由这两个标头组成 MIME Version 1 0 Content Type text html 以及适当的消息正文 p Hello world p 获得后
  • Vagrant 遇到问题 - “404 - 未找到”

    我正在尝试使用 Vagrant 制作一个 LAMP 盒子 有人告诉我它使用起来非常简单 我对网络和虚拟机完全陌生 对 Linux Ubuntu 的经验也很少 我目前已尝试按照官方文档页面上的教程进行操作 http docs vagrantu
  • 在 Linux 中重新启动时,新创建的文件变为 0 kb(数据被覆盖为空)

    我遇到了一个奇怪的问题 这让我发疯 当前的任务是在 root 用户第一次登录时启动一组文件 并在同一用户第二次登录时启动另一组文件 我决定使用 profile 和 bashrc 文件 并在第一次登录期间发生的任务结束时重新加载 bashrc
  • 如何设置 Vim 进行 Android 开发?

    谁能描述一下用于 Android 开发的良好 Vim 设置吗 我现在使用 Eclipse 但我真的很想使用 Vim 因为它更快 而且我更喜欢它 例如 我对 Eclim 不感兴趣 我对使用哪些 Vim 插件 用于 Java 自动完成等 如何
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • 使用 libusb 输出不正确

    我用libusb编写了一个程序 我怀疑输出是否正确 因为所有条目都显示相同的供应商和产品 ID 以下是代码 include
  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文
  • VIM:使用 :normal 命令退出插入模式

    当我使用 normal 命令进入插入模式时 normal i 例如 如何退出插入模式 如果我按 或 VIM 会退出命令模式 并且我无法运行 normal 命令 I put imap
  • Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令的输出?

    我试图将命令的输出分配给变量 而不让命令认为它正在通过管道传输 原因是 如果正在通过管道传输 则相关命令会给出未格式化的文本作为输出 但如果从终端运行 则会给出颜色格式化的文本 我需要获取这种颜色格式的文本 到目前为止我已经尝试了一些事情
  • 如何在线程创建和退出时调用函数?

    include
  • grep 排除文件的数组参数

    我想从我的文件中排除一些文件grep命令 为此我使用参数 exclude excluded file ext 为了更容易阅读 我想使用包含排除文件的 bash 数组 EXCLUDED FILES excluded file ext 然后将
  • awk 在循环中使用时不打印任何内容[重复]

    这个问题在这里已经有答案了 我有一堆使用 file 1 a 1 txt 格式的文件 如下所示 A 1 B 2 C 3 D 4 并使用以下命令添加包含每个文件名称的新列 awk print FILENAME NF t 0 file 1 a 1
  • ioctl 命令的用户权限检查

    我正在实现 char 驱动程序 Linux 并且我的驱动程序中有某些 IOCTL 命令仅需要由 ADMIN 执行 我的问题是如何在 ioctl 命令实现下检查用户权限并限制非特权用户访问 IOCTL 您可以使用bool capable in
  • 批量删除文件名中包含 BASH 中特殊字符的子字符串

    我的目录中有一个文件列表 opencv calib3d so2410 so opencv contrib so2410 so opencv core so2410 so opencv features2d so2410 so opencv
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String

随机推荐

  • 2018年第七届数学建模国际赛小美赛C题共享单车对城市交通的影响解题全过程文档及程序

    2018年第七届数学建模国际赛小美赛 C题 共享单车对城市交通的影响 原题再现 共享自行车改变了许多城市的交通状况 许多大城市引入共享自行车来解决交通问题 我们需要定量评估共享自行车对城市交通的影响 以及相关的经济 社会和环境影响 解决这一
  • 【提示工程】Chain-of-Thought Prompting Elicits Reasoning in Large Language Models

    解决问题 探索大语言模型解决推理问题的能力 从头训练或微调模型 需要创建大量的高质量含中间步骤的数据集 成本过大 相关工作 1 使用中间步骤来解决推理问题 1 使用自然语言通过一系列中间步骤解决数学应用题 2 通过创建更大的数据集微调语言模
  • GPT与ArcGISPro结合编程,地理空间分析,图绘制、渲染

    在地学领域 ArcGIS几乎成为了每位科研工作者作图 数据分析的必备工具 而ArcGIS Pro3除了良好地继承了ArcMap强大的数据管理 制图 空间分析等能力 还具有二三维融合 大数据 矢量切片制作及发布 任务工作流 时空立方体等特色功
  • 基于vue2+海康威视web开发包3.2 无插件版本开发的监控系统

    文章目录 前言 一 插件准备 二 使用步骤 前言 项目最终效果为 可以预览 并且可以使用云台控制 购买的海康威视摄像头必须可以开启websocket 一 插件准备 插件下载地址 下载WEB无插件开发包V3 2 并加入到vue项目中 下载后解
  • Dubbo 动态代理策略有哪些?

    Dubbo 是一个高性能 轻量级的 Java RPC 框架 它支持多种动态代理策略 以下是 Dubbo 支持的一些动态代理策略 JDK动态代理 这是 Java 动态代理的基础 通过代理接口生成代理类 当调用远程服务时 Dubbo 会根据接口
  • Volta简单介绍

    Volta是一款强大的JavaScript工具管理器 它简化了命令行工具的安装和管理 通过Volta 开发者可以轻松地在多个项目中切换和配置Node js npm以及其它JavaScript工具版本 提高开发效率和环境一致性 什么是 Vol
  • 亚信安慧AntDB 数据库:超融合数据库引领实时计算新时代

    近期 亚信科技成功举办了以 数智驱动 全栈赋能 为主题的2022年度系列产品发布会的 数据库专场 在这次发布会上 亚信科技发布了AntDB V7 2数据库 这是一款 超融合一体流式引擎 的重要产品 并分享了在通信 交通等行业中的应用实践 当
  • Dubbo 容错策略

    Dubbo 是一款高性能 轻量级的开源 Java RPC 框架 它提供了多种容错策略以应对网络通信过程中的各种异常情况 以下是 Dubbo 的一些常见容错策略 Failover 失败自动切换 当服务调用失败时 自动切换到其他可用的服务提供者
  • 归一化的作用,请举例说明?

    归一化是将数据缩放到一个标准范围的过程 其目的是使得数据具有统一的尺度 有助于提高机器学习模型的性能和训练稳定性 以下是归一化的作用以及一个简单的例子 归一化的作用 消除尺度差异 不同特征的取值范围可能不同 这样可能导致某些特征对模型的影响
  • 短视频账号矩阵系统3年独立开发正规接口源码搭建部署开发

    一 矩阵系统源码主要有三种框架 短视频账号矩阵源码的框架有很多种 以下列举其中几种 1 星图矩阵 星图矩阵是抖音官方向商家提供的短视频广告推广平台 是抖音官方的赚钱工具 商家可利用星图矩阵进行广告推广 同时短视频创作者也能通过星图平台获取收
  • 说说 Dubbo 工作原理

    Dubbo 是一款高性能 轻量级的开源 Java RPC 框架 用于构建分布式系统 它提供了一种简单而灵活的解决方案 用于服务之间的远程调用和通信 Dubbo 的工作原理主要涉及以下几个关键组件和流程 组件说明 服务提供者 Provider
  • Java版直播商城规划:电商源码、小程序、三级分销与免 费搭建全攻略

    saas云平台 打造全行业全渠道全场景的saas产品 为经营场景提供一体化解决方案 门店经营区域化 网店经营一体化 本地化 全方位 一站式服务 为多门店提供统一运营解决方案 提供丰富多样的营销玩法覆盖所有经营场景 助力商家成功 系统稳定压倒
  • equalsIgnoreCase() 和 equals() 方法

    qualsIgnoreCase 方法用于将字符串与指定的对象比较 不考虑大小写 实例 equals 会判断大小写区别 equalsIgnoreCase 不会判断大小写区别 public class Test public static vo
  • PropertyUtils工具类的使用场景

  • 定制Electron窗口关闭行为,阻止默认事件与自定义逻辑

    当在Electron应用中开发时 你可能会碰到需要定制窗口关闭行为的情况 Electron提供了 close 事件 允许你在窗口关闭时执行自定义逻辑 然而 为了完全掌控关闭过程 你需要阻止默认的关闭事件 阻止默认关闭事件 在Electron
  • 小程序双向滑动组件双向slider滑动微信小程序组件slider组件

    使用说明 第一步 将zyslider和utils两个目录放在zjlist里面 如下图 第二步 在需要使用的页面json中引入组件 如下图 第三步 在wxml代码中写入以下代码 第四步 参数解析
  • 2023年度IT168技术卓越奖名单:亚信安慧AntDB数据库

    信创卓越贡献奖 湖南亚信安慧科技有限公司 一句话点评 亚信安慧的核心交易数据库AntDB具有应用时间久 15年 运行节点多 2000 数据规模大 PB级 产品稳定可靠 500 项目验证 等特征 助力客户率先实现行业内的多项 首个 突破 信创
  • 亚信安慧AntDB数据库成功助力通信业务核心转型

    账务数据库扮演着通信运营商业务支撑系统的核心角色 负责处理亿万用户资料同步 充值缴费和账务记录等重要任务 在5G建设逐渐普及的趋势下 5G业务规模也逐步扩大 面对5G业务的新特点 账务系统对数据库的高并发和高可用性提出了更高的要求 在这一挑
  • 数据库的增删改查

    库的基本管理 列出有哪些库 查询当前 MariaDB 服务器上有哪些库 选择库 管理库中的表格之前 可以先进 到 标库 创建新库 增加指定名称的新数据库 删除库 将指定名称的数据库从服务器上移除 表的基本管理
  • Linux-----14、vim

    vim Linux平台下的 文本编辑器 emacs nano gedit vi vim vi visual editor 编辑器通常被简称为vi 它是Linux和Unix系统上最基本的文本编辑器 类似于Windows 系统下的记事本 学会它