簡體   English   中英

如何使用查找和替換交換 Visual Studio Code 中的兩個單詞?

[英]How to swap two words in Visual Studio Code with a find and replace?

我正在處理的項目有許多 yaml 文件,其中lat:long:的所有實例都需要交換,因為數據標記不正確。

例如,以下內容:

- lat: "-82.645672"
  long: '44.941747'
  title: "Item 1"
- lat: "-82.645744"
  long: '44.940731'
  title: "Item 2"
- lat: "-82.645744"
  long: '44.940731'
  title: "Item 3"
- lat: "-82.646599"
  long: '44.941441'
  title: "Item 4"

需要看起來像這樣:

- long: "-82.645672"
  lat: '44.941747'
  title: "Item 1"
- long: "-82.645744"
  lat: '44.940731'
  title: "Item 2"
- long: "-82.645744"
  lat: '44.940731'
  title: "Item 3"
- long: "-82.646599"
  lat: '44.941441'
  title: "Item 4"

我正在努力弄清楚如何在全球范圍內交換這兩個詞。 我查看了可用的插件,但它們似乎只適用於您正在編輯的當前文件,並且僅突出顯示幾個單詞時(即像這個https://marketplace.visualstudio.com/items?itemName =davidmart.swap-word )。 我正在研究使用正則表達式作為一種可能的解決方案,但只能找到在同一行重新排序單詞的方法。 是否有可用於查找和替換的正則表達式來交換可應用於項目中所有文件的兩個單詞?

跨文件交換單詞(參見結尾以輕松交換一個文件中的單詞):

試試這個正則表達式:

^(-\s+)(lat)(.*)(\n\s*)(long) // 我這里做了一個小改動

並替換為:

$1$5$3$4$2

請參閱regex101 演示

這在查找/替換小部件中對我來說非常好用,但在跨文件搜索/替換面板中卻不行 為什么? 請參閱此“已解決”問題:問題:正則表達式搜索和替換

該問題似乎表明它已被暫時“修復”,但似乎並非如此。

我打算打開一個新問題,但從本周早些時候發現:問題:當正則表達式包含 newline 時,捕獲組不起作用 所以希望它會在這次迭代中得到修復。

我很高興地報告此錯誤已在 Insiders Build 2019-09-16 中修復 下面是 Insider's Build 中的演示:

用換行符搜索/替換現在正在工作的捕獲組


要僅在單個文件中交換單詞,您可以使用我寫的這個擴展名: Find and Transform和這個鍵綁定:

{
  "key": "alt+s",                  // whatever keybinding you want
  "command": "findInCurrentFile",
  "args": {
    "find": "(lat)|(long)",        
    "replace": "${1:+long}${2:+lat}",  // swap here
    "isRegex": true
  }
}

你沒有理由不能按照你想要的順序交換 3+ 個單詞。

${1:+long}是一個條件,如果有一個捕獲組 1,用文本long替換它。

您只能使用替換功能。 如果您使用的是 Windows,則快捷鍵是 ctrl+h。

  1. ctrl+h , 將lat替換為dummy
  2. ctrl+h , 將long替換為lat
  3. ctrl+h , 將dummy替換為long

使用替換規則擴展

  "replacerules.rules": {
    "Swap lat-long 1": {
      "find": ["lat","long"],
      "replace": ["XYZ","ABC"]
    },
    "Swap lat-long 2": {
      "find": ["XYZ","ABC"],
      "replace": ["long","lat"]
    }
  },
  "replacerules.rulesets": {
    "Swap lat-long": {
        "rules": [
            "Swap lat-long 1",
            "Swap lat-long 2"
        ]
    }
  }

然后執行命令: Replace Rules: Run Ruleset...

老兄。 還記得交換 2 個字符串的算法嗎?

temp=str1
str1=str2
str2=temp
  1. 用“TEMP”替換“long”。
  2. 將“lat”替換為“long”。
  3. 將“TEMP”替換為“lat”。

而已。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM