【Linux系统编程】编辑器vim

【Linux系统编程】编辑器vim

  • [1. vim的基本概念](#1. vim的基本概念)
  • [2. 三种模式如何互相切换](#2. 三种模式如何互相切换)
  • [3. vim基本操作与常用命令](#3. vim基本操作与常用命令)
  • [4. vim的简单配置](#4. vim的简单配置)

1. vim的基本概念

vim是一个多模式编辑器,其主要包含三种基本模式。

  1. 命令模式(Command Mode)
    当用户使用vim打开文件时,首先进入的就是命令模式。在此模式下,所敲的按键编译器都理解为命令,以命令驱动执行不同的功能。此模式下不能自由进行文本编辑,但可以执行复制、删除、粘贴等操作。
  2. 编辑模式(Insert Mode)
    编辑模式也称作插入模式,此模式下用户可以对文本内容进行自由编辑。进入次模式后,用户可以输入任何字符,这些字符都会被当作文本内容插入到文件中。
  3. 底行模式(Last Line Mode)
    以":"开始,通常用于文件的保存、退出等操作。在此模式下可以执行更复杂的命令,如查找替换、行跳转等。

2. 三种模式如何互相切换

首先我们通过vim打开文件的时候默认处于命令模式,下面介绍如何切换。

  • 命令模式 -> 编辑模式:按下 i 键(在光标前插入)。其他常用按键按包括a(在光标后插入)、o(在当前行下方新建一行并插入)。
  • 编辑模式 -> 命令模式:按下 Esc 键。
  • 命令模式 -> 底行模式:按下 Shift + ; ,也就是输入英文的冒号 : 。
  • 底行模式 -> 命令模式:按下 Esc 键。

注意:编辑模式和底行模式之间不能直接切换,必须通过命令模式作为"桥梁"进行中转。

3. vim基本操作与常用命令

通过上面三种模式的互相转换,我们已经可以在vim中编写C程序了,下面我们以该C程序为例,学习vim的基本操作和常用命令。

该代码是通过切换到编辑模式敲出来的。

1. set nu、set nonu 显式行号、不显示行号

先进入底行模式

set nonu 不再演示。

2. gg 将光标定位到文本开始

先进入命令模式

3. shift + g 讲光标定位到文本末端


4. n + shift + g / n + gg 将光标定位到第n行

3 shift g / 3 gg

5. shift + 4 将光标定位到该行末尾

6. shift + 6 将光标定位到该行开头

7. w 将光标按照单词向后进行行内或跨行移动,n + w 表示每次向后移动n个单词

8. b 将光标按照单词向前进行行内或跨行移动,n + w 表示每次向前移动n个单词

9. h、j、k、l 分别表示让光标向左、下、上、右移动,因为原来键盘上是没有上下左右键的,光标也可以通过上下左右移动,但是建议用h、j、k、l

这个就不再演示了。

10. yy 复制光标所在行,n + yy 表示从当前行开始要复制n行

这里我们让光标在第5行,n=1,进行复制,通过下一个粘贴指令去展示。

11. p 将复制的内容从光标所在行的下一行粘贴,n + p 表示要粘贴n次

这里我们让n=3,进行粘贴。

12. dd剪切,剪切光标所咋行,n + dd 表示从当前行开始要剪切n行

这里我们让n=3,进行剪切。

13. u 撤销前一次命令操作

14. ctrl + r 撤销之前撤销的命令操作

**15. shift + ` 就是Esc下面的那个字符,表示单个字符大小写转换,前面+n,就是从光标位置开始向后转换n个字符 **

这里n=1

16. n + r 将从光标位置开始向后n个字符全部替换成下一次输入的字符

这里n=3,输入c

17. shift + r 将模式从命令模式转换为替换模式,输入字符替换光标位置的字符,按Esc键可以回到命令模式

这里输入 abc

18. n + x 从光标所在位置开始向后删除n个字符,只会删除当前行

先回到命令模式

回到命令模式后,光标会自动向前走一格,所以会把c字符也删掉,这里n=20


19. ctrl + v 从命令模式进入到视图模式,可以解决多行注释和取消注释、多行写入等问题

多行注释

ctrl + v进入视图模式,然后通过h/j/k/l选中多行多列,按ctrl + i,然后插入注释符号//,再连按两次Esc即可注释多行,多行写入也是这个步骤,只不过是把//换成你要写的内容。

多行取消注释

ctrl + v进入视图模式,然后通过h/j/k/l选中多行多列,然后按d即可。

20. /要找的内容,在文本中查找并标记,输入n,跳转到下一个

21. vs 文件名 在底行模式可以多文件分屏操作,例如一个code.h头文件和一个code.c源文件,共同编写

ctrl + ww 可以让光标在多个文件中跳转,光标在哪一个文件就对哪一个文件进行操作

总结:

差不多就这些操作,但是还有一些操作我们没讲到,大家可以自行了解。

4. vim的简单配置

  1. 建议:不要在root用户中配置。
  2. 在当前用户的家目录下创建一个.vimrc的文件。
  3. 用vim打开.vimrc文件,在其中写入我们所需要的配置即可,写入完成进入底行模式wq保存退出即可。

配置指令直接用DeepSeek等去搜即可

这里我就随便写几个验证一下。

syntax on 开启语法高亮

set nu 显示绝对行号

set tabstop=4 设置 Tab 键在屏幕上显示的宽度为 4 个空格

set shiftwidth=4 设置自动缩进(如 >>)的宽度为 4 个空格

set cursorline 高亮显示当前行

set softtabstop=4 使得在按退格键时可以一次删除 4 个空格

我们能看到 高亮显示当前行 还是很明显的。

相关推荐
薛定谔的悦2 小时前
储能 EMS 的功率策略:从一块电表到一次逆流的 200 毫秒
大数据·linux·能源·储能·bms
新时代牛马6 小时前
Linux 内核入门地图:架构、源码目录与五大子系统
linux·运维·架构
Julien20046 小时前
控制 SELinux 文件上下文
linux·运维·服务器
sulikey6 小时前
Linux Core Dump 完全指南:从原理到实战的崩溃调试手册。什么是core dump?程序报错core dumped怎么办?
linux·服务器·操作系统·调试·coredump
MayZork9 小时前
Windows 与 Linux 下 vcpkg 的安装部署指南
linux·运维·windows
zbyyd9 小时前
Linux 进程间通信学习笔记
linux·笔记·学习
w2005122413 小时前
Pod管理
linux·服务器·云原生·容器·k8s·podman
chen<>14 小时前
C++ 六种 memory_order:从原子性到线程间可见性.md
java·linux·开发语言·c++
一直C14 小时前
Linux系统编程|进程间通信IPC全套详解(1)(管道、信号)
linux·c语言·开发语言·网络·青少年编程·visual studio code
库玛西14 小时前
Linux网络编程:HTTP/HTTPS协议核心技术全解析
linux·运维·服务器·网络·c++·http·https