Linux -- > vim

vi和vim是什么

vivim是两款流行的文本编辑器,广泛用于Unix和类Unix系统中。它们以其强大的功能和灵活的编辑能力而闻名,特别是在编程和系统管理中非常受欢迎。

vi(Visual Interface)

vi是最初的文本编辑器之一,由Bill Joy在1976年创建,是早期Unix系统的标准组件。vi的主要特点是它的模式编辑功能,有以下三种基本模式:

  • 命令模式:这是vi启动后的默认模式。在此模式下,你可以使用键盘快捷键执行复制、粘贴、定位光标、删除文本等操作。
  • 插入模式:在此模式下,可以输入文本。从命令模式按i(insert)可以进入插入模式。
  • 末行模式:通过在命令模式下按下冒号(:)进入,用于执行保存、退出、查找替换等命令。

vi由于其简洁和高效,长久以来一直是许多程序员和系统管理员的首选编辑器。

vim(Vi IMproved)

vim是从vi发展而来的一个版本,由Bram Moolenaar在1991年发布。vimvi的基础上增加了很多功能,包括但不限于:

  • 可视模式:允许用户选中文本块进行复制、删除等操作。
  • 语法高亮:对源代码等文件支持自动语法高亮。
  • 多窗口和标签页:可以在一个vim会话中打开多个文件。
  • 可扩展性:支持通过插件来扩展功能,有丰富的插件生态系统。
  • 撤销树:比传统的撤销更灵活,可以撤销历史中的任何一步操作。

vim的模式

Vim 的模式主要分为以下几种,每种模式都有其独特的用途和功能:

  1. 普通模式(Normal Mode)

    这是 Vim 启动后的默认模式。在这个模式下,你可以执行各种命令来操作文本,如移动光标、复制、粘贴、删除文本等。普通模式的每个按键都是一个命令,例如 h(左移光标)、j(下移光标)、k(上移光标)、l(右移光标)等。
  2. 插入模式(Insert Mode)

    在此模式下,可以直接输入文本。从普通模式按 i 进入插入模式,在文本中的当前光标位置开始输入。其他方式进入插入模式还包括 a(在光标后插入)、o(在当前行下方新开一行并插入)等。
  3. 可视模式(Visual Mode)

    用于选择文本块。从普通模式按 v 进入可视模式,然后可以移动光标来选择文本区域。选择的文本可以被复制、删除或者进行其他操作。此外,还有可视行模式(按 V 进入)和可视块模式(按 Ctrl-v 进入),分别用于选择整行或矩形文本块。
  4. 命令行模式(Command-line Mode)

    通过在普通模式下按下冒号 : 进入。在这个模式下,可以输入命令来执行更复杂的操作,如保存文件(:w)、关闭文件(:q)、搜索替换等。
  5. 替换模式(Replace Mode)

    从普通模式按 R 进入,可以替换光标之后的文本而不是插入新的文本。这类似于打字机的替换功能,原有的文本会被新输入的内容替换。

普通模式快捷键

光标移动

  • Shift + $:移动光标到当前行的最后位置。
  • Shift + ^:移动光标到当前行的第一个非空白字符。
  • Shift + G:移动光标到文本的最后一行。
  • N + Shift + G:移动光标到文本的第 N 行(N 是一个数字)。
  • GG:移动光标到文本的第一行。
  • h, j, k, l:分别向左、下、上、右移动光标。
  • w:向前跳到下一个单词的开始。
  • b:向后跳到前一个单词的开始。

文本编辑

  • yyY:复制当前行。
  • n + yy:复制从当前行开始的 n 行。
  • p:粘贴复制的文本。
  • u:撤销最近的编辑操作。
  • Ctrl + R:重做之前撤销的操作。
  • dd:删除(剪切)当前行。
  • n + dd:删除(剪切)从当前行开始的 n 行。
  • Shift + ~~:切换当前光标位置字符的大小写。
  • r:替换当前光标位置的字符。
  • n + r:替换当前光标位置开始的 n 个字符。
  • Shift + RR:进入替换模式,可以连续替换多个字符。
  • x:删除光标位置的字符。
  • N + x:从光标位置开始删除 N 个字符。
  • N + Shift + XN + X:从光标位置开始向前删除 N 个字符。
  • Shift + 3#:高亮显示文档中与当前单词相同的所有单词。
  • n:在查找结果之间跳转到下一个匹配项。

命令行模式

文件操作

  • :w:保存当前文件。
  • :w filename:将当前文档保存为指定的文件名。
  • :q:退出 Vim。如果有未保存的更改,Vim 会警告用户。
  • :wq:x:保存更改并退出 Vim。
  • :q!:不保存更改强制退出 Vim。

编辑命令

  • :%s/old/new/g:全文替换,将文本中的 "old" 替换为 "new"。
  • :g/pattern/d:删除所有包含指定模式 "pattern" 的行。
  • :r filename:读取外部文件并将其内容插入到当前编辑位置。

设置选项

  • :set number:显示行号。
  • :set nonumber:隐藏行号。
  • :set nowrap:关闭自动换行。
  • :set wrap:开启自动换行。
  • :syntax on:开启语法高亮。
  • :syntax off:关闭语法高亮。

窗口和标签页管理

  • :split:水平分割当前窗口。
  • :vsplit:垂直分割当前窗口。
  • :tabnew:在新标签页中打开一个新的空白文档。
  • :tabclose:关闭当前的标签页。
  • :tabnext:切换到下一个标签页。
  • :tabprev:切换到上一个标签页。

导航和搜索

  • :/pattern:搜索文本中的 "pattern"。
  • :?pattern:反向搜索文本中的 "pattern"。
  • :n:跳转到下一个搜索结果。
  • :N:跳转到上一个搜索结果。
  • :nop:取消搜索。

执行外部命令

  • :!command:执行外部命令 "command",如 :!ls 会在 Vim 中列出当前目录的文件。

配置VIM

配置 Vim 主要通过编辑它的配置文件,通常是 .vimrc,来实现。这个文件位于用户的家目录下(在 Unix-like 系统中是 ~/.vimrc)在 .vimrc 文件中,你可以设置各种选项以定制 Vim 的行为,添加自定义键映射,以及加载插件等。

基本配置

以下是一些常见的 Vim 配置示例,可以加入到你的 .vimrc 文件中:

" 开启语法高亮
syntax enable" 显示行号
set number" 启用相对行号显示
set relativenumber" 设置 tab 键为 4 个空格的宽度
set tabstop=4
set shiftwidth=4
set expandtab" 在状态行显示当前模式
set showmode" 启用搜索时的实时反馈
set incsearch" 搜索时忽略大小写,除非包含大写字符
set ignorecase
set smartcase" 启用自动缩进
set autoindent" 开启文件类型检测,加载对应的插件和缩进文件
filetype plugin indent on" 允许备份
set backup" 设置备份文件的目录
set backupdir=~/.vim/backups" 允许撤销操作历史记录
set undofile
set undodir=~/.vim/undo

安装插件

Vim 社区提供了大量插件,增强编辑器的功能。常用的插件管理器有 Vundle、Pathogen 和 Vim-Plug 等。以下是使用 Vim-Plug 安装和管理插件的示例:

首先,你需要安装 Vim-Plug。可以将其安装脚本添加到 .vimrc 中,然后运行 Vim 并执行 :PlugInstall

" 指定插件目录
" - 对于 Neovim: stdpath('data') . '/plugged'
" - 避免使用 Vim 的标准目录名称如 'plugin'
call plug#begin('~/.vim/plugged')" 确保使用单引号" 简写形式;从 https://github.com/junegunn/vim-easy-align 获取插件
Plug 'junegunn/vim-easy-align'" 允许使用任何有效的 git URL
Plug 'https://github.com/junegunn/vim-github-dashboard.git'" 可以使用 | 分隔符在一行中写入多个 Plug 命令
Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'" 初始化插件系统
call plug#end()

重新打开 Vim,运行 :PlugInstall 来安装配置中指定的插件

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

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

相关文章

外观模式详解

外观模式 1 概述 有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就…

【智能算法】最优捕食算法(OFA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2017年,GY Zhu受到动物行为生态学理论启发,提出了最优捕食算法(Optimal Foraging Algorithm, OFA)。 2.算法原理 2.1算法思想 OFA灵感来源…

Lab4: traps

RISC-V assembly Which registers contain arguments to functions? For example, which register holds 13 in mains call to printf? 根据RISC-V函数调用规范,函数的前8个参数使用a0-a7寄存器传递。 当main函数调用printf函数时,a2寄存器保存13 …

MVCC 详解

介绍 MVCC,全称 Multi-Version Concurrency Control,即多版本并发控制 MVCC的目的主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁。 这里的多版本指的是数据库中同时…

Springboot+Vue项目-基于Java+MySQL的毕业就业信息管理系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

java异常,日志,线程堆栈与Jvm调优

一.知识目录: 二.什么是java异常: 2.1 Throwable类中的重要方法: (1)四个构造方法(用来构造throwable对象,不同构造方法可以传递不同的参数值): /** 构造一个将 null 作为其详细消息的新 throwable */ Thr…

在STM32中用寄存器方式点亮流水灯

文章目录 实验资料一、对寄存器的理解1.通俗认识寄存器2.深入了解寄存器(1)端口配置低寄存器(配置0到7引脚的寄存器)(2)端口配置高寄存器(配置8到15引脚) 3.GPIO口的功能描述 二、配…

鸿蒙内核源码分析(Shell解析篇) | 应用窥视内核的窗口

系列篇从内核视角用一句话概括shell的底层实现为:两个任务,三个阶段。其本质是独立进程,因而划到进程管理模块。每次创建shell进程都会再创建两个任务。 客户端任务(ShellEntry): 负责接受来自终端(控制台)敲入的一个个字符&…

【云原生】 Kubernetes核心概念

目录 引言 一、部署方式回溯 (一)传统部署时代 (二)虚拟化部署时代 (三)容器部署时代 二、Kubernetes基本介绍 (一)为什么使用k8s (二)主要功能 &am…

乡村振兴与数字乡村建设:加强农村信息化建设,推动数字乡村发展,提升乡村治理和服务水平,构建智慧化的美丽乡村

目录 一、引言 二、数字乡村建设的必要性 1、推动农村经济转型升级 2、提升乡村治理水平 3、改善乡村民生福祉 三、数字乡村建设的现状与挑战 1、现状 2、挑战 四、数字乡村建设的未来发展路径 1、加强农村信息化基础设施建设 2、提升农民信息素养和技能水平 3、制…

py黑帽子学习笔记_环境准备

1 下载os装os 下载一个kali虚机镜像然后用虚机管理软件创虚机,装完如下图,我用的版本是2024.1的版本kali-linux-2024.1-installer-amd64,可以从镜像站下载,官网下的慢还断网Index of /kali-images/kali-2024.1/ | 清华大学开源软…

C++高精度算法-加法

引子 在C++的运算中,难免会出现很大很大的数,下面是各个关键字的表示范围 但是如果要表示的数超过了long long可以表示的最大值( 2 64 2^{64} 264-1) 怎么办呢? 如果强制表示,就会溢出,这里的溢出大家可以自行百度,反正就是会出一些-5665434之类的数 现在,就要切入正…

网络基础-Telnet协议

Telnet(Telecommunication Network)是一种基于文本的远程终端协议,允许用户通过网络连接到远程计算机,并在远程计算机上执行命令;它使用TCP作为传输层协议,并依赖于网络连接在客户端和服务器之间进行通信&a…

MySQL 身份认证漏洞 CVE-2012-2122

漏洞影响版本 MariaDB versions from 5.1.62, 5.2.12, 5.3.6, 5.5.23 are not.MySQL versions from 5.1.63, 5.5.24, 5.6.6 are not.演示 开启靶场 进入漏洞目录 cd /root/vulhub/mysql/CVE-2012-2122开启漏洞靶场 docker-compose up -d攻击 直接 运行 这个命令 for i i…

分布式与一致性协议之PBFT算法(二)

PBFT算法 如何替换作恶的主节点 虽然PBFT算法可以防止备份节点作恶,因为这个算法是由主节点和备份节点组成的,但是,如果主节点作恶(比如主机点接收到了客户端的请求,但就是默不作声,不执行三阶段协议),那…

Line Buffer概述

buffer在芯片物理上一般指的是SRAM,也可以指寄存器组。buffer的作用是用来在逻辑芯片上暂时存储数据,但不会是大量的数据。如果是大量数据一般会使用DRAM(典型的指DDR)作为存储芯片,用来存储大密度数据。line buffer可…

优化资源利用,用C++内存池点亮编程之路

内存池介绍(Memory Pool): 它是一种内存分配方式,通过预先分配和复用内存块。 在真正使用内存之前,先申请一大块内存备用。当有新的内存需求时,就从内存池中分出一部分内存块, 若内存块不够再继续申请新的内存。如果我们不需要…

环形链表(判断链表中是否有环)的讲解

一:题目 二:思路讲解 1:采用快慢指针的方法,一个fast指针一次移动两个节点,一个slow指针一次移动一个节点。 2:两个指针从头指针开始往后遍历,如果fast指针或者fast->next 有一个为空&…

5款可用于LLMs的爬虫工具/方案

5款可用于LLMs的爬虫工具/方案 Crawl4AI 功能: 提取语义标记的数据块为JSON格式,提供干净的HTML和Markdown文件。 用途: 适用于RAG(检索增强生成)、微调以及AI聊天机器人的开发。 特点: 高效数据提取,支持LLM格式,多U…

c++ 入门2

目录 五. 函数重载 1、参数类型不同 2、参数个数不同 3、参数类型顺序不同 C支持函数重载的原理--名字修饰(name Mangling) 为什么C支持函数重载,而C语言不支持函数重载呢? 六. 引用 6.1 概念 6.2 引用特性 6.3 常引用 6.4 使用场景 …