【Linux】vi/vim 使用技巧
文章目录
- 1. 简介
- vi和vim的历史
- vi和vim的区别
- 安装vim
- Ubuntu/Debian
- CentOS/RHEL
- Fedora
- macOS
- Windows
- 2. 基本操作
- 启动和退出
- 启动
- 退出
- 模式介绍
- 普通模式
- 插入模式
- 命令模式
- 光标移动
- 基本移动
- 高级移动
- 3. 文本编辑
- 插入文本
- 删除文本
- 复制和粘贴
- 撤销和重做
- 4. 搜索与替换
- 基本搜索
- 搜索文本
- 搜索导航
- 高级搜索
- 使用正则表达式
- 高亮搜索
- 搜索时忽略大小写
- 文本替换
- 替换当前行
- 替换整个文件
- 替换时确认
- 5. 文件操作
- 打开和保存文件
- 打开文件
- 保存文件
- 多文件编辑
- 打开多个文件
- 分屏操作
- 6. 配置和个性化
- vimrc文件配置
- 创建和编辑vimrc文件
- 常用配置选项
- 行号
- 高亮当前行
- 自动缩进
- 语法高亮
- 搜索高亮
- 忽略搜索大小写
- 智能大小写搜索
- 安装和管理插件
- Vundle
- 安装Vundle
- 配置Vundle
- 安装插件
- vim-plug
- 安装vim-plug
- 配置vim-plug
- 安装插件
- 7. 高级技巧
- 宏录制与播放
- 录制宏
- 播放宏
- 使用寄存器
- 基本使用
- 查看寄存器内容
- 标签和书签
- 使用标签
- 使用书签
- 脚本编写
- 编写vim脚本
- 基本示例
- 8. 常见问题与解决方案
- 常见错误及解决方法
- 1. 文件无法保存
- 2. 插件安装失败
- 3. 语法高亮不起作用
- 4. vim启动慢
- 社区资源推荐
- 官方文档
- 在线教程
- 社区论坛和讨论
- 插件资源
1. 简介
vi和vim的历史
vi(Visual editor)是1976年由Bill Joy在Unix操作系统上开发的文本编辑器。它是基于ex编辑器的一个可视化模式,最初设计的目标是提供一个功能强大且轻量的文本编辑工具。
vim(Vi IMproved)是vi的一个改进版,由Bram Moolenaar在1991年发布。vim不仅继承了vi的所有功能,还增加了许多新特性,使其更加强大和灵活。
vi和vim的区别
- 功能扩展:vim相较于vi增加了许多功能,如语法高亮、代码折叠、插件支持、无限制撤销等。
- 跨平台支持:vim支持多种操作系统,包括Linux、Windows、macOS等,而vi主要用于Unix系统。
- 用户体验:vim的用户体验更友好,提供了更多的配置选项和帮助文档。
- 插件系统:vim拥有强大的插件系统,用户可以根据需要安装各种插件来扩展其功能。
安装vim
在大多数Linux发行版中,vim可能已经预装。如果没有,可以通过以下命令安装:
Ubuntu/Debian
sudo apt update
sudo apt install vim
CentOS/RHEL
sudo yum install vim
Fedora
sudo dnf install vim
macOS
可以使用Homebrew来安装:
brew install vim
Windows
可以从Vim官网下载适用于Windows的安装包,或者使用Chocolatey进行安装:
choco install vim
安装完成后,可以通过在终端中输入vim来验证安装是否成功。如果看到Vim的启动界面,说明安装成功。
2. 基本操作
启动和退出
启动
在终端中输入vim或vi加上文件名来启动编辑器。例如:
vim filename.txt
如果文件不存在,vim会创建一个新文件。
退出
在普通模式下,输入以下命令退出vim:
:q:退出(如果有未保存的更改,会提示错误):q!:强制退出,不保存更改:wq或:x:保存并退出ZZ:保存并退出(相当于:wq)
模式介绍
vim有三种主要模式:普通模式、插入模式和命令模式。
普通模式
普通模式是vim的默认模式。在这个模式下,你可以进行光标移动、删除文本、复制粘贴等操作。启动vim后默认进入普通模式。
常用的普通模式命令:
i:进入插入模式::进入命令模式v:进入可视模式Esc:返回普通模式
插入模式
插入模式用于插入文本。进入插入模式的方法有多种:
i:在光标前插入a:在光标后插入o:在当前行下方插入新行I:在行首插入A:在行尾插入
在插入模式下,按Esc键返回普通模式。
命令模式
命令模式用于执行文件操作和设置配置。在普通模式下按:进入命令模式。
常用命令模式命令:
:w:保存文件:q:退出:wq:保存并退出:q!:强制退出,不保存更改:e filename:打开文件:set option:设置选项,例如:set number显示行号
光标移动
基本移动
在普通模式下,使用以下键进行基本光标移动:
h:左移j:下移k:上移l:右移
其他基本移动命令:
0:移动到行首$:移动到行尾w:移动到下一个单词的开头b:移动到上一个单词的开头gg:移动到文件开头G:移动到文件结尾
高级移动
高级光标移动命令可以帮助你更高效地导航文件:
Ctrl + f:向下翻页Ctrl + b:向上翻页Ctrl + d:向下移动半页Ctrl + u:向上移动半页nG:移动到第n行,例如10G移动到第10行:n:移动到第n行,例如:10移动到第10行fx:向右查找字符x,光标停在x上Fx:向左查找字符x,光标停在x上tx:向右查找字符x,光标停在x前Tx:向左查找字符x,光标停在x后;:重复上一次f、F、t或T命令,:反向重复上一次f、F、t或T命令
3. 文本编辑
插入文本
在vim中,要插入文本,首先需要进入插入模式。以下是几种进入插入模式的方法:
- i:在光标前插入
- I:在行首插入
- a:在光标后插入
- A:在行尾插入
- o:在当前行下方新建一行并插入
- O:在当前行上方新建一行并插入
在插入模式下,可以像普通文本编辑器一样输入文本。完成后,按Esc键返回普通模式。
删除文本
在普通模式下,可以使用以下命令删除文本:
- x:删除光标所在的字符
- X:删除光标前的字符
- dw:删除从光标位置到下一个单词开头的字符
- d$:删除从光标位置到行尾的字符
- dd:删除整行
- dG:删除从光标位置到文件末尾的所有内容
复制和粘贴
在普通模式下,可以使用以下命令进行复制和粘贴:
- yy:复制当前行
- yw:复制从光标位置到下一个单词开头的字符
- y$:复制从光标位置到行尾的字符
- yG:复制从光标位置到文件末尾的所有内容
- p:在光标后粘贴
- P:在光标前粘贴
撤销和重做
在普通模式下,可以使用以下命令进行撤销和重做:
- u:撤销上一个操作
- U:撤销当前行的所有更改
- Ctrl + r:重做上一个撤销的操作
4. 搜索与替换
基本搜索
搜索文本
在普通模式下,可以使用/或?来进行搜索:
/pattern:向前搜索pattern?pattern:向后搜索pattern
例如,要搜索单词example,可以输入/example并按Enter。
搜索导航
在搜索结果之间导航:
n:跳转到下一个匹配N:跳转到上一个匹配
高级搜索
使用正则表达式
vim的搜索功能支持正则表达式,可以进行更复杂的搜索。例如:
/\bword\b:搜索完整的单词word/^\d\{3\}-\d\{2\}-\d\{4\}$/:搜索符合特定格式(如社会安全号码)的字符串
高亮搜索
要高亮显示所有匹配项,可以在vim配置文件(通常是~/.vimrc)中添加以下内容:
set hlsearch
或者在vim中输入:
:set hlsearch
要关闭高亮显示,可以输入:
:set nohlsearch
搜索时忽略大小写
要在搜索时忽略大小写,可以在vim配置文件中添加:
set ignorecase
或者在vim中输入:
:set ignorecase
要使搜索区分大小写,可以使用:
:set noignorecase
或者在搜索模式下使用\c(忽略大小写)和\C(区分大小写),例如:
/example\c
文本替换
替换当前行
要在当前行中替换文本,可以使用:
:s/old/new/
这会将当前行中的第一个old替换为new。要替换当前行中的所有匹配项,可以使用:
:s/old/new/g
替换整个文件
要在整个文件中替换文本,可以使用:
:%s/old/new/
这会将文件中的第一个old替换为new。要替换文件中的所有匹配项,可以使用:
:%s/old/new/g
替换时确认
如果希望在替换时进行确认,可以添加c标志:
:%s/old/new/gc
每次匹配时会提示确认,可以选择:
y:替换当前匹配n:跳过当前匹配a:替换所有匹配q:退出替换l:替换当前匹配并退出
5. 文件操作
打开和保存文件
打开文件
在vim中打开文件的方法:
- 启动vim时指定文件名:
vim filename.txt - 在命令模式下打开新文件:
:e anotherfile.txt
保存文件
在命令模式下进行保存:
:w:保存当前文件:w filename:另存为指定文件名
多文件编辑
打开多个文件
可以在启动vim时指定多个文件:
vim file1.txt file2.txt
在vim中切换文件:
:n:切换到下一个文件:N:切换到上一个文件:bnext或:bn:切换到下一个缓冲区:bprev或:bp:切换到上一个缓冲区:ls:列出所有打开的缓冲区:b [number]:切换到指定编号的缓冲区
分屏操作
vim支持分屏以同时查看多个文件:
:split filename或:sp filename:水平分屏打开文件:vsplit filename或:vsp filename:垂直分屏打开文件Ctrl-w w:在分屏之间切换Ctrl-w q:关闭当前分屏Ctrl-w h/j/k/l:在分屏中移动光标
分屏调整:
Ctrl-w +:增加当前分屏的高度Ctrl-w -:减少当前分屏的高度Ctrl-w >:增加当前分屏的宽度Ctrl-w <:减少当前分屏的宽度
6. 配置和个性化
vimrc文件配置
vim的配置文件是~/.vimrc,用于存储用户的个性化设置。
创建和编辑vimrc文件
创建或编辑~/.vimrc文件:
vim ~/.vimrc
常用配置选项
以下是一些常用的vim配置选项:
行号
显示行号:
set number
高亮当前行
高亮当前行:
set cursorline
自动缩进
启用自动缩进:
set autoindent
语法高亮
启用语法高亮:
syntax on
搜索高亮
启用搜索高亮:
set hlsearch
忽略搜索大小写
忽略搜索时的大小写:
set ignorecase
智能大小写搜索
启用智能大小写搜索(如果搜索模式中有大写字母,则区分大小写,否则不区分):
set smartcase
安装和管理插件
vim可以通过多种插件管理器来安装和管理插件,以下是一些流行的插件管理器:
Vundle
Vundle是一个流行的vim插件管理器。
安装Vundle
在命令行中执行以下命令:
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
配置Vundle
在~/.vimrc中添加以下内容:
set nocompatible " 关闭vi兼容模式
filetype off " 必须" 设置runtime path
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" 这里开始列出插件
Plugin 'VundleVim/Vundle.vim'
" 例如,安装NERDTree插件
Plugin 'preservim/nerdtree'
" 这里结束列出插件
call vundle#end() " 必须
filetype plugin indent on " 必须
安装插件
在vim中执行以下命令:
:PluginInstall
vim-plug
vim-plug是另一个流行的vim插件管理器。
安装vim-plug
在命令行中执行以下命令:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
配置vim-plug
在~/.vimrc中添加以下内容:
call plug#begin('~/.vim/plugged')
" 这里开始列出插件
Plug 'junegunn/vim-easy-align'
" 例如,安装NERDTree插件
Plug 'preservim/nerdtree'
" 这里结束列出插件
call plug#end()
安装插件
在vim中执行以下命令:
:PlugInstall
7. 高级技巧
宏录制与播放
录制宏
- 按
q进入录制模式。 - 按任意字母键(如
a)指定寄存器。 - 执行一系列操作。
- 按
q结束录制。
播放宏
@a:播放寄存器a中的宏。2@a:播放寄存器a中的宏两次。
使用寄存器
基本使用
":指定寄存器。"ayy:将当前行复制到寄存器a。"ap:粘贴寄存器a的内容。
查看寄存器内容
:reg:显示所有寄存器的内容。
标签和书签
使用标签
:tag tagname:跳转到指定标签。Ctrl-]:跳转到光标下的标签。Ctrl-t:返回到上一个标签位置。
使用书签
m{a-z}:在当前位置设置书签。'{a-z}:跳转到指定书签。'':返回到上一个位置。
脚本编写
编写vim脚本
- 脚本文件通常以
.vim结尾。 - 使用
:source filename.vim运行脚本。
基本示例
" Hello.vim
echo "Hello, Vim!"
可以通过在vim中执行 :source Hello.vim 来运行这个脚本。
这些高级技巧可以极大地提高你的编辑效率和灵活性。
8. 常见问题与解决方案
常见错误及解决方法
1. 文件无法保存
问题:尝试保存文件时出现“E212: Can’t open file for writing”错误。
解决方法:
- 确保你有文件的写权限。如果没有,可以使用
sudo提升权限:sudo vim filename - 检查文件路径是否正确。
2. 插件安装失败
问题:使用插件管理器安装插件时出现错误。
解决方法:
- 确保插件管理器已正确安装和配置。
- 检查网络连接,确保能够访问插件的源地址。
- 使用
:PlugClean(vim-plug)或:PluginClean(Vundle)清理无效插件,然后重新安装。
3. 语法高亮不起作用
问题:语法高亮没有启用或不起作用。
解决方法:
- 确保在
~/.vimrc中启用了语法高亮:syntax on - 确保文件类型检测已启用:
filetype plugin indent on - 检查是否安装了正确的语法文件。
4. vim启动慢
问题:vim启动时间过长。
解决方法:
- 检查是否加载了过多的插件,尝试禁用一些不常用的插件。
- 优化
~/.vimrc配置文件,避免重复和冗余设置。 - 使用
vim --startuptime log.txt命令生成启动时间日志,分析并优化启动过程。
社区资源推荐
官方文档
- Vim 官方文档:Vim Documentation
在线教程
- Vim Adventures(互动教程):Vim Adventures
- Open Vim(交互式教程):Open Vim
社区论坛和讨论
- Reddit Vim 版块:r/vim
- Stack Overflow Vim 标签:Vim on Stack Overflow
插件资源
- Vim Awesome(插件搜索引擎):Vim Awesome
相关文章:
【Linux】vi/vim 使用技巧
文章目录 1. 简介vi和vim的历史vi和vim的区别安装vimUbuntu/DebianCentOS/RHELFedoramacOSWindows 2. 基本操作启动和退出启动退出 模式介绍普通模式插入模式命令模式 光标移动基本移动高级移动 3. 文本编辑插入文本删除文本复制和粘贴撤销和重做 4. 搜索与替换基本搜索搜索文本…...
Python自动化办公(系统维护及开发任务状态自动推送)
Python自动化办公, 1.需求分析 系统维护及开发人员的工作一般都会比较繁杂,领导们喜欢实时掌控项目的进度,但是领导们很多时候是不会自己主动去查看及分析项目进度数据的,干活的牛马们也没空整天日报,周报,月报,季报,年报…活又有了,又该想想怎么干,需求的核心是实现自动整理…...
CentOS7 Apache安装踩坑
Gnome桌面右键弹出终端。 [rootlocalhost ~]# yum repolist 已加载插件:fastestmirror, langpacks /var/run/yum.pid 已被锁定,PID 为 2611 的另一个程序正在运行。 Another app is currently holding the yum lock; waiting for it to exit... [root…...
OpenMMlab导出MaskFormer/Mask2Former模型并用onnxruntime和tensorrt推理
onnxruntime推理 使用mmdeploy导出onnx模型: from mmdeploy.apis import torch2onnx from mmdeploy.backend.sdk.export_info import export2SDK# img ./bus.jpg # work_dir ./work_dir/onnx/maskformer # save_file ./end2end.onnx # deploy_cfg ./configs/m…...
若依微服务中配置 MySQL + DM 多数据源
文章目录 1、导入 MySQL 和达梦(DM)依赖2、在 application-druid.yml 中配置达梦(DM)数据源3、在 DruidConfig 类中配置多数据源信息4、在 Service 层或方法级别切换数据源4.1 在 Service 类上切换到从库数据源4.2 在方法级别切换…...
一些前端组件介绍
wangEditor : 一款开源 Web 富文本编辑器,可用于 jQuery Vue React等 https://www.wangeditor.com/ Handsontable:一款前端可编辑电子表格https://blog.csdn.net/carcarrot/article/details/108492356mitt:Mitt 是一个在 Vue.js 应…...
python学opencv|读取图像(九)用numpy创建黑白相间灰度图
【1】引言 前述学习过程中,掌握了用numpy创建矩阵数据,把所有像素点的BGR取值设置为0,然后创建纯黑灰度图的方法,具体链接为: python学opencv|读取图像(八)用numpy创建纯黑灰度图-CSDN博客 在…...
AtCoder Beginner Contest 383
C - Humidifier 3 Description 一个 h w h \times w hw 的网格,每个格子可能是墙、空地或者城堡。 一个格子是好的,当且仅当从至少一个城堡出发,走不超过 d d d 步能到达。(只能上下左右走,不能穿墙)&…...
20. 内置模块
一、random模块 random 模块用来创建随机数的模块。 random.random() # 随机生成一个大于0且小于1之间的小数 random.randint(a, b) # 随机生成一个大于等于a小于等于b的随机整数 random.uniform(a, b) …...
《知识拓展 · 统一建模语言UML》
📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...
计算机网络-Wireshark探索ARP
使用工具 Wiresharkarp: To inspect and clear the cache used by the ARP protocol on your computer.curl(MacOS)ifconfig(MacOS or Linux): to inspect the state of your computer’s network interface.route/netstat: To inspect the routes used by your computer.Brows…...
减少30%人工处理时间,AI OCR与表格识别助力医疗化验单快速处理
在医疗行业,化验单作为重要的诊断依据和数据来源,涉及大量的文字和表格信息,传统的手工输入和数据处理方式不仅繁琐,而且容易出错,给医院的运营效率和数据准确性带来较大挑战。随着人工智能技术的快速发展,…...
1.2.3计算机软件
一个完整的计算机系统由硬件和软件组成,用户使用软件,而软件运行在硬件之上,软件进一步的划分为两类:应用软件和系统软件。普通用户通常只会跟应用软件打交道。应用软件是为了解决用户的某种特定的需求而研发出来的。除了每个人都…...
二、uni-forms
避坑指南:uni-forms表单在uni-app中的实践经验-CSDN博客...
Android13开机向导
文章目录 前言需求-场景第三方资料说明需求思路按照平台 思路 从配置上去 feature换个思路,去feature。SimMissingActivity 判断跳过逻辑SetupWizardUtils 判断SIM 、 hasSystemFeature FEATURE_TELEPHONYPackageManager.FEATURE_TELEPHONYApplicationPackageManage…...
软件测试丨Appium 源码分析与定制
在本文中,我们将深入Appium的源码,探索它的底层架构、定制化使用方法和给软件测试带来的优势。我们将详细介绍这些技术如何解决实际问题,并与大家分享一些实用的案例,以帮助读者更好地理解和应用这一技术。 Appium简介 什么是App…...
1.网络知识-IP与子网掩码的关系及计算实例
IP与子网掩码 说实话,之前没有注意过,今天我打开自己的办公地电脑,看到我的网络配置如下: 我看到我的子网掩码是255.255.254.0,我就奇怪了,我经常见到的子网掩码都是255.255.255.0啊?难道公司配…...
Android中Gradle常用配置
前言 本文记录了一些常用的gradle配置,基本上都是平时开发中可能会使用到的,如果有新内容会不定时更新,附官网 1.依赖库版本写法 不推荐写法: dependencies {compile com.example.code.abc:def:2. // 不推荐的写法 }这样写虽然可…...
Linux操作系统3-文件与IO操作2(文件描述符fd与文件重定向)
上篇文章:Linux操作系统3-文件与IO操作1(从C语言IO操作到系统调用)-CSDN博客 本篇代码Gitee仓库:myLerningCode 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 本篇重点:文件描述符fd与文件重定向 目录 一. 文件描述…...
k8s调度策略
调度策略 binpack(装箱策略) Binpacking策略(又称装箱问题)是一种优化算法,用于将物品有效地放入容器(或“箱子”)中,使得所使用的容器数量最少,Kubernetes等集群管理系…...
LlamaGen:自回归模型在图像生成领域挑战扩散模型
1. 项目概述:当Llama遇见图像生成最近在图像生成领域,一个名为LlamaGen的项目引起了我的注意。它提出了一个非常大胆且反直觉的观点:纯自回归模型(AR)在图像生成任务上,可以超越当前如日中天的扩散模型&…...
P1238 走迷宫【洛谷算法习题】
P1238 走迷宫 网页链接 P1238 走迷宫 题目描述 有一个 mnm\times nmn 格的迷宫(表示有 mmm 行、nnn 列),其中有可走的也有不可走的,如果用 111 表示可以走,000 表示不可以走,文件读入这 mnm\times nmn 个数据和起始点、结束点…...
ARM NEON指令集VLD1加载操作原理与优化实践
1. ARM SIMD指令集与VLD1加载操作概述在现代处理器架构中,SIMD(Single Instruction Multiple Data)技术已成为提升计算性能的关键手段。作为ARM架构中Advanced SIMD指令集(俗称NEON)的重要组成部分,VLD1系列…...
杰理之做1T1应用失真较大问题修改【篇】
可以将低延时编码LIVE_AUDIO_CODING_JLA_LL修改为LIVE_AUDIO_CODING_JLA...
Fast-GitHub:国内开发者必备的GitHub下载加速终极方案
Fast-GitHub:国内开发者必备的GitHub下载加速终极方案 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 对于身处国内的开…...
OmenSuperHub终极指南:免费解锁惠普OMEN游戏本隐藏性能的完整教程
OmenSuperHub终极指南:免费解锁惠普OMEN游戏本隐藏性能的完整教程 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub OmenSuperHub是一款专为惠普…...
微分方程详解(理工科)
一句总纲:微分方程不是在求一个数,而是在求一个函数。它研究的是:如果我知道一个系统“怎么变化”,能不能反推出它“长什么样”。普通方程:未知量是一个数 (x)。微分方程:未知量是一个函数 y(x)。它的意思是…...
Lindy AI Agent工作流编排进阶:从单Step到多Agent协同的6种拓扑模式(附拓扑决策树)
更多请点击: https://intelliparadigm.com 第一章:Lindy AI Agent工作流编排进阶:从单Step到多Agent协同的6种拓扑模式(附拓扑决策树) 在 Lindy 框架中,AI Agent 的工作流编排已超越传统线性 Step 链式调用…...
汽车销售网站(10015)
有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...
【实战指南】YOLOv5适配VisDrone:从数据转换到模型训练全流程解析
1. 为什么选择YOLOv5处理VisDrone数据集 VisDrone作为目前最大的公开无人机航拍数据集,包含了各种复杂场景下的目标检测任务。但直接将YOLOv5用于VisDrone会遇到几个典型问题:首先是数据格式差异,VisDrone采用类似PASCAL VOC的标注方式&#…...
