Vim-vimrc保存文件自动移除行末尾空格

Vim-vimrc保存文件自动移除行末尾空格

  • 这段代码通过设置 autocmd 和自定义函数,确保每次保存文件时都自动删除文件中的行尾空格,同时不会影响光标和视图的位置。它适用于所有文件类型,并且删除操作不会引入错误,即使没有行尾空格的文件也不会报错。

  • 通过这种方式,开发人员可以确保代码的整洁性,并保持流畅的编辑体验,尤其是在多人合作的项目中,避免无意义的空格差异。

" Automatically remove trailing whitespace on save
autocmd BufWritePre * call PreserveCursorPosition()
function! PreserveCursorPosition()let l:win_view = winsaveview()      " Save the current view position%s/\s\+$//e                         " Remove trailing whitespacecall winrestview(l:win_view)        " Restore the view position
endfunction

这段代码的目标是:在每次保存文件时,自动删除文件中所有行末尾的空格,并确保在执行这一操作后,光标和视图的定位不会受到影响。

我们通过以下步骤实现该目标:

  1. autocmd BufWritePre * :设置自动命令,确保在保存文件之前触发操作。

  2. call PreserveCursorPosition() :调用一个自定义函数 PreserveCursorPosition(),这个函数处理删除行末空格并恢复光标位置。

  3. %s/\s\+$//e:这是一个 sed 风格的替换命令,用于删除行尾的空格。

  4. winsaveview() winrestview() :这两个函数用于保存和恢复视图位置,确保删除空格后光标位置不会被改变。

  5. 设置自动命令(Autocommand)

autocmd BufWritePre * call PreserveCursorPosition()
  • autocmd BufWritePre 是 Vim 中的自动命令,它会在文件写入(保存)之前被触发。BufWritePre 表示在文件内容被写入之前进行操作。
  • * 表示对所有文件类型都应用此命令。
  • call PreserveCursorPosition() 表示调用名为 PreserveCursorPosition 的函数。该函数负责删除行尾空格并恢复光标位置。
  1. 定义 PreserveCursorPosition 函数
function! PreserveCursorPosition()let l:win_view = winsaveview()      " Save the current view position%s/\s\+$//e                         " Remove trailing whitespacecall winrestview(l:win_view)        " Restore the view position
endfunction
  • let l:win_view = winsaveview()

    • winsaveview() 函数用于保存当前窗口的视图状态(例如,光标的位置、屏幕的滚动等)。这一步非常重要,因为我们希望在删除空格之后恢复光标位置和滚动状态,保持用户的编辑体验。
    • l:win_view 是一个局部变量,用于存储视图状态。
  • %s/\s\+$//e

    • 这行是一个 sed 风格的替换命令。%s/ 表示对整个文件进行替换(% 是 Vim 中的范围符号,表示整个文件),/\s\+$/ 是正则表达式,匹配行末的一个或多个空格字符:

      • \s 匹配任何空白字符(包括空格、制表符等)。
      • \+ 表示匹配一个或多个空白字符。
      • $ 表示行尾。
    • // 表示替换为空字符串(即删除这些空格)。

    • e 选项表示在没有匹配到任何内容时不报错,避免可能的错误消息。

  • call winrestview(l:win_view)

    • winrestview() 函数用于恢复先前保存的视图状态。调用此函数后,Vim 会将光标位置、滚动条位置等恢复到删除空格之前的状态。

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

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

相关文章

Occt几何内核快速入门

本文简单介绍 Open Cascade Technology(OCCT),提供了下载地址和文档地址。通过OCCT的测试工具Draw,展示了OCCT的一些功能特性。介绍了OCCT集成开发的演示代码,提供了源代码下载地址和编译过程文件。 一、简介 Open C…

【Docker 08】Compose - 容器编排

🌈 一、Docker Compose 介绍 ⭐ 1. Docker Compose 是什么 Docker Compose 是由 Docker 官方提供的一个用于定义和运行多容器应用的工具,它让用户可以通过一个 YAML 文件(通常是 docker-compose.yml)来配置应用所需要的服务&…

CentOS Stream 9平台部署安装MySQL8.4.1

1、在线下载安装包 [rootlocalhost ~]# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.4.1-1.el9.x86_64.rpm-bundle.tar 2、新建解压文件夹 [rootlocalhost ~]#mkdir /root/sql 3、离线解压安装包安装配置MySQL8 上传安装包到home下 [rootlocalhost ~]#c…

phpstorm无缝切换vscode

要将 PhpStorm 的开发体验无缝迁移到 VS Code,需重点配置插件、快捷键和操作习惯。以下是详细方案: 一、必备插件清单 安装以下插件(VS Code 搜索安装): PHP Intelephense:核心插件(代码补全、…

雨声_锦程_时年

1 炎凉 飘零于三界。 子铭师傅看了几卷笔记,以为我文笔很好,于是我留在石铭公社。 我每日在公社会议厅,高地吹风,悠然笔记。 我喜欢四处旅行。 穿着鞘翅飞翔,风划过耳边。 我渴求所饮的每一滴水,追忆木履留…

微信小程序使用rsa 加解密

jsencrypt.min.js !function(t,e){"object"typeof exports&&"undefined"!typeof module?e(exports):"function"typeof define&&define.amd?define(["exports"],e):e(t.JSEncrypt{})}(this,function(t){"use s…

2025北邮软件工程复习

文章目录 废话知识点总结Part1 软件工程概述Part2 软件需求分析需求介绍需求描述方法 Part3 软件设计方法软件设计的概念与原则软件设计的方法 Part4 程序实现方法Part5 软件测试方法白盒测试黑盒测试 练习题北邮2021~2022期末考北邮2018期末考 考后总结 废话 update on 4.24&…

《Whisper模型版本及下载链接》

Whisper模型版本及下载链接 Whisper是OpenAI开发的语音识别模型,以下按模型规模从小到大排列,包含不同语言版本及通用版本: 1. Tiny系列(轻量级) tiny.en.pt(英文专用): https://…

AWS-SAA 第二部份:安全性和权限管理

我们来深入讲解第二部分:安全性和权限管理,依然用通俗易懂的语言解释。 核心服务 1:IAM(Identity and Access Management) 1. IAM 的核心概念 作用: IAM 是 AWS 的“门卫系统”,用来管理谁可以…

Linux 多种方式实现行转列

目录 一. 前提二. xargs 实现行转列三. paste 实现行转列四. sed 实现行转列 一. 前提 ⏹之前在这下面篇文章中使用sed命令实现了行专列,本篇文章再介绍几种更加简单的方式。 Linux sed案例 👉 20231126-2.log 110120 SPLREQUEST 内容1 AAA memberID1…

Hadoop HDFS存储机制与块大小选择权衡

一、HDFS块存储机制核心原理 1.1 逻辑块 vs 物理存储 HDFS中的 块大小(block size) 是一个逻辑概念,而非物理预分配: #mermaid-svg-GzNjegjSgYrnlcme {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mer…

Unity Addressable使用之AddressableAssetSettings

AddressableAssetSettings 是 Unity Addressable Assets System 的核心配置文件 配置 Manage Groups 用来打开Addressables Groups窗口 Profiles配置 Profile In Use:可以在这选择使用的是哪一套配置文件Manage Profiles:点击它会打开Addressables Gr…

从“询”到“单”的智能跃迁:工业品电商复杂交易流程引擎的架构之道

当传统企业客户在“询盘-报价-议价-审批-合同-下单-履约”的复杂迷宫中艰难穿行,反复沟通、层层审批、定制条款、手工录入……每一步都暗藏延迟与差错的风险,工业品电商平台也承受着转化率低、运营成本高、客户满意度下滑的阵痛。流程冗长、定制化依赖人…

【软考高级系统架构论文】论模型驱动架构设计方法及其应用

论文真题 模型驱动架构设计是一种用于应用系统开发的软件设计方法,以模型构造、模型转换和精化为核心,提供了一套软件设计的指导规范。在模型驱动架构环境下,通过创建出机器可读和高度抽象的模型实现对不同问题域的描述,这些模型独立于实现技术,以标准化的方式储存,利用…

【入门】【例18.2】 孔融让梨

| 时间限制:C/C 1000MS,其他语言 2000MS 内存限制:C/C 64MB,其他语言 128MB 难度:中等 分数:100 OI排行榜得分:12(0.1分数2难度) 出题人:root | 描述 孔融小时候聪明好学&#xff0…

【nature review】原子尺度上光与物质的相互作用

2021 年 6 月,马普固态研究所 Rico Gutzler 等人在《Nature Reviews Physics》期刊发表了题为《Light–matter interaction at atomic scales》的文章,基于扫描隧道显微镜(STM)与光子学结合的方法,研究了光与物质在原子尺度上的相互作用,实验和仿真结果表明光可通过多种机…

7.3.3_1红黑树的定义和性质

知识总览: 为什么要发明红黑树: 二叉排序树BST 红黑树RBT的查找、插入和删除效率基本和AVL平衡二叉树的相同,但是平衡二叉树在插入和删除节点操作时容易被破坏平衡,所以需要消耗大量时间重新调整树的形态(主要时间用在计算平衡因…

微处理器原理与应用篇---冯诺依曼体系结构

冯诺依曼体系结构:计算机的基础设计范式 一、冯诺依曼体系结构的起源与定义 提出背景: 1945 年,匈牙利数学家约翰・冯・诺依曼(John von Neumann)在《EDVAC 报告书的第一份草案》中提出该架构,为现代计算…

vue3 + TypeScript +Element Plus 输入框回车事件 @keydown.enter

在 Vue 3 TypeScript Element Plus 的环境下,keyup.enter.native 和 keydown.enter 在 el-input 组件上的区别主要在于 事件触发时机 和 Vue 3 的事件处理机制。以下是详细对比: 1. keydown.enter(推荐) 触发时机:当…

android gradle的优化

在setting.gradle.kts配置 google()maven("https://maven.aliyun.com/repository/google")// 官方 Maven Central,最通用mavenCentral()// 特殊仓库(4thline,Cling 用)maven {url uri("http://4thline.org/m2&q…