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 来安装配置中指定的插件

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

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

相关文章

【Java从入门到精通】Java 异常处理

在 Java 中,异常处理是一种重要的编程概念,用于处理程序执行过程中可能出现的错误或异常情况。 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。 比如说,你的代码少了一个分号&…

idea 使用 git

可以看见项目地址, git clone 地址 就可以拉新项目了 命令 git remote -v

【Unity】Unity项目转抖音小游戏(一) 项目转换

UnityWEBGL转抖音小游戏流程 业务需求,开始接触一下抖音小游戏相关的内容,开发过程中记录一下流程。 相关参考: 抖音文档:https://developer.open-douyin.com/docs/resource/zh-CN/mini-game/develop/guide/game-engine/rd-to-SC…

【Android】Kotlin学习之数据容器(数组for循环遍历)

数组遍历 1. for ( item in arr){…} 2. for ( i in arr.indeces ) {…} (遍历下标) 3. for ((index, item) in arr.withInfex()) {…} (遍历下标和元素) 4. arr.forEach {} ( 遍历元素 ) 5. arr.forEachIndexed{index, item -> …}

2024数维杯数学建模选题建议及各题思路来啦!

大家好呀,2024数维杯数学建模挑战赛开始了,来说一下初步的选题建议吧: 首先定下主基调, 本次数维杯建议选B。难度上C>A>B。B题目是比较经典的数据分析类题目,主要做统计分析差异显著性以及相关…

Qt 6.7功能介绍

Qt 6.7为我们所有喜欢在构建现代应用程序和用户体验时获得乐趣的人提供了许多大大小小的改进。一些新增内容作为技术预览发布,接下来我们就一起来看看吧: 将C20与Qt一起使用 对于许多编译器工具链来说,C20仍然是可选的和实验性的,…

【Git实战】如何将本地仓库推送至Github(windows版)?

最近使用Go语言开发项目,想寻找位操作相关的工具包。找了一圈没有合适的,因此自己写了一个。又想将其推送到Github上,中间逢山开路,遇水搭桥,终于成功将本地Git仓库和Github进行了关联。现将我的方法公之于众&#xff…

如何在JavaScript/Vue中获取当前时间并格式化输出(精确到时分秒)

如何在JavaScript/Vue中获取当前时间并格式化输出(精确到时分秒) 不只是树,人也是一样,在不确定中生活的人,能比较经得起生活的考验,会锻炼出一颗独立自主的心。在不确定中,就能学会把很少的养分…

二、使用插件一键安装HybirdCLR

预告 本专栏将介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用。 插件简介 通过热更技术实现动态地加载AR场景,简化了AR开发流程,让用户可更多地关注Unity场景内容的制作。 热更方案 基于HybirdCLR HybridCLR是一个特性完整、零成…

数据结构之栈的超详细讲解

目录 引言 一.栈的概念 二.栈的结构 三.栈的实现 栈结构的实现 栈操作函数的声明 栈中方法的实现 栈的初始化 栈的销毁 入栈 出栈 取栈顶元素 判断栈中是否为空 获取栈中数据个数 四.测试 代码展示: 结构展示: 五.小结 六.完整代码 Stack.h Stack.c text…

安卓手机平板使用Termux+Hexo搭建本地博客站点并实现无公网IP远程访问

文章目录 前言1.安装 Hexo2.安装cpolar3.远程访问4.固定公网地址 前言 本文主要介绍如何在安卓手机平板Termux中安装个人hexo博客并结合cpolar内网穿透工具,实现远程访问本地搭建的博客站点,无需公网IP。 Hexo 是一个用 Nodejs 编写的快速、简洁且高效…

STM32的ADC详解

ADC即模拟数字转换器,通常用于将外部的模拟量信号转换为数字信号。STM32的ADC是12位逐次逼近型的模拟数字转换器,最大可以计数到4095,有18个通道,16个外部通道和2个内部通道。 ADC框图 ADC的功能框图可以分为七个部分&#xff1a…

6个让你的活动策划成倍回报的策略-华媒舍

活动策划是一个集思广策、全方位考虑的过程,只有通过科学合理的策略规划,才能在有限的资源下取得最大的回报。本文将分享六个让你的活动策划成倍回报的策略,包括目标设定、策划团队、预算控制、宣传推广、参与体验和后期回顾。 1. 目标设定 …

基于LMV358的负电源架构

嘿UU们,中午好啊!吃了没?算算时间我的餐桌上应该快上杨梅和鱼胶冻了。 今天看某群,突然想到Jim williams的书里一个架构,但老爷子的东西是正负输出的,而且略微有点麻烦,我就想怎么样整个更适合…

【小笔记】streamlit使用笔记

【小笔记】streamlit使用笔记 1.streamlit是什么,为什么要用它? 一句话,这个东西是一个python的可视化库,当你想要给你的程序添加个web界面,而又不会或不想用前端技术时,你就可以考虑用它。 类似的可视化库…

论文AI率太高怎么办?笔灵aigc去痕AIGC率直降60%

随着 AI 技术迅猛发展,各种AI辅助论文写作的工具层出不穷! 为了防止有人利用AI工具进行论文代写,在最新的学位法中已经明确规定“已经获得学位者,在获得该学位过程中如有人工智能代写等学术不端行为,经学位评定委员会…

初识Java的main方法

创建一个Java文件 main方法以及用cmd运行程序的过程 面试题JDK\JRE\JVM之间的关系 注意事项 解析String[ ] args 我们想知道String[ ] args里面到底是什么,我们可以用for循环遍历这个数组 Java代码结构 编写Java程序时可能会遇见的错误 注释 注释是为了让代码更…

音频系统模块级实验

加zkhengyang进数字音频系统研究开发交流答疑群(课题组) 1 购买ADC-I2S模块,购买I2S-DAC模块 进行音频系统搭建,可加深对i2s音频总线的理解 2 用电脑的音频输出进行实验

[JAVASE] 类和对象(一)

目录 一.类的基本定义 1.1 类与对象 1.2 类的定义 二. 类的实例化 2.1 创建引用 三. 类中成员的访问 3.1 基本实现 3.2 this引用 四. 构造与初始化 4.1 初始化 4.2 构造方法 五. 总结 一.类的基本定义 1.1 类与对象 类对应着对象 1.2 类的定义 二. 类的实例化 2.1 创建引用…

WPS被指套娃式收费!我快用不起免费的中国互联网了……

接触互联网二十余年,小柴发现,中国互联网与国外互联网有一个很大的区别。 即国外的互联网一般都是收费的,比如杀毒软件、办公软件,以及下载各种APP、游戏,看个视频,基本上都是要单独付费购买的&#xff0c…