vim 常见操作

news2024/11/22 22:36:13

Vim 工作模式

1、vim 三种基本的工作模式

vim有三种基本的工作模式,分别为:命令模式、末行模式、编辑模式。关于这三种工作模式的介绍,请见下文。

1.1、命令模式

使用vim打开文件之后,首先进入命令模式,它是vim编辑器的入口模式。在命令模式下,通过使用命令对文件进行常规的编辑操作,例如:复制、粘贴、删除、定位、翻页等等。

1.2、末行模式

末行模式是vim编辑器的出口,要退出vim,必须要在末行模式下。在末行模式下,执行退出文件、保存并退出文件等操作。

1.3、编辑模式

正常的编辑文字模式。

2、三种模式的切换操作

(1)vim打开一个文件进入的就是命令模式,另外两种模式需要回到命令模式才能进入彼此。

(2)在命令模式中按下i,I,o,O,a,A,r,R任何一个字母后进入编辑模式,进入编辑模式后,下方会出现INSERT或者REPLACE字样,按Esc键退出编辑模式,回到命令模式。

(3)在命令模式中按下:,/,?中任意一个即可进入末行模式,末行模式可以对文档或者vim环境进行操作,例如查找、读取、存盘、替换、离开、显示行号等。

3、三种模式的切换示意图

在这里插入图片描述
如上图所示,我们只要能灵活运用三个键:推出键esc、冒号键:、字母键i,就可以从容地在vim的三种模式中自由切换。

Vim 保存和退出命令

1、Vim 保存命令

1.1、:w命令,普通保存

英文全称是:write。这个命令的作用是把内存缓冲区中的数据写到启动vim时指定的文件中。注意,此命令保存编辑后的文件内容,但不退出vim编辑器。

1.2、:w!命令,强制保存

强制保存命令。如果原有文件的访问权限不允许写入文件,例如原有的文件为只读文件,则可使用这个命令强制写入。

2、Vim 保存并退出命令

2.1、:wq命令,保存并退出

英文全称是:write & quit。这个命令的作用是把内存缓冲区中的数据写到启动vim时指定的文件中,然后退出vim编辑器。

备注:另外一种替代的方法是用ZZ命令。ZZ常用于描述睡觉的呼噜声,指人睡着了。用在vim中,也很形象贴切,退出vim编辑器让文件“睡觉”,不再打扰它。

2.2、:wq!命令,强制保存并退出

强制保存文件内容后退出vim编辑器。这个命令的作用是把内存缓冲区中的数据强制写到启动vim时指定的文件中,然后退出vim编辑器。

3、Vim 退出命令

3.1、:q命令

在未做任何编辑处理而准备退出vim时,可以使用此命令。如果已做过编辑处理,则vim不允许用户使用“:q”命令退出,同时还会输出下列警告信息:No write since last change (:quit! overrides)

3.2、:q!命令

强制退出vim编辑器,放弃编辑处理的结果。如果确实不需要保存修改后的文件内容,可输入“:q!”命令,强行退出vim编辑器。

Vim 翻页命令

提示:vim 翻页命令需要处于命令行模式。vim
三种模式的切换很简单,我们只要能灵活运用三个键:推出键esc、冒号键:、字母键i,就可以从容地在vim的三种模式中自由切换。更多介绍可以参考:《Vim
工作模式》

当我们使用vim编辑器查看脚本时,按上下键查看文档内容,这种工作方式效率很低。尤其是遇到突发情况,掌握vim的翻页快捷键十分有利于工作的开展。vim的翻页快捷键命令如下所示:

1、翻整页命令

Ctrl + f 键 (f 的英文全拼为:forward)
Ctrl + b 键 (b 的英文全拼为:backward)

2、翻半页命令

Ctrl + d 键 (d 的英文全拼为:down)
Ctrl + u 键 (u 的英文全拼为:up)

3、定位到页眉和页脚

直接查看该脚本的第一行,请输入:0,然后回车即可;直接查看该脚本的最后一行,请输入:$,然后回车即可。

这里是引用

备注:$ 常用于表示结尾的含义。

Vim 查找与替换

vim有强大的字符串查找功能。我们通常在vim下要查找字符串的时候,都是输入/或者?加上需要查找的字符串来进行搜索,比如,想搜索user这个单词,可以输入 :/user 或者 ?/user,两者的区别是前者是从上往下搜索,后者是从下往上搜索。

1、vim 查找字符串命令

1.1、从开头查找

在命令模式下,输入 😕 + 你要查找的字符,按下回车,可以看到vim把光标移动到该字符串处。

1.2、从结尾处查找

在命令模式下,输入 :? + 你要查找的字符,按下回车,就能搜索到字符串或字符。

备注:值得注意的是“/”是向下查找,而“?”是向上查找,而在键盘定义上“?”刚好是“/”的上档符。

1.3、上下匹配

默认情况下,搜索会定位到一个离当前光标最近的一个匹配结果。如果我们想要转到下一个/上一个搜索结果,请使用以下按键:

n – 寻找下一个匹配结果

N – 寻找上一个匹配结果

1.4、关闭高亮

搜索后,我们打开别的文件,发现也被高亮了,怎么关闭高亮?

命令模式下,输入:nohlsearch,当然,也可以简写为:noh。

2、vim 字符串替换

查找和替换是任意一款文本编辑器的一组常见和必备功能。Vim 使用以下命令结构实现替换功能。

替换
😒/old/new - 用new替换当前行第一个old。
😒/old/new/g - 用new替换当前行所有的old。
:n1,n2s/old/new/g - 用new替换文件n1行到n2行所有的old。
:%s/old/new/g - 用new替换文件中所有的old。
:%s/^/xxx/g - 在每一行的行首插入xxx,^表示行首。
:%s//xxx/g−在每一行的行尾插入xxx,/xxx/g−在每一行的行尾插入xxx,表示行尾。
所有替换命令末尾加上c,每个替换都将需要用户确认。 如:%s/old/new/gc,加上i则忽略大小写(ignore)。

g:全局替换
gc:在每次更换之前要求确认
gn:忽略替换功能并突出显示查找结果。

Vim 保存文件

1、vim保存文件并设置文件名

我们有时候会直接输入vim命令进入编辑模式,当编辑完文件后,保存时会提示:E32: No file name

原因就是我们进入时没有输入文件名,退出时就报错了。如何保存未命名vim的文件呢?请看下面的介绍:

第一步:输入完成后按下esc退出输入模式

第二步:从输入模式切换到末行模式,即输入:w + 文件路径及文件名称,然后回车。例如::w test.txt

提醒:vim不会自动建立不存在的文件夹,需要我们手动建立。

2、vim设置默认路径

如上所示,输入 :w test.txt 之后,默认保存在当前的目录,可以设置保存到已定义的路径。

需要在_vimrc文件中添加:

exec "cd " . fnameescape("/usr/tom/")

/usr/tom/换成自己所需的路径,这样在vim中新建文件后直接用命令 :w + 文件名 就可以自动保存到已定义的路径。

Vim文件删除与清空

dd 命令

1.单行删除

在命令模式下
dd命令可以快捷删除光标所在行,
d+上下方向键,删除光标所在行和上下一行 ,
d+左右方向键 ,删除光标左右一个字符

2.文件多行删除

d命令是Vim中非常常用的命令,它可以删除行、删除字符、剪切等。当我们需要清空一个文件的内容时,可以使用dd命令来实现。

多行删除

:1,3d

删除1至3行 内容

删除当前行之前的所有行

:1,.-1d

删除当前行之后的所有行

:.+1,$d

删除当前行之后的所有行

:.+1,$d

删除包含text关键字的行,中/reg/ 是正则表达式

:g/text/d

删除以#开的的注释内容。

:g/^#/d

3.文件内容删除

实现文件内容的清空
1,$d

:1,$d

以上命令的含义是:将1行到最后一行的内容全部删除,即清空整个文件的内容。在Vim中, 表示最后一行的位置。 ∗ ∗ 或者 1 , 表示最后一行的位置。 **或者1, 表示最后一行的位置。或者1,dG**

:1,$dG

dG命令的含义是:删除光标所在行到最后一行的内容,通过将光标移动到第一行来达到清空整个文件的效果。
或者%d

:%d

%表示文件中的所有行,%d删除所有航
或者命令行dG
按esc键后,先按gg(到达顶部),然后dG

文件操作撤销

在命令行模式下文件操作的撤销与恢复通过快捷键操作
u 撤销上一步的操作
Ctrl+r 恢复上一步被撤销的操作

文件内容的选择、粘贴、复制、剪切

文件粘贴复制

在命令行模式下
全部复制:按esc键后,先按gg,然后ggyG
全选高亮显示:按esc键后,先按gg,然后ggvG或者ggVG
粘贴:p,在光标后一个单词位置粘贴

单行复制:按esc键后, 然后yy
单行删除:按esc键后, 然后dd

文件剪切

d与y命令基本类似,所以两个命令用法一样,包括含有数字的用法.
d 剪切选定块到缓冲区;
dd 剪切整行
d^ 剪切至行首
d$ 剪切至行尾
dw 剪切一个word 单词
dG 剪切光标所在行至档尾

vim文件内容缩进

>命令是Vim中的缩进命令,可以用来对一行或多行的内容进行缩进。当对一个空文件使用>命令时,会清空文件内容并进入插入模式。

:>

以上命令的含义是:对当前行进行缩进

vimrc配置文件简介

1、.vimrc是什么?

.vimrc是vim的配置文件,vim编辑器相关的所有功能开关都可以通过.vimrc文件进行设置。

备注:文件名中的 “rc” 是出自 “run commands”。最初的源头是麻省理工学院在 1965 年发展的 CTSS
系统,其中有一个从档案中取出一系列命令来执行的功能,其被称为 run commands,这种档案又称为一个
runcom。现在多引申为配置文件之意。

2、.vimrc存放路径

.vimrc配置文件分系统配置和用户配置两种。系统.vimrc配置文件存放在vim的安装目录,默认路径为/usr/share/vim/.vimrc。用户.vimrc配置文件存放在用户主目录下~/.vimrc。

注意:用户配置文件优先于系统配置文件,vim启动时会优先读取当前用户根目录下的.vimrc文件。所以与个人用户相关的个性化配置一般都放在~/.vimrc中。

在系统命令行下,执行 vim --version 命令可以查看当前 vim 所使用的配置文件的保存路径,如下图所示:
在这里插入图片描述
在上面,我们看到列出了几个 vimrc 文件,有一个系统的 vimrc 文件,还有用户的 vimrc 文件,还有2nd user vimrc file。另外,出于和vi兼容的目的,vim也支持vi的exrc配置文件。

vim 启动时,会先尝试执行系统的 vimrc 文件,然后将按照上述顺序查找用户 vimrc,并使用所找到的第一个用户 vimrc 中的配置,忽略其余的用户 vimrc。

如果使用 vim -u filename 命令来启动 vim,则会用你指定的 filename 作为 vim 的配置文件(在调试你的 vimrc 时有用);如果用 vim -u NONE 命令启动 vim,则不读取任何 vimrc 文件,当你怀疑你的 vimrc 配置有问题时,可以用这种方式跳过 vimrc 的执行。

3、.vimrc入门简介

默认情况下,vim编辑器里既不显示行号,也没有语法高亮度、智能缩进。为了方便使用,基本的vim配置选项一般都会包括:

显示行号

set number

突出显示当前列

set cursorcolumn

显示括号匹配

set showmatch

设置缩进,设置Tab长度为4空格

set tabstop=4

设置注释
在vimrc中,双引号开头的行,将被当作注释忽略。

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

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

相关文章

面试之快速学习STL-常用算法

1. 排序算法 sort() 函数是基于快速排序实现的,故不保证相对位置,但是stable_sort (first, last)保证,它基于归并排序。sort()只适用于支持随机迭代器的容器(array, vector, deque),好理解,毕竟…

Mysql 开窗函数(窗口函数)

文章目录 全部数据示例1(说明)开窗函数可以比groupby多查出条件列外的字段,开窗函数主要是为了跟聚合函数一起使用,达到分组统计效果,并且开窗函数的结果集基本都是跟总行数一样示例2示例3示例4错误示例1错误示例2错误…

基于vue的小说阅读网/基于springboot的小说网站/阅读网站的设计与实现

摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&a…

学习设计模式之享元模式,但是宝可梦

前言 作者在准备秋招中,学习设计模式,做点小笔记,用宝可梦为场景举例,有错误欢迎指出。 享元模式 1 介绍 享元模式很好理解,它主要是为了减少创建对象的数量,属于结构型设计模式 目的:减少…

【第三阶段】kotlin语言的内置函数run

1.run函数返回类型是根据匿名函数最后一行的类型变化而变化 run 函数里面持有的是this fun main() {val info"kotlin is ok"var r info.run {true}println(r) }执行结果 2.run搭配具名函数 package Stage3fun main() {val info"kotlin is ok"var r info…

IAR编译报错 ErrorLi005]: no definition for

IAR编译报错 ErrorLi005]: no definition for… 具体报错如下图所示: 错误原因:出现此问题是由于没有写 VehicleDriveStatusCheck 此功能函数,而程序中其他地方调用此函数而导致的错误 解决措施:编写 VehicleDriveStatusCheck …

docker的安装以及基本操作

一.认识docker Docker是一种用于构建、打包和运行应用程序的开源平台。它基于操作系统级虚拟化技术,可以将应用程序和其依赖的库、环境等资源打包到一个可移植的容器中,形成一个轻量级、独立的可执行单元。 开发者在本地编译测试通过的容器可以批量地在…

Win 7 修改开机密码,使用F8修复提前终止导致蓝屏

前言 一台win7一体机密码突然不对,也不知道怎么回事就登录不了 使用PE中的NTPWEdit查看修改密码,没有用户列表 步骤 正常启动或者按F8,选择修复 正常电脑如下显示 这种可以直接使用PE改密码,就不放图了 问题电脑如下显示…

kafka--技术文档--基本docker中安装<单机>-linux

安装zookeeper 阿丹小科普: Kafka在0.11.0.0版本之后不再依赖Zookeeper,而是使用基于Raft协议的Kafka自身的仲裁机制来替代Zookeeper。具体来说,Kafka 2.8.0版本是第一个不需要Zookeeper就可以运行Kafka的版本,这被称为Kafka Raf…

C#详解-Contains、StartsWith、EndsWith、Indexof、lastdexof

目录 简介: 过程: 举例1.1 举例1.2 ​ 总结: 简介: 在C#中Contains、StarsWith和EndWith、IndexOf都是字符串函数。 1.Contains函数用于判断一个字符串是否包含指定的子字符串,返回一个布尔值(True或False)。 2.StartsWith函数用于判断一…

Vue Element upload组件和Iview upload 组件上传文件

今天要分享的是使用这俩个UI组件库的upload组件分别实现调用组件本身的上传方法实现和后台交互。接下来就是开车的时间&#xff0c;请坐稳扶好~ 一、element upload组件传送门 1、html文件 <el-upload ref"uploadRef" :action"uploadUrl" :data"…

第五讲:常见的BeanPostProcessor

常见的BeanPostProcessor 一、入门Demo二、添加BeanPostProcessor1. AutowiredAnnotationBeanPostProcessor2. CommonAnnotationBeanPostProcessor3. ConfigurationPropertiesBindingPostProcessor 前文我们简单讲了Bean的生命周期&#xff0c;以及生命周期的前后&#xff0c;本…

科大讯飞AI大模型,太猛了!

最近几个月&#xff0c;以ChatGPT为代表的AIGC迅速崛起&#xff0c;国内头部科技企业之间也掀起了百模大战&#xff0c;在众多的大模型当中我比较看好的一家就是&#xff1a;科大讯飞。 我很早就通过科大讯飞老朋友&#xff0c;拿到了体验账号&#xff0c;简单体验了一下&…

C++新经典06-- 语言特性

1.继承性、多态性、封装性。 2.C本身是属于编译型语言。 什么叫编译型语言呢&#xff1f;程序在执行之前需要一个专门的编译过程&#xff0c;把程序编译成二进制文件&#xff08;可执行文件&#xff09;&#xff0c;执行的时候&#xff0c;不需要重新翻译&#xff0c;直接使用…

shell脚本中linux命令的特殊用法记录

shell脚本中linux命令的特殊用法记录 1、linux命令特殊参数选项1.1、sed -e1.2、echo -e 2、 shell 扩展2.1、[[ ]]支持用~进行正则匹配 3、特殊命令用法3.1、{} 变量替换 1、linux命令特殊参数选项 1.1、sed -e sed -e以严格模式执行脚本&#xff0c;在sed -e 后面的所有命令…

反转链表II

江湖一笑浪滔滔&#xff0c;红尘尽忘了 题目 示例 思路 链表这部分的题&#xff0c;不少都离不开单链表的反转&#xff0c;参考&#xff1a;反转一个单链表 这道题加上哨兵位的话会简单很多&#xff0c;如果不加的话&#xff0c;还需要分情况一下&#xff0c;像是从头节点开始…

【Apollo学习笔记】——规划模块TASK之PATH_BORROW_DECIDER

文章目录 前言PATH_BORROW_DECIDER功能简介PATH_BORROW_DECIDER相关配置PATH_BORROW_DECIDER总体流程PATH_BORROW_DECIDER相关子函数IsNecessaryToBorrowLaneIsBlockingObstacleFarFromIntersectionIsNonmovableObstacleCheckLaneBorrow 参考 前言 在Apollo星火计划学习笔记—…

MySql014——分组的GROUP BY子句和排序ORDER BYSELECT子句顺序

前提&#xff1a;使用《MySql006——检索数据&#xff1a;基础select语句》中创建的products表 一、GROUP BY子句基础用法 SELECT vend_id, COUNT(*) AS num_prods FROMstudy.products GROUP BY vend_id;上面的SELECT语句指定了两个列&#xff0c;vend_id包含产品供应商的ID&…

Protobuf 语法详解

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

mybatisplus批量写入

1.新建MybatisPlusConfig /*** MybatisPlusConfig.*/ Configuration MapperScan("com.test.mapper") public class MybatisPlusConfig {/*** 自定义批量插入 SQL 注入器.*/Beanpublic InsertBatchSqlInjector insertBatchSqlInjector() {return new InsertBatchSqlI…