当前位置: 首页 > news >正文

Linux Vim 简介

文章目录

    • 01. 编辑器 Gedit 介绍
    • 02. 什么是 Vi(Vim)
    • 03. vim工作模式
      • 4.1 命令模式
      • 4.2 编辑模式
      • 4.3 末行模式
    • 04. vim教程
    • 05. vim基本操作
    • 06. vim实用操作
      • 7.1 命令模式下的操作
      • 7.2 末行模式下的操作

01. 编辑器 Gedit 介绍

gedit 是一个 GNOME 桌面环境下兼容 UTF-8 的 文本编辑器。它使用 GTK+ 编写而成,因此它十分的简单易用,有良好的语法高亮,对中文支持很好,支持包括 gb2312、gbk 在内的多种 字符编码。gedit 是一个自由软件。

gedit 是 Linux 下的一个纯文本编辑器,类似 windows 下的写字板程序,在不需要特别复杂的编程环境下,作为基本的文本编辑器比较合适。但你也可以把它用来当成是一个集成开发环境 (IDE), 它会根据不同的语言高亮显现关键字和标识符。打开gedit图形界面如下:

02. 什么是 Vi(Vim)

vi (Visual interface) 编辑器是 Linux 系统中最常用的文本编辑器,vi 在 Linux 界有编辑器之神的美誉,几乎所有的 Linux 发行版中都包含 vi 程序。

vi 工作在字符模式下,不需要图形界面,非常适合远程及嵌入式工作,是效率很高的文本编辑器,尽管在 Linux 上也有很多图形界面的编辑器可用,但vi的功能是那些图形编辑器所无法比拟的。

vim 是 vi 的升级版,它不仅兼容 vi 的所有指令,而且还有一些新的特性,例如 vim 可以撤消无限次、支持关键词自动完成、可以用不同的颜色来高亮你的代码。vim 普遍被推崇为类 vi 编辑器中最好的一个。vim 键盘如下:

03. vim工作模式

vi 有三种基本工作模式: 命令模式、文本输入模式(编辑模式)、末行模式

4.1 命令模式

任何时候,不管用户处于何种模式,只要按一下 ESC 键,即可使 vi 进入命令模式。我们在 shell 环境下输入启动 vim 命令,进入编辑器时,也是处于该模式下。

在命令模式下,用户可以输入各种合法的 vi 命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的 vi 命令,则 vi 在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是 vi 的合法命令,vi 会响铃报警。

4.2 编辑模式

在命令模式下输入插入命令 i(I)、附加命令 a(A) 、打开命令 o(O)、替换命 s(S)都可以进入文本输入模式,此时vi窗口的最后一行会显示“插入”。

在该模式下,用户输入的任何字符都被 vi 当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按键ESC即可。

4.3 末行模式

末行模式下,用户可以对文件进行一些附加处理。尽管命令模式下的命令可以完成很多功能,但要执行一些如字符串查找、替换、显示行号等操作还是必须要进入末行模式的。

在命令模式下,输入冒号即可进入末行模式。此时 vi 窗口的状态行会显示出冒号,等待用户输入命令。用户输入完成后,按回车执行,之后 vi 编辑器又自动返回到命令模式下。

04. vim教程

deng@itcast:~/test$ vimtutor

05. vim基本操作

6.1 打开文件

vim filename:打开或新建文件,并将光标置于第一行行首,如果文件不存在,则会新建文件。打开不存在文件如下图所示:

6.2 编辑文件

如果通过 vi 打开一个已经存在的文件,首先进入命令模式,此时输入的任何字符都被视为命令,不能输入内容。

在命令模式输入 i,即可进入编辑模式,编辑文件内容。

6.3 保存文件

方式一:一定要先退出插入模式(按 Esc 进入命令模式),然后(小写状态下),shift + zz (按住 “shift” + 按两下“z”键),或者(大写状态下:ZZ) 即可保存退出当前文件。

方式二:先退出插入模式(按 Esc 进入命令模式);然后在命令模式下按下:(英文冒号)就进入了末行命令模式,末行命令模式可以输入单个或多个字符的命令,可用的命令非常多。在底线命令模式中,基本的命令有(已经省略了冒号):

  • q:退出程序。
  • q!:退出文件,对文件的修改不做保存。
  • w:保存当前对文件的修改,但是不退出文件。
  • w!:强制保存但是不退出文件。
  • w file:保存当前的文件修改到 file 文件当中。
  • wq:退出文件并保存对文件的修改。
  • e!:放弃对文件的所有修改,恢复文件到上次保存的位置。
  • saveas file:另存为 file。

06. vim实用操作

7.1 命令模式下的操作

1)切换到编辑模式

按键功能
i光标位置当前处插入文字
I光标所在行首插入文字
o(字母)光标下一行插入文字(新行)
O(字母)光标上一行插入文字(新行)
a光标位置右边插入文字
A光标所在行尾插入文字
s删除光标后边的字符,从光标当前位置插入
S删除光标所在当前行,从行首插入

2) 光标移动

按键功能
Ctrl + f向前滚动一个屏幕
Ctrl + b向后滚动一个屏幕
gg到文件第一行行首
G(大写)到文件最后一行行首,G必须为大写
mG或mgg到指定行,m为目标行数
0(数字)光标移到到行首(第一个字符位置)
$光标移到到行尾
l(小写L)向右移动光标
h向左移动光标
k向上移动光标
j向下移动光标
^光标移到到行首(第一个有效字符位置)

3)复制粘贴

按键功能
[n]yy复制从当前行开始的 n 行
p把粘贴板上的内容插入到当前行

4)删除

按键功能
[n]x删除光标后 n 个字符
[n]X删除光标前 n 个字符
D删除光标所在开始到此行尾的字符
[n]dd删除从当前行开始的 n 行(准确来讲,是剪切,剪切不粘贴即为删除)
dG删除光标所在开始到文件尾的所有字符
dw删除光标开始位置的字,包含光标所在字符
d0(0为数字)删除光标前本行所有内容,不包含光标所在字符
dgg删除光标所在开始到文件首行第一个字符开始的所有字符

5)撤销恢复

按键功能
.(点)执行上一次操作
u撤销前一个命令
ctrl+r反撤销
100 + .执行上一次操作100次

6)保存退出

按键功能
ZZ(shift+z+z)保存退出

7)查找

按键功能
/字符串从当前光标位置向下查找(n,N查找内容切换)
?字符串从当前光标位置向上查找(n,N查找内容切换)

8)替换

按键功能
r替换当前字符
R替换当前行光标后的字符(ESC退出替换模式)

9)可视模式

按键功能
v按字符移动,选中文本,可配合h、j、k、l选择内容,使用d删除,使用y复制
Shift + v行选(以行为单位)选中文本,可配合h、j、k、l选择内容,使用d删除,使用y复制
Ctrl + v列选 选中文本,可配合h、j、k、l选择内容,使用d删除,使用y复制

7.2 末行模式下的操作

1)保存退出

按键功能
:wq保存退出
:x(小写)保存退出
:w filename保存到指定文件
:q退出,如果文件修改但没有保存,会提示无法退出
:q!退出,不保存
all 表示所有

2)替换

按键功能
: s/abc/123/光标所在行的第一个abc替换为123
: s/abc/123/g光标所在行的所有abc替换为123
:1,10s/abc/123/g将第一行至第10行之间的abc全部替换成123
:%s/abc/123/g当前文件的所有abc替换为123
:%s/abc/123/gc同上,但是每次替换需要用户确认
:1,$s/abc/123/g当前文件的所有abc替换为123

3)分屏

按键功能
:sp当前文件水平分屏
:vsp当前文件垂直分屏
: sp 文件名当前文件和另一个文件水平分屏
: vsp 文件名当前文件和另一个文件垂直分屏
ctrl-w-w在多个窗口切换光标
:wall/:wqall/:qall保存/保存退出/退出所有分屏窗口
vim -O a.c b.c垂直分屏
vim -o a.c b.c水平分屏

4) 其它用法(扩展)

按键功能
:!man 3 printf在vim中执行命令 (q退出)
:r !ls -l将ls -l执行的结果写入当前文件中
:r /etc/passwd将/etc/passwd文件中的内容写入到当前文件中
:w /tmp/txt将当前文件内容写入到/tmp/txt文件中
:w! /tmp/txt强制将当前文件内容写入到/tmp/txt文件中
:1,10s/^g将第1行到10行行首添加// (^表示行首) //\转移字符
:1,10s#^#//#g将第1行到10行行首添加// (#可以临时代替/ 分隔)
:%s/;/\r{\r\treturn0;\r}\r/g将;替换成{ return 0; }
:1,10s#//##g将第1行到10行行首去掉// (#可以临时代替/ 分隔)

5) 配置文件
局部配置文件(推荐局部配置,因为这样不会影响到其他用户)

deng@itcast:~/share/2nd$ vim ~/.vimrc

全局配置文件:

deng@itcast:~/share/2nd$ sudo vim /etc/vim/vimrc

相关文章:

Linux Vim 简介

文章目录01. 编辑器 Gedit 介绍02. 什么是 Vi(Vim)03. vim工作模式4.1 命令模式4.2 编辑模式4.3 末行模式04. vim教程05. vim基本操作06. vim实用操作7.1 命令模式下的操作7.2 末行模式下的操作01. 编辑器 Gedit 介绍 gedit 是一个 GNOME 桌面环境下兼容 UTF-8 的 文本编辑器。…...

软件测试面试题 —— 整理与解析(2)

😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:🌎【Austin_zhai】🌏 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能&#xf…...

HashMap与Hashtable的这九个区别,你知道吗

Hashtable Hashtable是原始的java.util的一部分,属于一代集合类,是一个Dictionary具体的实现 。Java1.2重构的Hashtable实现了Map接口,因此,Hashtable现在集成到了集合框架中。它和HashMap类很相似。 Hashtable与HashMap的区别 …...

Java奠基】掌握Java基础知识

目录 常见字面量 特殊字面量 数据类型 标识符 键盘录入 常见字面量 字面量就是数据在程序中的书写格式,字面量的分类如下: 字面量类型说明举例整数类型不带小数点的数字12,25小数类型带小数点的数字3.14,-5,20…...

Hive窗口函数-lead/lag函数

前面我们学习的first_value和last_value 取的是排序后的数据截止当前行的第一行数据和最后一行数据 Lag和Lead分析函数可以在一次查询中取出当前行后N行和前N行的数据,虽然可以不用排序,但是往往只有在排序的场景下取前面或者后面N 行数据才有意义 这种…...

2023JAVA面试题全集超全面超系统超实用!早做准备早上岸

2022年我凭借一份《Java面试核心知识点》成功拿下了阿里、字节、小米等大厂的offer,两年的时间,为了完成我给自己立的flag(拿下一线互联网企业offer大满贯),即使在职也一直在不断的学习与备战面试中!——或…...

FreeRTOS入门(05):事件组

文章目录目的基础说明相关函数使用演示总结目的 事件组是RTOS中相对常用的用于任务间交互的功能,这篇文章将对相关内容做个介绍。 本文代码测试环境见前面的文章:《FreeRTOS入门(01):基础说明与使用演示》 基础说明…...

【API网关】Kong安装和基本操作

文章目录前言一、API网关选型和Kong的安装1. 什么是API网关2. API网关技术选型3. 安装postgresql和migrations4. 安装kong5. 安装konga二、基本的路由转发配置1. kong的8001、8000和1337端口号的关系2. 基本的路由转发配置3. kong集成consul实现服务发现和负载均衡4. kong配置j…...

git --- stash用法

1 git stash命令介绍 // 保存当前分支的修改,回到上个版本的状态 git stash // 保存当前分支的修改,回到上个版本的状态,msg是保存当前修改的说明 git stash save "msg" // 用来展示所有保存的列表 git stash list // 用来展示某一保存记录所修改的操作 gi…...

【星海出品】VScode安装配置

安装VScode最好在官方网站上下载。 例如 https://code.visualstudio.com/Download 不知道自己的windows版本的话,可以命令行WINR 运行 输入: systeminfo | find "OS" //获取OS的版本信息。 systeminfo | find "系统类型" //获取系统…...

docker 基础命令备忘录

1. 官方安装docker curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.shcurl -L "https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod x…...

华为OD机试 - 创建二叉树(Java JS Python)

题目描述 请按下列描述构建一颗二叉树,并返回该树的根节点: 1、先创建值为-1的根结点,根节点在第0层; 2、然后根据operations依次添加节点: operations[i] = [height, index] 表示对第 height 层的第index 个节点node, 添加值为 i 的子节点: 若node 无「左子节点」,则…...

服务案例|基于IT事件管理,提升业务连续性

数字化经济时代,IT架构复杂性越来越高,业务连续性成为很多行业或企业最核心的任务。业务连续性管理是一个不断提升的过程,围绕事件“发现-响应-定位处理-降低发生”的事件处理思路,结合平台化运维,助力业务快速提升。 …...

你说下HashMap的工作原理?

我在网上看了很多文章 ,各种长篇大论 ,原理细节、实在看不下去了,所以着重讲一下,HashMap 面试会问到的点 说人话, 你们公司的集合 不会自研吧, 假如 你们叫 锤子科技 ,那老板也不会要求你去写一…...

k8s 配置ingress 并做一个demo

需求:k8s 配置好之后除了 nodeport 以外都是对集群内部的行为使用nodeport 并不是很友好,要自己处理很多的端口管理使用ingress 可以更好的整合配置服务进程:下载ingress-nginx 的yaml 文件https://github.com/kubernetes/ingress-nginx/blob…...

【手把手一起学习】(七) Altium Designer 20常用PCB设计规则

1 常用PCB设计规则 PCB规则设计是PCB设计中至关重要的环节,它约束了电气要求、布线方式、器件摆放位置等,为后续的手动布局、布线提供依据。完善的PCB规则设计,可以减少设计中的错误,提高PCB设计效率。 1.1 PCB设计规则管理器 …...

(01)Unity 中使用 HDRP

概述Unity在2019.2版本中推出HDRP(高清渲染管线),目的是为了提高图形质量,实现从照片写实到风格化的图像。先看一下官方对HDRP的概述:高清渲染管线 (HDRP) 是由 Unity 构建的高保真脚本化渲染管…...

使用cmake在win10编译yolov5+tensorRT+cuda+cudnn+protobuf代码进行混合编译

这里进行之前需要把protobuf在win10下编译,可以参考这篇文章从Linux下载下来的工程代码,这里建议直接使用vs系列打开不要用vscode打开,vscode对win下的cmake不友好,主要体现在报错机制无法直接定位,题主的环境是vs2022…...

《C++ Primer Plus》第17章:输入、输出和文件(7)

编程练习 编写一个程序计算输入流中第一个$之前的字符数目&#xff0c;并将$留在输入流中。 #include<iostream>int main() {int ct 0;while(std::cin.peek()!$){ct;std::cin.get();}std::cout << "num: " << ct << std::endl;return 0; }答…...

PGLBox 超大规模 GPU 端对端图学习训练框架正式发布

作者 | PGLBox项目组 导读 PGLBox是百度研发的基于GPU的大规模图模型训练框架&#xff0c;支持数百亿节点和边的图模型全GPU训练&#xff0c;已在百度广泛部署。相比业界主流的分布式 CPU 解决方案&#xff0c;PGLBox 具有超高性能、超大规模、算法丰富、灵活易用、落地广泛等优…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决

问题&#xff1a; pgsql数据库通过备份数据库文件进行还原时&#xff0c;如果表中有自增序列&#xff0c;还原后可能会出现重复的序列&#xff0c;此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”&#xff0c;…...