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
英文地址,請注明出處:http://en.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…