Vim 高级操作与技巧指南
在上一篇文章中,我们了解了 Vim 的基本操作和模式,掌握了如何进行文件编辑、光标移动、文本操作等基本技能。现在,我们将深入探讨 Vim 的一些高级功能,包括插件管理、脚本编写、定制快捷键等内容,以进一步提高你的工作效率。
一、Vim 的可定制性与配置
Vim 之所以受到开发者青睐,部分原因在于其高度可定制性。你可以根据自己的需求调整 Vim 的行为,配置文件 ~/.vimrc
允许你修改设置、定义快捷键、加载插件等。通过以下技巧,你可以让 Vim 更加适合你的工作流。
1. 基本配置
Vim 启动时会加载 ~/.vimrc
文件(如果存在)。以下是一些常见的配置项:
-
开启行号显示:
set number
-
开启高亮搜索:
set hlsearch
-
开启行尾自动换行:
set wrap
-
显示行列号:
set ruler
-
开启鼠标支持:
set mouse=a
通过这些设置,你可以让 Vim 显得更加人性化,同时提升使用体验。
2. 映射快捷键
Vim 强大的自定义映射功能可以帮助你快速执行常用操作。以下是几个常见的快捷键映射示例:
-
保存文件:
nnoremap <leader>w :w<CR>
-
退出 Vim:
nnoremap <leader>q :q<CR>
-
切换窗口(分屏):
nnoremap <leader>w :split<CR> nnoremap <leader>v :vsplit<CR>
通过这些快捷键映射,你可以简化一些常用操作,提高工作效率。
二、Vim 插件管理与使用
Vim 插件是提升编辑体验的一个重要方式,合适的插件可以极大提高 Vim 的功能性。下面介绍几种常见的插件管理方式,以及一些必备插件。
1. 插件管理工具
-
Vim-plug:是一款轻量级的插件管理工具,支持并行安装插件,速度较快,易于使用。
在~/.vimrc
中配置插件:call plug#begin('~/.vim/plugged') Plug 'tpope/vim-sensible' " 插件示例 call plug#end()
安装插件:
- 启动 Vim 并运行
:PlugInstall
命令安装配置的插件。
- 启动 Vim 并运行
2. 常用插件推荐
-
NERDTree:用于文件浏览器,可以像 IDE 一样浏览和管理文件树。
安装方法:Plug 'preservim/nerdtree'
使用
:NERDTreeToggle
打开文件浏览器。 -
vim-airline:提供简洁的状态栏,展示文件的相关信息。
安装方法:Plug 'vim-airline/vim-airline'
-
fzf:结合
fzf
插件,你可以通过模糊匹配快速查找文件、历史记录、命令等。
安装方法:Plug 'junegunn/fzf.vim'
-
YouCompleteMe:一个强大的自动补全插件,支持多种语言。
安装方法:Plug 'ycm-core/YouCompleteMe'
3. 插件管理技巧
- 插件更新: 使用
:PlugUpdate
命令可以更新所有已安装的插件。 - 插件清理: 使用
:PlugClean
可以删除没有使用的插件。
通过安装适当的插件,你可以让 Vim 成为一个功能强大的开发工具。
三、Vim 的高级编辑技巧
除了常见的操作,Vim 还提供了一些高级编辑技巧,帮助你在更复杂的编辑任务中提升效率。
1. 查找与替换
Vim 提供了非常强大的查找和替换功能,特别是当你需要在多个文件中进行批量修改时。
-
在当前文件中查找:
/关键词
-
在当前文件中替换:
:%s/old/new/g
-
在多个文件中查找:
:args *.js :argdo %s/old/new/gc
:argdo
允许你对多个文件进行操作,gc
选项会在替换时提示确认。
2. 块选择与操作
Vim 支持块选择,你可以选择文本块并进行操作。使用 Ctrl-v
可以进入块选择模式:
- 块选择: 按下
Ctrl-v
后,可以选择一个区域并进行操作。 - 块复制: 使用
y
可以复制选中的文本块。 - 块删除: 使用
d
可以删除选中的文本块。
3. 撤销与重做
Vim 提供了非常强大的撤销和重做功能:
- 撤销: 按
u
撤销上一步操作。 - 重做: 按
Ctrl-r
重做上一步操作。
你还可以查看历史记录并跳转到某个特定的版本:
- 查看历史: 使用
:undolist
查看撤销历史。
4. 宏与重复操作
宏功能让你能够自动化重复的任务。
- 录制宏: 按
q
后跟一个字母(例如qa
),开始录制宏。 - 停止录制: 按
q
停止录制。 - 执行宏: 按
@a
播放录制的宏。
通过宏,你可以一键执行复杂的编辑操作。
四、Vim 的调试与脚本编写
Vim 允许你通过 Vim 脚本(Vimscript)编写自定义功能,下面是一些常见的调试技巧和脚本编写技巧:
1. 调试 Vim 脚本
-
显示错误信息:
使用:messages
可以查看错误信息。 -
使用
:echo
打印变量值::echo "Hello, Vim!" :echo variable_name
2. 编写 Vim 脚本
通过 Vimscript,你可以编写自己的函数、命令和映射。以下是一个简单的 Vimscript 示例:
function! MyFunction()echo "Hello, Vim!"
endfunctioncommand! Hello call MyFunction()
保存后,执行 :Hello
即可输出 “Hello, Vim!”。
3. 调试插件开发
如果你开发了自己的插件,可以使用 :messages
来调试插件的执行过程,或使用 :echo
打印调试信息。
五、Vim 的高级使用场景
1. 与 Git 集成
Vim 可以与 Git 无缝集成,你可以使用插件如 vim-fugitive
来在 Vim 中直接操作 Git:
- 查看 Git 状态: 使用
:Gstatus
查看当前文件的状态。 - 提交更改: 使用
:Gcommit
提交更改。
2. 与终端结合
Vim 可以在终端内运行命令并查看输出,结合 :!
命令,你可以运行外部命令。例如:
:!ls -la
这会在 Vim 内部运行 ls -la
并显示结果。
结语
通过本文的介绍,我们深入探讨了 Vim 的高级技巧和功能,从配置、插件管理到高级编辑技巧等方面,帮助你进一步掌握 Vim 的使用方法。Vim 是一个高度可定制和强大的编辑器,只有通过不断的练习和深入探索,才能真正释放其全部潜力。希望这些技巧能让你在日常工作中更加高效。
相关文章:
Vim 高级操作与技巧指南
在上一篇文章中,我们了解了 Vim 的基本操作和模式,掌握了如何进行文件编辑、光标移动、文本操作等基本技能。现在,我们将深入探讨 Vim 的一些高级功能,包括插件管理、脚本编写、定制快捷键等内容,以进一步提高你的工作…...
Vue3.0里为什么要用 Proxy API 替代 defineProperty API ?
Vue 3.0 之所以使用 Proxy API 替代 Object.defineProperty,主要是为了提升性能、减少代码复杂性,并解决 Vue 2.x 在响应式处理中的一些局限性。下面我们通过对比这两种方式的工作原理、优缺点,并结合实际项目代码示例来详细讲解。 1. Object.defineProperty 的局限性 在 …...
【基于规则】n-sigma
在正态分布中: 约68%的数据点会落在均值1σ的范围内约95%的数据点会落在均值2σ的范围内约99.7%的数据点会落在均值3σ的范围内这称为68-95-99.7法则(Empirical Rule)。 假设我们有一组数据,其均值为μ,标准差为σ。某个数据点x的n-sigma计算公式如下: 若z=1.2,说明该…...
JavaScript 判断字符串是否包含子字符串的几种方法
这里写目录标题 方法 1: 使用 includes()方法 2: 使用 indexOf()方法 3: 使用正则表达式方法 4: 使用 search()方法 5: 用 startsWith() 或 endsWith()推荐使用 JavaScript 判断字符串是否包含子字符串,不要只知道 indexOf() ,还可以尝试一下其他写法。 …...
goframe框架bug-记录
implement not found for interface ICompany, forgot register? 错误解决检查: 1.有没有init 2. 注入问题 3. 注入问题...
Docker:在 ubuntu 系统上生成和加载 Docker 镜像
本文将介绍在 ubuntu系统上进行 Docker 镜像的生成和加载方法和代码。 文章目录 一、下载和安装 docker二、加载 docker 文件三、保存你的镜像四、将镜像上传到云端并通过连接下载和加载 Docker 镜像五、Docker 容器和本地的文件交互5.1 从容器复制文件到本地宿主机5.1.1 单个文…...
长时间无事可做是个危险信号
小马加入的是技术开发部,专注于Java开发。团队里有一位姓隋的女同事,是唯一的web前端工程师,负责页面开发工作,比小马早两个月入职。公司的项目多以定制化OA系统为主,后端任务繁重,前端工作相对较少。在这样…...
【小白学机器学习39】如何用numpy生成总体,生成样本samples
目录 1 目的:研究 样本和总体之间的关系 2 先生成1个理论总体 2.0 下面是关于这一步的完整代码 2.1 一般情况下,我们先生成一个符合正态分布的总体 2.1.1 设置总体 ,或者说生成一个总体 2.2 为什么一定要是一个符合正态分布的总体&…...
redis的主从复制
redis主从复制 一、主从复制概念二、主从模式运行原理2.1主从复制的演示:2.2查看主从结构信息:2.3AOF文件对主从关系的影响2.4主从节点建立复制流程图 三、主从复制的拓扑结构3.1 一主一从结构3.2 一主多从结构3.3 树形主从结构 四、数据同步psync4.1全量…...
数据结构与算法(排序算法)
排序的概念 1. 排序是指将一组数据,按照特定的顺序进行排列的过程。 2. 这个过程通常是为了使数据更加有序,从而更容易进行搜索、比较或其他操作。 常见的排序算法 插入排序 1. 把待排序的记录,按其关键码值的大小,逐个插入到一…...
极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【三】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
三格电子—EtherNet IP转Modbus RTU网关
EtherNet/IP转Modbus RTU网关 SG-EIP-MOD-210 产品用途 SG-EIP-MOD-210网关可以实现将Modbus接口设备连接到 EtherNet/IP网络中。用户不需要了解具体的Modbus和 EtherNet/IP协议即可实现将Modbus设备挂载到 EtherNet/IP接口的PLC上,并和Modbus设备进行数据交互。拓…...
centos7下安装haproxy2.2
1、安装epel yum install epel-release2、下载并安装ius的centos7软件镜像 wget https://repo.ius.io/ius-release-el7.rpm rpm -ivh ius-release-el7.rpm3、安装haproxy yum search haproxy yum install haproxy224、启动服务 systemctl status haproxy systemctl start h…...
Spring Boot英语知识网站:安全与维护
摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了英语知识应用网站的开发全过程。通过分析英语知识应用网站管理的不足,创建了一个计算机管理英语知识应用网站的方案。文章介绍了英语知识应用网站的系…...
PHP实现终端表格提取
背景 刚开始使用restic想要获取终端的输出数据,默认的终端信息如下示例 restic snapshotsrepository 5816ba52 opened (version 2, compression level auto) ID Time Host Tags Paths Size ------------------------------------…...
c++ 拓扑排序
概念 拓扑排序是一种线性排序算法,主要用于有向无环图 (DAG, Directed Acyclic Graph) 中,对顶点进行排序,使得对于每一条边 u→v,顶点 u 都排在顶点 v之前。 特点 适用于有向无环图。 拓扑排序的结果不唯一(如果有…...
Vue3的双向数据绑定
如果你有多个 ref 类型的数据需要在父子组件之间实现双向绑定,可以使用 v-model 来进行多个数据的双向绑定。在 Vue 3 中,v-model 默认是针对 modelValue 的,但你可以通过指定自定义的属性名来实现多个双向绑定。 多个 v-model 双向绑定的实…...
android-sdk 安装脚本、android-sdk(和platform-tools)国内镜像
android-sdk国内镜像 https://mirrors.cloud.tencent.com/AndroidSDK/ android-sdk安装脚本 android-sdk 安装脚本 androidSdk_install.sh #!/bin/bash #[描述] android-sdk 安装# set -eu shopt -s expand_aliasesAndroid_SDK_D/app5/android-sdk-home/JAVA17_D/app/zulu17…...
SAR ADC 系列16:基于运放的高精度比较器
高精度比较器的设计目标 静态开环运放比较器 共模为,Id*R1,不稳定,随Id和R1变化。 正反馈。Vin增加,Vout-减小 推推推推推,Vout-又减小,正反馈 同时,MP2 < MP1 时,增益提升。MP…...
spring boot 调用C#封装的DLL文件中的函数
1、C#方法 using Infrastructure; using System.Runtime.InteropServices; using System.Text; using System.Text.Json;namespace PH.Resistance;/// <summary> /// 预热器 阻力计算 /// </summary> public class PHResistance {private double? C1_outlet_YP01…...
《C++ 与神经网络:自动微分在反向传播中的高效实现之道》
在深度学习蓬勃发展的今天,神经网络成为了众多领域的核心技术驱动力。而反向传播算法作为训练神经网络的关键手段,其背后的自动微分技术的高效实现尤为重要,特别是在 C 这样追求性能与内存控制极致的编程语言环境下。 神经网络通过大量的参数…...
AppFlow:支持飞书机器人调用百炼应用
AppFlow:支持飞书机器人调用百炼应用 简介: 本文介绍了如何创建并配置飞书应用及机器人,包括登录飞书开发者后台创建应用、添加应用能力和API权限,以及通过AppFlow连接流集成阿里云百炼服务,最后详细说明了如何将机器…...
Axure RP教程:创建高效用户界面和交互
Axure RP是一款广受好评的软件,专门用于设计精致的用户界面和交互体验。这款软件提供了众多UI控件,并根据它们的用途进行了分类。与此同时,国产的即时设计软件作为Axure的替代品,支持在线协作和直接在浏览器中使用,无需…...
【Bug】el-date-picker组件时间差
这个组件默认是国际标准时间 2024-11-27T07:56:37.000Z 表示的是 UTC 时间。如果你当前所在的时区是 UTC8(例如中国),那么这个时间实际上是比你选择的时间早 8 个小时 T表示分隔符,Z表示的是UTC 解决:给el-date-pic…...
Ubuntu问题 -- 使用scp将本机文件传输至ubuntu服务器中
目的 临时没有文件传输工具使用一条命令快速传输指定文件或文件夹 使用scp命令 传输指定文件 scp -P 22 D:\Storage\myCache\UE\Linux_ue_demo.zip txl10.1.112.93:/home/txl-P是远程机器的ssh端口号, SCP(安全复制协议)使用和SSH(安全外壳…...
每日速记10道java面试题02
其他面试题 每日速记10道java面试题01-CSDN博客 目录 一、Java 中 String、StringBuffer 和 StringBuilder 的区别是什么? 二、java的Stringbuilder是怎么实现的? 三、Java 中包装类型和基本类型的区别是什么? 四、接口和抽象类有什么区别? 编辑…...
解决 Vim 上下左右变成 ABCD 的问题
解决 Vim 上下左右变成 ABCD 的问题 Vim 是 Linux 和 Unix 系统上广受欢迎的编辑器,但许多用户在首次使用时会遇到一些让人困惑的问题,例如:按下上下左右键时光标不移动,而是输出 A、B、C、D 字母。这篇文章将深入分析该问题的解…...
并发编程(14)——内存栅栏
文章目录 十四、day141. 内存栅栏1.1 什么是栅栏1.2 栅栏和原子操作的对比1.2.1 获取操作1.2.2 释放操作 1.3 线程可见顺序1.4 通过栅栏保证指令编排顺序1.5 通过栅栏令非原子操作服从内存次序1.6 同步线程间的内存访问 十四、day14 在学习完内存模型、内存序、原子类型、操作…...
消息中间件用途介绍
1. 解耦(Decoupling): • 消息中间件能够将消息的生产者(Producer)和消费者(Consumer)分离开来,使它们不必直接相互依赖。这种设计降低了系统的耦合度,提升了系统的可扩展…...
Algorithms and Data Structures in C++ by Mohammed Yasir Eramangadan
MP4 创建 |视频:h264、1280720 |音频:AAC,44.1 KHz,2 通道 类型:在线学习 |语言:英文 字幕 |持续时间: 159 讲座 ( 10h 43m ) |大小: 3.5 GB “通过专家制作…...
Binder架构
一、架构 如上图,binder 分为用户层和驱动层两部分,用户层有客户端(Client)、服务端(Server)、服务管理(ServiceManager)。 从用户空间的角度,使用步骤如下(…...
【第十一课】Rust并发编程(二)
目录 前言 Channel 多生产者 前言 在上一节中,我们介绍了Rust中并发编程的方式之一:Fork和Join,通过新建线程提升代码的效率,这节课我们介绍并发编程的第二种方式:通道。Channel就类似于水管,通过Channe…...
网络知识1-TCP/IP模型
从用户端到服务端,tcp/ip模型可分为应用层、传输层、网络层、网络接口层 以下使用寄快递为例进行解释 应用层职责: 只关注与为用户提供应用功能,如HTTP、FTP、telnet、DNS、SMTP等 ,应用层的职责就像我们寄快递时将快递给快递员…...
burpsuite(2)最新版burpsuite安装教程
一、安装Java 1.安装jdk21,直接官网下载 下载链接:Java21 2.cmd 输出java(查看java是否已经被安装) 3.java -version(查看java版本) 二、安装burpsuite 4.下载burpsuite最新版本,选择jar方式…...
微知-arp如何删除所有表项?(arp -d; ip neighbor delete 192.168.0.100)
ar命令删掉所有表项 sudo arp -d使用ip命令 ip neighbor delete 192.168.0.100...
使用guzzlehttp异步多进程实现爬虫业务
Python和PHP核心技术共享平台 背景 小哥近来在通过动态代理池爬取一些公司需要的大文件pdf规格书的处理。遇到的难点,如何保证服务器CPU、连接数等正常情况下,多进程、异步快速处理这些业务并且保证准确。下面小哥就给看官唠嗑一下,我使用gu…...
websocket前后端长连接之java部分
一共有4个类,第一个WebSocketConfig 配置类 Configuration EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer {Autowiredprivate WebSocketHandler webSocketHandler;Autowiredprivate WebSocketInterceptor webSocketInterceptor;Overridepubli…...
无线感知会议系列【16】QGesture-1
摘要: 这是2018年发表的一篇 paper 《 Quantifying Gesture Distance and Direction with WiFi Signals》 下一篇重要分享 Decimeter-level localization with a single WiFi access point,主要创新点是如何对CFO SFO PBD 噪声进行去噪。 许多人机交互&…...
如何用通义灵码快速绘制流程图?
使用通义灵码快速绘制流程图?新功能体验 不想读前人“骨灰级”代码,不想当“牛马”程序员,想像看图片一样快速读复杂代码和架构? 通义灵码已经支持代码逻辑可视化,可以把你的每段代码画成流程图。像个脑图工具一样帮你…...
如何搭建一个小程序:从零开始的详细指南
在当今数字化时代,小程序以其轻便、无需下载安装即可使用的特点,成为了连接用户与服务的重要桥梁。无论是零售、餐饮、教育还是娱乐行业,小程序都展现了巨大的潜力。如果你正考虑搭建一个小程序,本文将为你提供一个从零开始的详细…...
wp the_posts_pagination 与分类页面搭配使用
<ul> <?php while( have_posts() ) : the_post(); <li > <a href"<?php the_permalink(); ?>"> <?php xizhitbu_get_thumbnail(thumb-pro); ?> </a> <p > <a href&q…...
文件包含漏洞
本质 本质和SQL注入相同,都是输入一段用户可以控制的脚本或代码,让服务器执行 包含就比如把函数写在一个文件里,调用函数时直接用文件 文件包含漏洞就是攻击者修改了文件的位置,让后台执行任意文件 函数 (PHP&…...
docker快速安装zookeeper
一、拉取镜像 docker pull zookeeper:3.9.3 二、启动zookeeper docker run --restartalways -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime zookeeper:3.9.3 如果需要挂载zookeeper文件及目录,则参数增加: -v /mydata/zookeeper/d…...
如何解决 java.security.acl.NotOwnerException: 在 ACL 中尝试执行非所有者的操作问题?亲测有效的解决方法!
在 Java 中,java.security.acl.NotOwnerException 异常通常出现在访问控制列表(ACL)操作中。当你尝试在一个不属于拥有者的实体上执行特定的操作时,Java 安全管理器会抛出此异常。简单来说,它指的是你正在尝试执行一个…...
【电力行业标准】《电力信息化软件工程度量规范》(DL/T 2015-2019)-费用标准解读系列20
《电力信息化软件工程度量规范》(DL/T 2015-2019)是国家能源局2019年6月4日发布,2019年10月1日实施的电力行业标准(了解更多可直接关注我们咨询),规定了电力行业信息化软件工程度量原则与内容、成本构成及各…...
python除了熟悉的pandas,openpyxl库也很方便的支持编辑Excel表
excel表格是大家经常用到的文件格式,各行各业都会跟它打交道。之前文章我们介绍了使用openpyxl和xlrd库读取excel表数据,使用xlwt库创建和编辑excel表,在办公自动化方面可以方便我们快速处理数据,帮助我们提升效率。 python之open…...
JavaEE---计算机是如何工作的?
1.了解冯诺依曼体系结构 2.CPU的核心概念,CPU的两个重要指标(核心数和频率) 3.CPU执行指令的流程(指令表,一条一条指令,取指令,解析指令,执行指令) 4.操作系统核心概念(管理硬件,给软件提供稳定的运行环境) 5.进程的概念(运行起来的程序和可执行文件的区别) 6.进程的管理(…...
数据结构(Java版)第五期:ArrayList与顺序表(下)
目录 一、用数组实现顺序表 一、用数组实现顺序表 我们提到过,顺序表是基于数组的封装,这次我们以int为例,用数组去实现一个顺序表。 public class MyArrayList {private int[] arr;public MyArrayList(int capacity){//指定初始容量arr n…...
Docker和Docker Compose部署方式的区别以及各自适用的场景(ChatGPT-4o回答)
prompt: 请详细介绍和解释一下docker和docker compose部署两者之间的区别和使用场景 Docker和Docker Compose是用于容器化应用程序的两个重要工具,它们在功能和使用场景上有一些关键区别。 Docker Docker是一个开源平台,用于开发、运输和运行应用程序。…...
JavaSE---异常
1.异常的体系结构 Thorwable是异常类顶层类,派生出了Error和Exception Error:指的是JVM层面无法解决的问题,如JVM内部错误,资源耗尽等..一旦发生很难解决。 Exception:异常发生后可以通过代码处理,使程序继…...