Linux -- > vim

news2024/11/29 4:35:44

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.coloradmin.cn/o/1658985.html

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

相关文章

AI赋能EasyCVR视频汇聚/视频监控平台加快医院安防体系数字化转型升级

近来,云南镇雄一医院发生持刀伤人事件持续发酵,目前已造成2人死亡21人受伤。此类事件在医院层出不穷,有的是因为医患纠纷、有的是因为打架斗殴。而且在每日大量流动的人口中,一些不法分子也将罪恶的手伸到了医院,实行扒…

不要错过!实景三维倾斜摄影在3D引擎的丝滑用法

在3D领域,倾斜摄影模型的应用是一个常见的瓶颈。工程建设、工业制造、科学分析、古建遗产,倾斜摄影是占主导地位的处理对象,但模型数据量大、精度要求高以及线上线下同步困难等,会导致生成的三维项目出现瑕疵。 所以在行业内&…

Electron学习笔记(二)

文章目录 相关笔记笔记说明 三、引入现代前端框架1、配置 webpack(1)安装 webpack 和 electron-webpack:(2)自定义入口页面 2、引入 Vue(1)安装 Vue CLI (2)调试配置 -- …

【解决】Android APK文件安装时 已包含数字签名相同APP问题

引言 在开发Android程序过程中,编译好的APK文件,安装至Android手机时,有时会报 包含数字签名相同的APP 然后无法安装的问题,这可能是之前安装过同签名的APP,但是如果不知道哪个是,无法有效卸载,…

KaiwuDB 参编的《分析型数据库技术要求》标准正式发布

近期,中国电子工业标准化技术协会正式发布团体标准《分析型数据库技术要求》(项目号:T-CESA 2023-006)。该标准由中国电子技术标准化研究院、KaiwuDB(上海沄熹科技有限公司) 等国内 16 家企业联合起草&…

婚恋程序_婚恋系统_交友程序_ 婚恋相亲交友系统-一站式搭建婚恋平台-社交婚恋系统-相亲交友APP小程序H5系统婚恋交友社交软件开发语音视频聊天平台定制开发

快速搭建线上平台 赋予十大线上盈利 快速精准牵线匹配 会员资料管理跟进 精美多样海报系统 红娘独立办公系统 丰富拓客引流工具 合伙红娘拓展客源 可多区域连锁运营 外呼电销到店邀约 线下约见服务管理 1对1技术服务支持 无感自动更新升级 行业领先的研发技术与服…

武汉凯迪正大—钢管焊缝裂纹探伤仪

产品概述 武汉凯迪正大无损探伤仪是一种便携式工业无损探伤仪器, 能够快速便捷、无损伤、精确地进行工件内部多种缺陷(裂纹、夹杂、气孔等)的检测、定位、评估和诊断。既可以用于实验室,也可以用于工程现场。 设置简单&#xff0c…

Swift 集合类型

集合类型 一、集合的可变性二、数组(Arrays)1、数组的简单语法2、创建一个空数组3、创建一个带有默认值的数组4、通过两个数组相加创建一个数组5、用数组字面量构造数组6、访问和修改数组7、数组的遍历 三、集合(Sets)1、集合类型…

IDEA 使用maven编译,控制台出现乱码问题的解决方式

前言 使用idea进行maven项目的编译时,控制台输出中文的时候出现乱码的情况。 通常出现这样的问题,都是因为编码格式不一样导致的。既然是maven出的问题,我们在idea中查找下看可以如何设置文件编码。 第一种方式 在pom.xml文件中&#xff…

LeetCode-2079. 给植物浇水【数组 模拟】

LeetCode-2079. 给植物浇水【数组 模拟】 题目描述:解题思路一:简单的模拟题,初始化为0,考虑先不浇灌每一个植物解题思路二:初始化为n,考虑每一个植物需要浇灌解题思路三:0 题目描述&#xff1a…

2024车载测试还有发展吗?

2024年已过接近1/4了,你是不是还在围观车载测试行业的发展? 现在入车载测试还来得及吗? 如何高效学习车载测试呢? 首先我们看一下车载测试行情发展,通过某大平台,我们后去数据如下: 这样的数据可以预估一下未来车载测试还是会持续发展. 随着科技的发展和汽车行业的不断创新,…

Python import 必看技巧:打造干净利落的代码结构

大家好,学习Python你肯定绕不过一个概念import,它是连接不同模块的桥梁,是实现代码复用和模块化的关键。本文将带你深入探索Python中import的原理,并分享一些实用的导入技巧。 1. import 原理 导入机制概述 在Python中,模块(module)是一种封装Python代码的方式,它允许…

华为eNSP学习—IP编址

IP编址 IP编址子网划分例题展示第一步:机房1的子网划分第二步:机房2的子网划分第三步:机房3的子网划分IP编址 明确:IPv4地址长度32bit,点分十进制的形式 ip地址构成=网络位+主机位 子网掩码区分网络位和主机位 学此篇基础: ①学会十进制与二进制转换 ②学会区分网络位和…

宋仕强论道之新质生产力

宋仕强论道之新质生产力,宋仕强说当前5G通信、人工智能、万物互联、工业互联网、数字经济、新能源技术和产业等领域正蓬勃发展,成为未来经济增长的重要推动力,也是目前提倡的新质生产力的重要组成部分。而这些领域的发展都离不开数据的采集、…

每日一题7:Pandas-重命名列

一、每日一题 编写一个解决方案,按以下方式重命名列: id 重命名为 student_idfirst 重命名为 first_namelast 重命名为 last_nameage 重命名为 age_in_years 返回结果格式如下示例所示。 解答: import pandas as pddef renameColumns(studen…

计算机系列之面向对象、设计模式

24、面向对象技术(重要,10分左右) 1、面向对象开发 (1)对象:由数据及其操作所构成的封装体,是系统中用来描述客观事务的个实体,是构成系统的一个基本单位。一个对象通常可以由对象名、属性和方法3个部分组成。 (2)类…

C++容器——stack

stack容器 C的std::stack容器是一个基于适配器模板类实现的容器适配器,它提供了一种后进先出的数据结构,即栈。 特点: 1.后进先出:元素在栈容器中按照后进先出的顺序管理,最后放入的元素将会最先被取出。 2.只能从栈…

《Decoupled Optimisation for Long-Tailed Visual Recognition》阅读笔记

论文标题 《Decoupled Optimisation for Long-Tailed Visual Recognition》 长尾视觉识别的解耦优化 作者 Cong Cong、Shiyu Xuan、Sidong Liu、Shiliang Zhang、Maurice Pagnucco 和 Yang Song、 来自新南威尔士大学计算机科学与工程学院、北京大学计算机学院多媒体信息处…

在Flask中使用Celery完成异步和定时任务(Flask、Celery、Redis)

编程目标 通过使用Flask和Celery,实现一个简单的Web应用程序,能够接收HTTP POST请求,并异步发送电子邮件。 说明 使用Flask创建一个简单的Web应用程序,包含一个HTTP POST路由,用于接收发送电子邮件的请求。使用Cele…

特征提取与深度神经网络(角点检测)

图像特征概述 图像特征表示是该图像唯一的表述,是图像的DNA HOG HOG (Histogram of Oriented Gradients)是一种用于目标检测的特征描述子。在行人检测中用的最多。HOG特征描述了图像中局部区域的梯度方向信息,通过计算图像中各个…