当前位置: 首页 > news >正文

【vim 学习系列文章 18 -- 选中行前后增加两行】


请阅读【嵌入式开发学习必备专栏 之 Vim】


文章目录

    • 选中行前后增加两行
      • 1. 定义函数
      • 2. 创建快捷键映射
      • 3. 保存并重新加载 `.vimrc`
      • 使用方法
    • 重新选中实现
      • 步骤 1: 定义函数
      • 步骤 2: 绑定快捷键
      • 保存并重新加载 `.vimrc`
      • 使用方法

选中行前后增加两行

为了在 Vim 中实现这个功能,需要定义一个 Vimscript 函数,该函数能够在当前选中的行(Visual 模式下)的最前面一行和最后一行增加空白行。然后,可以为这个函数创建一个快捷键映射,以便在 Visual 模式下快速使用。
以下是如何步骤实现这个功能的详细说明:

1. 定义函数

打开 .vimrc 文件,然后添加以下函数定义:

function! AddLinesBeforeAndAfter()" 获取Visual模式选中的起始和结束行号let start_line = line("'<")let end_line = line("'>")" 在选中区域的最后一行后面插入一空白行call append(end_line, '')" 在选中区域的第一行前面插入一空白行" 注意:因为已经在末尾添加了一行,所以这里不需要调整 start_linecall append(start_line - 1, '')
endfunction

2. 创建快捷键映射

.vimrc 文件中的函数定义下方,添加一个映射,以便在 Visual 模式下使用快捷键(比如 gaa)来调用这个函数:

vnoremap gaa :<C-u>call AddLinesBeforeAndAfter()<CR>

这行代码的作用是在 Visual 模式下,当按下 gaa 时,会调用之前定义的 AddLinesBeforeAndAfter 函数。

3. 保存并重新加载 .vimrc

在对 .vimrc 文件进行修改后,保存并退出。然后,需要重新加载 Vim 配置,以便更改生效。可以通过在 Vim 中执行命令 :source ~/.vimrc 来实现这一点,或者简单地重新启动 Vim。

使用方法

  1. 进入 Vim 并打开一个文件。
  2. 进入 Visual 模式(按 v 或者 V 选择多行)。
  3. 使用方向键选择多行文本。
  4. 按下 gaa(或者设置的其他快捷键),在选中行的最前面一行和最后一行增加空白行。
    这样,就能够在 Visual 模式下选中的行的最前面一行和最后一行快速添加空白行了。这个功能在编辑文件时,尤其是在编写代码时,可能会非常有用。

重新选中实现

还可以实现个函数 在选中行的最前面一行增加一行,在选中行的最后一行增加一行,然后再选中所有的行包含新增的两行:

要在 Vim 中实现这个功能,需要编写一个 Vim script 函数,该函数在选中行(Visual 模式下)的最前面和最后面各增加一行空行,然后重新选中原始选中的行以及新增的两行。接着,将这个函数绑定到一个快捷键上。
这里是如何做到的:

步骤 1: 定义函数

首先,打开你的 .vimrc 文件,在其中添加以下函数定义:

function! AddLinesAndReselect()" 获取Visual模式选中的起始和结束行号let start_line = line("'<")let end_line = line("'>")" 在选中区域之前和之后各添加一个空行call append(end_line, '')call append(start_line - 1, '')" 重新选中包括新增的两行在内的区域" 注意:因为在起始行前添加了一行,所以起始行和结束行都需要偏移let new_start_line = start_line - 1let new_end_line = end_line + 1" 使用 normal 命令进入 Visual 模式并选中新的区域execute "normal! " . new_start_line . "GV" . new_end_line . "G"
endfunction

步骤 2: 绑定快捷键

.vimrc 文件中的函数定义下方,添加一个映射,以便在 Visual 模式下使用快捷键(例如 gaa)来调用这个函数:

vnoremap gaa :<C-u>call AddLinesAndReselect()<CR>

保存并重新加载 .vimrc

在对 .vimrc 文件进行修改后,保存并退出。然后,你需要重新加载 Vim 配置,以便更改生效。你可以通过在 Vim 中执行命令 :source ~/.vimrc 来实现这一点,或者简单地重新启动 Vim。

使用方法

  1. 进入 Vim 并打开一个文件。
  2. 进入 Visual 模式(按 v 或者 V 选择多行)。
  3. 使用方向键选择多行文本。
  4. 按下 gaa(或你设置的其他快捷键),在选中行的最前面和最后面各增加一行空行,并重新选中这个新的区域。
    这个功能在编辑代码或文本时可以非常有用,特别是当你需要在一个代码块的前后添加空行,同时保持选中状态进行进一步编辑时。

相关文章:

【vim 学习系列文章 18 -- 选中行前后增加两行】

请阅读【嵌入式开发学习必备专栏 之 Vim】 文章目录 选中行前后增加两行1. 定义函数2. 创建快捷键映射3. 保存并重新加载 .vimrc使用方法 重新选中实现步骤 1: 定义函数步骤 2: 绑定快捷键保存并重新加载 .vimrc使用方法 选中行前后增加两行 为了在 Vim 中实现这个功能&#x…...

分布式系统接口限流方案

Git地址&#xff1a;https://gitee.com/deepjava/test-api-limit.git 方案一、 Guava工具包 实现单机版限流 具体代码见git 方案二、Redis lua脚本 实现分布式系统的接口限流 具体代码见git...

Flutter仿Boss-6.底部tab切换

效果 实现 图片资源采用boss包中的动画webp资源。Flutter采用Image加载webp动画。 遇到的问题 问题&#xff1a;Flutter加载webp再次加载无法再次播放动画问题 看如下代码&#xff1a; Image.asset(assets/images/xxx.webp,width: 40.w,height: 30.w, )运行的效果&#xf…...

深入理解机器学习:用Python构建您的第一个预测模型

在这个数据驱动的时代&#xff0c;机器学习技术正在成为各行各业的变革力量。无论是金融、医疗、零售还是教育&#xff0c;机器学习都在为业务决策提供支持&#xff0c;优化用户体验&#xff0c;并创造出全新的服务方式。今天&#xff0c;我们将一起走进机器学习的世界&#xf…...

redisson与redis集群检测心跳机制原理

redisson与redis集群检测心跳机制原理 1、ClusterConnectionManager.scheduleClusterChangeCheck 创建延时定时调度任务 2、monitorFuture group.schedule(new Runnable() { EventExecutorGroup 是 Netty 中用于管理一组 EventExecutor 的组件&#xff0c;它类似于 EventLoo…...

部署Redis

部署Redis过程简要记录 在家目录创建存放各类软件源码、安装文件、数据、日志、依赖等目录 cd /home/liqiang mkdir sourcecode software app log data lib tmp在 sourcecode 中下载Redis并解压 cd sourcecode wget http://download.redis.io/releases/redis-5.0.4.tar.gz t…...

性能测试-数据库优化二(SQL的优化、数据库拆表、分表分区,读写分离、redis)

数据库优化 explain select 重点&#xff1a; type类型&#xff0c;rows行数&#xff0c;extra SQL的优化 在写on语句时&#xff0c;将数据量小的表放左边&#xff0c;大表写右边where后面的条件尽可能用索引字段&#xff0c;复合索引时&#xff0c;最好按复合索引顺序写wh…...

44.基于SpringBoot + Vue实现的前后端分离-汽车租赁管理系统(项目 + 论文PPT)

项目介绍 本站是一个B/S模式系统&#xff0c;采用SpringBoot Vue框架&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得基于SpringBoot Vue技术的汽车租赁管理系统设计与实现管理工作…...

2024届数字IC秋招-华为机试-数字芯片-笔试真题和答案(五)(含2022年和2023年)

文章目录 前言1、多比特信号A,时钟域clk_a存在从4’d11到4’d12的变化过程中,若时钟域clk_b直接采用D触发器采样,可能采样到数据是2、Bod由1变成0,Arb会如何变化3、减少片外DRAM的访问,而代之以片内SRAM访问,这样可以降低访问功耗,降低片外DRAM,同时加大片内SRAM能节省…...

Lua语法(四)——协程

参考链接: 系列链接: Lua语法(一) 系列链接: Lua语法(二)——闭包/日期和时间 系列链接: Lua语法(三)——元表与元方法 系列链接: Lua语法(四)——协程 系列链接: Lua语法(五)——垃圾回收 系列链接: Lua语法(六)——面相对象编程 Lua语法 四——协程 简介正文协程coroutine.c…...

LangChain-15 Manage Prompt Size 管理上下文大小,用Agent的方式询问问题,并去百科检索内容,总结后返回

背景描述 这一节内容比较复杂&#xff1a; 涉及到使用工具进行百科的检索&#xff08;有现成的插件&#xff09;有AgentExecutor来帮助我们执行后续由于上下文过大&#xff0c; 我们通过计算num_tokens&#xff0c;来控制我们的上下文 安装依赖 pip install --upgrade --qu…...

OR-TOOL 背包算法

起因&#xff1a;最近公司要发票自动匹配&#xff0c; 比如财务输入10000W块&#xff0c;找到发票中能凑10000的。然后可以快速核销。 废话不多&#xff0c; 一 官方文档 https://developers.google.cn/optimization/pack/knapsack?hlzh-cn 二 POM文件 <!--google 算法包…...

前端h5录音

时隔差不多半个月&#xff0c; 现在才来写这编博客。由于某些原因&#xff0c;我一直没有写&#xff0c;请大家原谅。前段时间开发了一个小模块。模块的主要功能就是有一个录音的功能。也就是说&#xff0c;模仿微信发送语音的功能一样。不多说&#xff0c;直接来一段代码 //自…...

Android Studio 使用Flutter开发第一个Web页面(进行中)

附上Flutter官方文档 1、新建Flutter项目&#xff08;需要勾选web选项&#xff09; 新建项目构成为&#xff1a; 2、配置 Flutter 使用 path 策略 官方文档 在main.dart中&#xff0c;需要导入flutter_web_plugins/url_strategy.dart包&#xff0c;并在main(){}函数中usePath…...

Vue.js组件精讲 第2章 基础:Vue.js组件的三个API:prop、event、slot

如果您已经对 Vue.js 组件的基础用法了如指掌&#xff0c;可以跳过本小节&#xff0c;不过当做复习稍读一下也无妨。 组件的构成 一个再复杂的组件&#xff0c;都是由三部分组成的&#xff1a;prop、event、slot&#xff0c;它们构成了 Vue.js 组件的 API。如果你开发的是一个…...

npm install 报 ERESOLVE unable to resolve dependency tree 异常解决方法

问题 在安装项目依赖时&#xff0c;很大可能会遇到安装不成功的问题&#xff0c;其中有一个很大的原因&#xff0c;可能就是因为你的npm版本导致的。 1.npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree 2.ERESOLVE unable to resolve dependenc…...

RPC还是HTTP

RPC是一个远程调用的通讯协议 RPC要比HTTP快一些 1. HTTP体积大 原因是HTTP协议会带着一堆无用信息 HTTP由三部分组成 请求头 请求行 请求体 这三部分只有请求体是需要的 2. HTTP支持的序列化协议比较少 RPC支持更多轻量级的通讯协议 3. RPC协议支持定制...

Conda 常用命令总结

创建虚拟环境 conda create -n name python[your_version] 激活环境 conda activate name 退出环境 conda deactivate 查看虚拟环境 conda info --envs 删除虚拟环境 conda remove -n name --all 删除所有的安装包及cache(索引缓存、锁定文件、未使用过的包和tar包) …...

Spring MVC 文件上传和下载

文章目录 Spring MVC 中文件上传利用 commons-fileupload 文件上传使用 Servlet 3.1 内置的文件上传功能 Spring MVC 中文件下载 Spring MVC 中文件上传 为了能上传文件&#xff0c;必须将 from 表单的 method 设置为 POST&#xff0c;并将 enctype 设置为 multipart/form-data…...

WSL访问adb usb device

1.Windows上用PowerShell运行&#xff1a; winget install --interactive --exact dorssel.usbipd-win 2.在WSLUbuntu上终端运行&#xff1a; sudo apt install linux-tools-generic hwdata sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-too…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...

机器学习的数学基础:线性模型

线性模型 线性模型的基本形式为&#xff1a; f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法&#xff0c;得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...