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,一经查实,立即删除!

相关文章

React 之 lazy(延迟加载)(十七)

lazy 能够让你在组件第一次被渲染之前延迟加载组件的代码。 在组件外部调用 lazy,以声明一个懒加载的 React 组件: import { lazy } from react;const MarkdownPreview lazy(() > import(./MarkdownPreview.js)); 配合 Suspense 实现懒加载组件 //App.js imp…

外观模式详解

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

课时122:awk实践_进阶知识_赋值运算

1.2.1 赋值运算 学习目标 这一节,我们从 基础知识、简单实践、小结 三个方面来学习 基础知识 简介 awk本质上属于一种编程语言,所以它具有编程语言的一般功能,表达式、流程控制等基本上都在awk中具有想当程度的使用。这一节我们学习awk进…

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

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

【C++风云录】跨越语音壁垒:口语识别与方言分析

解码语音:语音识别新篇章 前言 本文将探讨C在口语识别与方言分析中的应用,简述其重要性和挑战,并详细介绍Kaldi, ProsodyLab-Aligner, PocketSphinx, HTK (HMM Toolkit), 和 OpenFst等语音识别和处理工具包和库的特点、主要功能以及实际应用…

常用的命令技巧总结

java命令执行 如下编码网站: Runtime.exec Payload Generater | AresXs Blogjava.lang.Runtime.exec() Payload Workarounds - Jackson_Thttps://www.bugku.net/runtime-exec-payloads/ 手动编码操作 bash -c {echo,cGluZyAxMjcuMC4wLjE7ZWNobyAxID50ZXN0LnR4dA}|…

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毕业设计 &…

网络工程师----第二十三天

1、关于有线传输介质: 1类线:主要用于电话传输 2类线:可用于电话传输和最高为4Mbps的数据传输,内部隐含有4对双绞线 3类线:多用于10Mbps以下的数据传输 4类线:可用于16Mpbs令牌环网和大型10Mbps以太网&…

跟我学C++中级篇——POD数据类型及演进

一、POD数据类型 首先说明,所谓POD类型不是常说的标准中的int,double这种数据类型。它是一种与C语言兼容的类型,能够直接以二进制形式与C库进行交互。这样说可能不好理解,意思就是说它可以直接使用memcpy,memmove等函数进行赋值。 POD&#…

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…

以AI对抗AI,瑞数“动态安全+AI”助力在线反欺诈

勒索病毒、恶意软件、网络钓鱼攻击……科技头条每天都充斥着各种网络威胁的故事。同时,AI大模型等技术的加快发展,让网络威胁花样百出,有些明目张胆,有些则“锦衣夜行”,愈发难以识别和防范,为方兴未艾的数…

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

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

css 实现背景图和背景色正片叠底

.style {background-image: url(https://xxx.png);background-repeat: no-repeat;background-position: right center;background-color: rgb(3, 124, 207);border-bottom: 2px solid rgb(4, 83, 162);color: rgb(255, 255, 255);background-blend-mode: multiply; /*或者 col…

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

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

OceanBase V4.2 特性解析:用Values Statement 语法进行SQL优化

1. 背景 你是否也遭遇过这样的场景:在输出多行多列表格数据时,却受限于只能依赖多 UNION ALL 语句来实现。在实际的工程应用中,我们也观察到有些用户程序生成的 SQL 语句中含有大量的 UNION ALL,这种结构的 SQL 对于 OceanBase 数…