【Linux精讲系列】——vim详解

作者主页

📚lovewold少个r博客主页

   ⚠️本文重点c++入门第一个程序和基本知识讲解

👉【C-C++入门系列专栏】博客文章专栏传送门

😄每日一言:宁静是一片强大而治愈的神奇海洋!

目录

目录

​作者主页

目录

前言

Linux编辑器vim的使用

vim的基本概念

vim的基本操作

进入vim编辑器

回到命令模式

进入插入模式

切换到末行模式

vim的正常模式命令集

vim正常模式命令集

插入模式

移动光标

删除文字

复制

替换

撤销上一次操作

更改

跳至到指定的行

vim末行模式命令集

vim的分屏模式

vim的额外配置

简单配置

vim for cpp 

支持环境

安装配置

卸载方法

命令模式 

总结


前言

首先我们要知道vim是什么?

        vi(Visual Editor)是由美国程序员比尔·乌尔曼(Bill Joy)于1976年开发的,最初是为了在Unix系统上进行文本编辑而创建的。它是一款基于模式编辑的文本编辑器,以其高效的键盘快捷键而闻名,可在终端环境下使用。vi 成为Unix系统中的标准文本编辑器,并且在大多数Unix和Linux系统上内置。

        vim(Vi IMproved):vim 由布莱姆·米特尔斯(Bram Moolenaar)于1991年开发,旨在改进 vi 的功能,并为用户提供更多的功能。vim 添加了许多新特性,如多级撤销、语法高亮、自动缩进、宏录制、拼写检查、插件支持等。vim 还提供了更多的定制选项,使用户能够根据自己的需求进行配置。vim 成为了 vi 的一个增强版本,但也保留了 vi 的基本编辑功能和键盘快捷键。

        vi 是老式的字处理器,功能齐全。而 vim 则可以说是基于vi上的程序开发者的一项很好用的工具。 连 vim 的官方网站 自己也说 vim 是一个程序开发工具而不是文字处理软件。当然了我们这里主要以vim作为讲解。

Linux编辑器vim的使用

vim的基本概念

vim常使用有三种模式:命令模式(Command mode),输入模式(Insert mode)、底线命令模式(Last line mode)

正常/普通/命令模式:

这种模式下主要是控制光标的移动,字符、字或行的删除,移动复制某区段的以及进入各种模式下的命令操作。

插入模式(insert mode)

在命令模式下按 i 进入插入模式。插入模式主要是对文本的修改操作,只有在插入模式(insert mode)下才能对文本进行插入操作。通过按【Esc】可以回到命令行模式。

末行模式:

在命令模式下按 shift + : 进入末行模式该模式主要是对文件的保存退出操作以及完成文本的一些功能性任务,比如查找字符串,列出行号等操作。

这些模式是最常用也是使用vim最频繁的三种模式,当然vim还具备很多模式我们不做过多讲解。

vim的强大在于他支持多模式的操作,我们不用去了解每一种模式,目前学习linux的vim主要核心还是抓住以上三个模式。

vim的基本操作

进入vim编辑器

vim 文件名

        vim+文件名默认进入命令模式即正常模式。打开所在目录下文件存在即会打开原有存在文件,打开不存在文件即会新建此文件名的文件。

回到命令模式

在任何模式下无脑Esc即可回到命令模式。

进入插入模式

在【命令模式】切换进入【插入模式】一般有三种方式可以进入

i, I进入输入模式(Insert mode):
i 为【从目前光标所在处输入】, I 为【在目前所在行的第一个非空格符处开始输入】。 
a, A进入输入模式(Insert mode):
a 为【从目前光标所在的下一个字符处开始输入】, A 为【从光标所在行的最后一个字符处开始输入】。
o, O进入输入模式(Insert mode):
这是英文字母 o 的大小写。o 为【在目前光标所在的下一行处输入新的一行】; O 为在目前光标所在处的上一行输入新的一行!

切换到末行模式

shift+:进入末行模式。在末行模式下可以实现对文件的保存退出,查找等操作。常用以下操作对文件的保存和写入退出。

:w保存当前文件
:wq保存并且退出vim
:q!不保存强制退出vim

        以上操作就可以基本上把vim用起来了,实现基本的文件编写保存,退出等操作。然而我们要知道的是,vim主要是以键盘的方式操作,也就意味着键盘能做到很多功能操作而不需要鼠标。事实上vim的出现比鼠标诞生更加早,那么我们现在能用鼠标实现对光标的移动,文本的选取,以及查询等功能按键的点击操作。而我们知道其实很多操作都是有快捷键的,从而实现用键盘对文本编辑的快速操作。我们接下来主要学习对vim的功能操作。

vim的正常模式命令集

vim正常模式命令集

插入模式

Vim 的插入模式是用来输入文本的模式,可以通过以下命令从正常模式切换到插入模式且完成一些操作:

  • i :在光标当前位置开始输入文本。

  • I :在当前行的行首开始输入文本。

  • a :在光标下一个位置开始输入文本。

  • A :在当前行的行尾开始输入文本。

  • o :在当前行的下方插入一个新行,并开始输入文本。

  • O :在当前行的上方插入一个新行,并开始输入文本。

  • s :删除当前光标所在处的字符,并开始输入文本。

  • S :删除当前行,并开始输入文本。

  • c :删除指定范围的文本,并开始输入文本。需要和动作命令配合,例如 cw 删除一个单词,c$ 删除到行尾,c3w 删除三个单词等。

在插入模式下,按 Esc 键可以返回正常模式。

移动光标

        要知道的是在vim中,我们还保留了一些历史的印记。老式的键盘上没有上下左右的方向键,在之前要完成对光标的操作是集成在键盘h,j,k,l中。分别控制光标左下上右移动一格,当然我们也可以用我们的方向键操作。

        这是vi的创作人使用的键盘布局,当时对于上下左右键并没有完全的标准,甚至很多键盘并不存在上下左右键,vi便设计了这种操作方式。这样的操作方式逐步遗留到vim以过渡前期使用vi的人。同时我们使用hjkl也能有一定的优势,我们的双手可以一直停留在主键盘上,而不需要单独切换到右手端的方向键,对于习惯了使用hjkl键位作为方向键的人在光标操作也会更加快捷。

  • 行内移动
    • 左移一个字符:h
    • 右移一个字符:l
    • 移动到下一个单词的开头:w
    • 移动到上一个单词的开头:b
    • 移动到当前单词的结尾:e
    • 移动到行首:0
    • 移动到行尾:$
  • 跨行移动
    • 下移一行:j
    • 上移一行:k
    • 移动到文件末尾:G
    • 移动到文件开头:gg
    • 移动到第n行:nG
    • 移动到屏幕顶部:H
    • 移动到屏幕中间:M
    • 移动到屏幕底部:L
    • 向前翻页:Ctrl+f
    • 向后翻页:Ctrl+b
    • 向前翻半页:Ctrl+u
    • 向后翻半页:Ctrl+d
  • 查找移动
    • 查找word并移动到第一个匹配处:/word
    • 移动到下一个匹配处:n
    • 移动到上一个匹配处:N
    • 查找光标所在单词并移动到第一个匹配处:*
    • 查找光标所在单词并移动到上一个匹配处:#
    • 查找匹配的括号并移动到对应位置:%

删除文字

  • 删除文字
    • 每按一次删除光标所在位置的一个字符:x
    • 指定删除所在位置后面(包括自己在内的)#个字符 : #x
    • 大写的X,每按一次可以删除光标所在位置前面的一个字符:X
    • #X表示删除光标所在的位置前面的#个字符:#X
    • 删除光标所在行:dd
    • 从光标所在位置,向后面删除#行:#dd

复制

  • 将光标所在之处到字尾的字符复制到缓冲区:yw
  • 复制#个字符到缓冲区:#yw
  • 复制光标所在行到缓冲区:yy
  • 拷贝从光标所在行往下数#行文字:#yy
  • 粘贴缓冲区内容到光标所在行:p

替换

  • 替换光标所在位置的字符:r
  • 替换光标所在之处的字符,知道按下ESC键停止:R

撤销上一次操作

  • 如果您误执行一个命令,可以马上按下u撤销上一个操作,多次按u可以多次撤销:u
  • 撤销的恢复,对于错误撤销可以执行对撤销操作的撤销:crtl+r

更改

  • 更改光标所在处的字到字尾处:cw
  • 表示可以更改光标所在位往后的#个字符:c#w

跳至到指定的行

  • 列举处光标所在行的行号:crtl+g
  • 移动光标至文章的第#行的行首:#G

vim末行模式命令集

首先在命令模式下shift+:进入末行模式。

  • 保存文件:w
  • 退出 Vim 编辑器:q
  • 保存文件并退出 Vim 编辑器:wq
  • 强制退出 Vim 编辑器,不保存修改:q!
  • 显示行号:set nu
  • 隐藏行号:set nonu
  • 向下搜索 word 这个字符串:/word
  • 向上搜索 word 这个字符串:?word
  • 重复上一次的搜索 :n
  • 替换当前行第一个 old 为 new :s/old/new
  • 替换当前行所有的 old 为 new :s/old/new/g
  • 替换整个文件中所有的 old 为 new :%s/old/new/g

vim的分屏模式

分屏命令

sp:水平分屏

vsp:垂直分屏

ctrl+ww:多屏之间切换

qall:退出所有屏,以此内推有:wall、wqall

vim -o aa.txt bb.txt:进入的时候就进行分屏(o水平;O垂直)

vim的额外配置

        我们确实知道了用键盘就可以实现对文本的各种操作,但是使用起来还是不舒服,相比于vs还有很多编辑器来说,他的使用相当麻烦。无法自动缩进,自动补全,用起来得一个字一个字的打,这还不如用word,至少还有个括号匹配。所以这一小节我们就讲一讲如何实现自主配置vim,完成高级的编译环境搭建。

简单配置

        我们首先要理解的是如何更改配置文件。在目录/etc/下有一个名为virmrc的文件,这是系统公共的vim配置文件,对于所有用户都生效,而我们配置vim文件最好是在自己的普通用户下建立配置文件。

        在每一个用户的主目录底下,都可以创建自己私有的配置文件,命名为".vimrc"。通常情况下会存在一个这样的文件,如果没有自行配置即可。

首先进入用户主目录,用vim打开".vimrc"文件

        在这个文件下我们可以通过添加配置选项来配置vim运行环境。这里我们就不赘诉可以执行那些指令来改变操作环境,我们直接使用插件或者别人已经配置好的文件进行修改。

vim for cpp 

        这里我们学习使用一键化配置的方式。主要目标是帮助对vim配置方法不熟悉的新手封装的一键式vim环境安装包. 主要针对终端vim用户, 适合远程ssh连接Linux服务器进行开发的场景(例如使用阿里云服务器或者腾讯云服务器等)。

项目原地址:VimForCpp: 快速将vim打造成c++ IDE

支持环境

目前只支持 Centos7 x86_64.

安装配置

在 shell 中执行指令(想在哪个用户下让vim配置生效, 就在哪个用户下执行这个指令. 强烈 "不推荐" 直接在 root 下执行):

​
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

卸载方法

在安装了 VimForCpp 的用户下执行:

bash ~/.VimForCpp/uninstall.sh

命令模式 

        此项目主要对cpp环境进行适配,能实现代码高亮,代码补全自动缩进等操作。具体可以看项目操作文档。

总结

        本章主要讲解了vim的常见操作,vim编辑器强大且在linux开发环境下极为重要,掌握vim是学习linux系统中极为重要的一环。相信大家都能快速掌握。


    作者水平有限,如有错误欢迎指正!


    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

XML解析文档解析

1.首先是我的项目结构以及我所引入的依赖&#xff1a; 2.引入的依赖&#xff1a;jdk用的是17 <properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target> </properties> <dep…

【uniapp】通用列表封装组件

uniapp页面一般都会有像以下的列表页面&#xff0c;封装通用组件&#xff0c;提高开发效率&#xff1b; &#xff08;基于uView前端框架&#xff09; 首先&#xff0c;通过设计图来分析一下页面展示和数据结构定义 w-table组件参数说明 参数说明类型可选值默认值toggle列表是…

读者自荐的 4 个 GitHub 项目

本期推荐的 4 个开源项目&#xff0c;为读者在开源项目 Awesome-GitHub-Repo 的评论区自推的, 如果你开源了不错的项目&#xff0c;想让大家看到&#xff0c;也可以去 Awesome-GitHub-Repo 进行投稿。 本期推荐开源项目目录&#xff1a; 1. DB-GPT 2. 定制中国传统节日头像 3. …

零代码编程:用ChatGPT批量将Mp4视频转为Mp3音频

文件夹中有很多mp4视频文件&#xff0c;如何利用ChatGPT来全部转换为mp3音频呢&#xff1f; 在ChatGPT中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个批量将Mp4视频转为Mp3音频的任务&#xff0c;具体步骤如下&#xff1a; 打开文件夹&#xff1a;…

Vue el-table序号与复选框hover切换

效果图下&#xff1a; <template><div class"container"><el-tableref"multipleTable"id"multipleTable":data"person.tableData"cell-mouse-enter"cellEnter"cell-mouse-leave"cellLeave"selecti…

网页【CSS】滚动条

前言 优化后的滚动条会提亮我们的网站页面。 例如&#xff1a;CSS-TRICKS这个网站如果采用的是浏览器默认的滚动条&#xff0c;不进行优化&#xff0c;页面会显得很不搭。 所以该网站的滚动条样式优化如下&#xff1a; html::-webkit-scrollbar {width: 30px;height: 30px; …

Leetcode---370周赛

题目列表 2923. 找到冠军 I 2924. 找到冠军 II 2925. 在树上执行操作以后得到的最大分数 2926. 平衡子序列的最大和 一、找到冠军I 第一题模拟题&#xff0c;简单来说是看每一行(列)是否全是1&#xff0c;当然不包括自己比自己强的情况&#xff0c;需要特判 代码如下 …

支持C#的开源免费、新手友好的数据结构与算法入门教程 - Hello算法

前言 前段时间完成了C#经典十大排序算法&#xff08;完结&#xff09;然后有很多小伙伴问想要系统化的学习数据结构和算法&#xff0c;不知道该怎么入门&#xff0c;有无好的教程推荐的。今天给大家推荐一个支持C#的开源免费、新手友好的数据结构与算法入门教程&#xff1a;He…

STM32Cube +VSCode开发环境搭建

STM32Cube VSCode开发环境搭建 0.前言一、各种方式对比1.STM32CubeMX CLion2.STM32CubeIDE VSCode STM32 VSCode Extension3.VSCode EIDE插件 二、STM32CubeIDE VSCode STM32 VSCode Extension环境搭建1.需要安装的软件2.相关配置3.编译测试 三、总结 0.前言 工欲善其事&…

Qt QtCreator调试Qt源码配置

目录 前言1、编译debug版Qt2、QtCreator配置3、调试测试4、总结 前言 本篇主要介绍了在麒麟V10系统下&#xff0c;如何编译debug版qt&#xff0c;并通过配置QtCreator实现调试Qt源码的目的。通过调试源码&#xff0c;我们可以对Qt框架的运行机制进一步深入了解&#xff0c;同时…

HTML_案例1_注册页面

用纯html页面&#xff0c;不用css画一个注册页面。 最终效果如下&#xff1a; html页面代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>注册页面</title> </head>…

【Git】Git安装入门使用常用命令Gitee远程仓库上传文件与下载

一&#xff0c;Git入门 1.1 Git是什么 Git是一款分布式版本控制系统&#xff0c;被广泛用于软件开发中的源代码管理。它由Linus Torvalds在2005年创造并发布&#xff0c;旨在解决传统版本控制系统&#xff08;如SVN&#xff09;的一些局限性。主要用于敏捷高效地处理任何或小或…

【解决方案】vue 项目 npm run dev 时报错:‘cross-env‘ 不是内部或外部命令,也不是可运行的程序

报错 cross-env 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! estate1.0.0 dev: cross-env webpack-dev-server --inline --progress --config build/webpack.dev.conf.js npm ERR! Exit status 1 np…

Pytorch 里面torch.no_grad 和model.eval(), model.train() 的作用

torch.no_grad: 影响模型的自微分器&#xff0c;使得其停止工作&#xff1b;这样的话&#xff0c;数据计算的数据就会变快&#xff0c;内存占用也会变小&#xff0c;因为没有了反向梯度计算&#xff0c;当然&#xff0c;我哦们也无法做反向传播。 model.eval() 和model.train()…

Dockerfile搭建lnmp

目录 任务需求&#xff1a; 一、准备&#xff1a; 二、部署nginx容器&#xff08;172.18.0.10&#xff09;&#xff1a; 1.编写Dockerfile构建镜像&#xff1a; 2.准备nginx配置文件&#xff1a; 3.构建镜像&#xff0c;启动nginx容器&#xff1a; 三、部署mysql容器&#x…

Flutter学习:使用CustomPaint绘制路径

Flutter学习&#xff1a;认识CustomPaint组件和Paint对象 Flutter学习&#xff1a;使用CustomPaint绘制路径 Flutter学习&#xff1a;使用CustomPaint绘制图形 Flutter学习&#xff1a;使用CustomPaint绘制文字 Flutter学习&#xff1a;使用CustomPaint绘制图片 drawPath 绘制路…

矢量绘图软件Sketch 99 for mac

Sketch是一款为用户提供设计和创建数字界面的矢量编辑工具。它主要用于UI/UX设计师、产品经理和开发人员&#xff0c;帮助他们快速设计和原型各种应用程序和网站。 Sketch具有简洁直观的界面&#xff0c;以及丰富的功能集&#xff0c;使得用户可以轻松地创建、编辑和共享精美的…

C++ vector 动态数组的指定元素删除

文本旨在对 C 的容器 vector 进行肤浅的分析。 文章目录 Ⅰ、vector 的指定元素删除代码结果与分析 Ⅱ、vector 在新增元素后再删除指定元素代码结果与分析 Ⅲ、vector 在特定条件下新增元素代码结果与分析 参考文献 Ⅰ、vector 的指定元素删除 代码 #include <iostream&g…

Python语言:经典例题分析讲解

题1&#xff1a; 通过观察我们可以得出以下结论&#xff1a; 代码实现&#xff1a; """ &#xff08;3&#xff09;输入整数n&#xff0c;输出n行的字符图案。如n5时输出以下图案&#xff1a;* *** ***** ******* *********""""" for…

河南开放大学与电大搜题微信公众号:携手共进,助力学习之路

作为河南省内颇具影响力和声誉的高等教育机构之一&#xff0c;河南开放大学一直致力于提供优质的教育资源和灵活的学习方式&#xff0c;以满足广大学习者的需求。而在这个追求知识的时代&#xff0c;学习者们尤其需要一个便捷、高效的工具来辅助学习。电大搜题微信公众号应运而…