[英]TextMate transform to replace single character in matched repetitive group
TL;DR 向我展示了一個通用的 vscode 片段,用於將“/home/me/projects/project/src/Commands/Interfaces/Whatever”轉換為“Commands\Interfaces\Whatever”
大家好,我正在使用 Vscode 並試圖找出文件目錄的簡單轉換以插入 PHP 命名空間。 到目前為止,我無法為這個看似平凡的問題找到一個簡單、通用的解決方案:
乍一看,這似乎很微不足道,對吧? 從...開始
${TM_DIRECTORY/\\//\\\\/}
然后從那里建立起來。 問題是,我只想捕獲文件名的一部分,然后在捕獲的組上轉換斜杠,而不使用固定/最大數量的文件名組件(在這種情況下,有一個丑陋、冗長的解決方案)
以下是正確的方向嗎? 如果是這樣,什么替換字符串會導致組 $1 但斜杠恢復?
${TM_DIRECTORY/.*\\/src(\\/([^\\/]+))+$/??????/}
在此先感謝,一個可以接受的回答是“除非你放松你的要求,否則沒有辦法”,這更像是一個關於正則表達式力量的理論問題。
您可以使用
"${TM_DIRECTORY/^.*?[\\\\\\/]src[\\\\\\/]|([\\\\\\/])/${1:+\\\\}/g}"
請參閱正則表達式演示(在結果字符串的開頭有一個額外的\
,因為無法像 VS Code 中那樣引入條件替換模式)。
詳情:
^
- 字符串的開頭.*?
- 除換行符之外的任何零個或多個字符,盡可能少[\\\/]
- /
或\
字符src
- 您需要刪除子目錄的目錄名稱[\\\/]
- 一個/
或\
字符|
- 或者([\\\/])
- 第 1 組:一個/
或\
字符。 ${1:+\\}
替換意味着我們僅在第 1 組匹配發生時才替換為\
。
請注意,反斜杠需要加倍,最后的g
替換所有出現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.