Linux vim编辑器使用指南

2023-11-19

vim编辑器介绍

Vim是从vi发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。Vim 具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性,方便程序设计。
在这里插入图片描述

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

vim的三种工作模式
在这里插入图片描述

vim命令模式

用户启动vim,便直接进入了命令模式。
如果你想要使用 vim 来建立一个名为 test.txt 的文件时,你可以这样做:

$ vim test.txt

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

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

vim命令模式下有许多常用的命令,总结如下:
移动光标的方法

h 或 向左箭头键(←) :光标向左移动一个字符
j 或 向下箭头键(↓) :光标向下移动一个字符
k 或 向上箭头键(↑) :光标向上移动一个字符
l 或 向右箭头键(→) :光标向右移动一个字符

在键盘上,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。如果想要进行多次移动的话,例如向下移动 30 行,可以使用 “30j” 或 “30↓” 的组合按键,亦即加上想要进行的次数(数字)后,按下动作即可。

n<space> : 按下数字后再按空格键,光标会向右移动这一行的 n个字符。例如 20<space> 则光标会向后面移动 20 个字符距离
0 或功能键[Home]:移动到这一行的最前面字符处
$ 或功能键[End]:移动到这一行的最后面字符处
G:移动到这个文档的最后一行(常用)
nG:移动到这个文档的第 n 行。例如 20G 则会移动到这个文档的第 20 行(可配合 :set nu)
gg:移动到这个文档的第一行,相当于 1G
n<Enter>:光标向下移动 n 行(常用)

搜索替换

/word:向光标之下寻找一个名称为 word 的字符串。例如要在文档内查找vbird 这个字符串,就输入 /vbird 即可
?word:向光标之上寻找一个字符串名称为 word 的字符串
n:代表重复前一个搜寻的动作
N:与 n 刚好相反,为『反向』进行前一个搜寻动作。例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird
:n1,n2s/word1/word2/g:在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为word2 。例如『:100,200s/vbird/VBIRD/g』

删除、复制与贴上

x, X:在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键),X 为向前删除一个字符(相当于 [backspace] 亦即是退格键)
nx:连续向后删除 n 个字符
dd:删除游标所在的那一整行,
ndd:删除光标所在的向下 n 行
d1G:删除光标所在到第一行的所有数据
dG:删除光标所在到最后一行的所有数据
d$:删除游标所在处,到该行的最后一个字符
d0:删除游标所在处,到该行的最前面一个字符
yy:复制游标所在的那一行
nyy:复制光标所在的向下 n 行,例如 20yy 则是复制 20行
y1G:复制游标所在行到第一行的所有数据
yG:复制游标所在行到最后一行的所有数据
y0:复制光标所在的那个字符到该行行首的所有数据
y$:复制光标所在的那个字符到该行行尾的所有数据
p, P:p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行
c:重复删除多个数据,例如向下删除 10 行,[ 10cj ]
u:撤销上一步操作
[Ctrl]+r:恢复上一步被撤销的操作
.:这就是小数点!意思是重复前一个动作

vim输入模式

在命令模式中,只要按下 i, a,o,r 等字符就可以进入输入模式。
在输入模式中,在 vim 画面的左下角处会出现『–INSERT–』或『–REPLACE–』的字样。这个时候,键盘上除了[Esc]这个按键之外,其他的按键都可以视作为一般的输入按钮了,所以你可以进行任何的编辑。
按[Esc]退出编辑模式,回到命令模式中。

i, I 进入输入模式(Insert mode)

i 为从目前光标所在处输入
I 为在目前所在行的第一个非空格符处开始输入

a, A 进入输入模式(Insert mode)

a为从目前光标所在的下一个字符处开始输入
A为从光标所在行的最后一个字符处开始输入

o, O 进入输入模式(Insert mode)

o 为在目前光标所在的下一行处输入新的一行
O 为在目前光标所在处的上一行输入新的一行

r, R 进入取代模式(Replace mode)

r 只会取代光标所在的那一个字符一次
R 会一直取代光标所在的文字,直到按下ESC 为止

vim底线命令模式

在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令比较多。
在底线命令模式中,基本的命令有:

:q 退出程序
:q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存文档
:w 保存文件
:w! 若文件为只读时,强制写入文档
:wq 储存后离开
:wq! 则为强制储存后离开
:w [filename] 将编辑的数据储存成另一个文档
:r [filename]在编辑的数据中,读入另一个文档的数据。亦即将 filename这个文档内容加到游标所在行后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成filename文档
:! command 离开vim到指令行下执行 command 的显示结果。例如『:! ls /home』即可在vim当中查看 /home 底下以 ls 输出的文档信息

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

vim 环境的变更

:set nu 显示行号,设定之后,会在每一行的前缀显示该行的行号
:set nonu 与set nu相反,为取消行号

参考资料:https://www.runoob.com/linux/linux-vim.html

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

Linux vim编辑器使用指南 的相关文章

  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new

随机推荐

  • OpenStack--创建虚拟机

    启动虚拟机之前需要先做一些前期准备 比如网络和 IP 地址分配 虚拟机 类型创建等等 具体如下 1 网络规划及 IP 划分 官网安装文档 https docs openstack org ocata zh CN install guide
  • 今天我们来聊一聊孟德尔随机化

    欢迎关注 生信修炼手册 在传统的实验设计中 由于种种混杂因素的存在 我们仅仅能够分析变量之间的关联性 最典型的比如GWAS 对于显著的位点 只能够说明这些位点和性状之间存在关联 对于了解事情发生的原因和规律而言 关联性是不够的 我们需要的是
  • 【Excel】工作中会用到的excel操作和技巧

    最近入职培训 接受了一些企业文化的洗脑课 不过也有一些是很有实际应用的课程 比如excel操作和技巧 现将自己觉着很有用的地方总结如下 1 基础性操作与技巧 说在前面 一个好的工作表格 需要主要以下几点 首行首列要留白 外边框要加粗 字体字
  • php企业微信通讯录同步设置接收事件服务器

    第一步登陆企业微信pc端管理后台设置好信息 先不要点击保存 会提示失败 随后根据填写的URL编写接口 接口代码如下 就是第一步图中的token token xxx 就是第一步图中的EncodingAESKey encodingAESKey
  • msys2下gtk或qt程序的打包

    1 编译x64的程序 从win10的开始菜单中打开MSYS2 MinGW x64命令行 使用cd命令切换到二进制程序exe所在目录 2 执行如下命令 最后一个参数是当前文件存放dll 可以自定义一个新的文件夹 拷贝起来方便 ldd exe
  • 使用Visual Studio 2019和IntelliJ IDEA 2018实现JAVA调用本地代码

    使用Visual Studio 2019和IntelliJ IDEA 2018实现JAVA调用本地代码 1 我们使用的工具是 IntelliJ IDEA 2018 编写java代码 和VisualStudio 2019 编写Native方法
  • 关于“system”: 找不到标识符 的问题

    关于 system 找不到标识符问题和 包括 排除 设置禁用了加载功能的问题 这个问题主要是使用system pause 时造成的 可以删除或者注释这个语句试试 解决办法 1 添加头文件stdlib h 2 添加iostream h 另外
  • ld_preload

    gdb调试包含共享库代码的程序 shell export LD PRELOAD 相信有不少的同志调试过包含共享库代码的程序 这个时候最为头疼的就是不能进行单步跟踪 当然是在你不知道如何解决的情况下 本文根据一个实例来讲述如何来解决这个问题
  • C++Primer(第五版 )第十三章 拷贝控制 章节编程练习答案

    13 1 拷贝构造函数是什么 什么时候使用它 答 如果一个构造函数的第一个参数是自身类类型的引用 且任何额外参数都有默认值 则此构造函数是拷贝构造函数 当使用拷贝初始化时 我们会用到拷贝构造函数 13 2 解释为什么下面的声明是非法的 答
  • JS字符串转换为JSON的四种方法

    JS字符串转换为JSON的四种方法 1 jQuery插件支持的转换方式 示例 parseJSON jsonstr jQuery parseJSON jsonstr 可以将json字符串转换成json对象 2 浏览器支持的转换方式 Firef
  • 批量获取文件的摘要(md5、sha1、sha256)

    批量获取文件的摘要 md5 sha1 sha256 0x01 功能 0x02源码 0x03运行 0x01 功能 刚刚写了一个小工具 用于批量获取文件的摘要 md5 sha1 sha256 具体用法 gt gt gt gt python3 g
  • 文件服务器中按用户查询文件夹权限,服务器文件夹权限设置

    服务器文件夹权限设置 内容精选 换一换 该任务指导用户使用Loader将数据从SFTP服务器导入到HBase 创建或获取该任务中创建Loader作业的业务用户和密码 确保用户已授权访问作业执行时操作的HBase表或phoenix表 获取SF
  • PO模式+数据驱动(TPshop网站的登录模块进行单元测试以及区分正向逆向用例)

    一 区分正向逆向用例 思路 在测试数据中添加一一个标识正向用例或逆向用例的标记 如 True False 步骤 调用登录方法 此登录方法中 只有输入用户名 输入密码 输入验证码 点击登录按钮 判断用例标记 判断安全退出是否存在 点击安全退出
  • 玩转 gpgpu sim 01记 —— try it

    1 短介绍 gpgpu sim 是一个gpu模拟器 可以让cuda openCL程序运行在一个软件模拟器上 而不需要硬件GPU 2 目标 用最简单省事的方式跑通一个gpgpu sim的仿真 3 gpgpu sim 一点项目特性 开发比较早
  • Java switch case 语句

    Java 的 switch case 语句是一种常用的控制流语句 用于基于不同的输入值执行不同的操作 本文将详细介绍 Java switch case 语句的作用 用法以及在实际工作中的应用 一 switch case 语句的作用 swit
  • QT 定时器使用事项

    情景 有一种特殊情况 一旦窗口系统事件队列中的所有事件都已经被处理完 一个定时为0的QTimer就会到时间了 这也可以用来当提供迅速的用户界面时来做比较繁重的工作 优点 QT app启动后不做任何操作 程序CPU占比已经达到90 以上 缺点
  • vue cli3 vue.config.js 配置详情

    module exports 基本路径 baseUrl process env NODE ENV production 输出文件目录 outputDir dist 默认dist 用于嵌套生成的静态资产 js css img fonts 目录
  • APK加壳原理简述

    先把核心原理记录一下 代码随后再补 PRE dex文件结构知识和加壳原理 先看下dex文件的基本结构 对于加壳主要关注3个关键字 1 checksum 文件校验码 使用alder32算法 校验文件除了maigc和checksum外余下的所有
  • 机器人编程和python的区别_机器人编程和少儿编程的区别

    随着少儿编程的大火 很多家长看懂了人工智能的未来趋势 都开始咨询少儿编程 除了少儿编程还有机器人编程 那么会有家长纠结 学哪个课程对孩子的教育发展和未来更好 那么要解决这个问题 就必须弄明白机器人和少儿编程的区别 机器人编程 在编程的基础上
  • Linux vim编辑器使用指南

    vim编辑器介绍 Vim是从vi发展出来的一个文本编辑器 代码补完 编译及错误跳转等方便编程的功能特别丰富 在程序员中被广泛使用 Vim 具有程序编辑的能力 可以主动以字体颜色辨别语法的正确性 方便程序设计 基本上 vim 共分为三种模式