我有類似於<Foobar Name='Hello There'/>
的東西,需要將單引號更改爲雙引號。我試過:s/\'.*\'/\"\0\"
,但最終產生了<Foobar Name="'Hello There'"/>
。替換\0
與\1
只在雙引號內產生一個空字符串 - 是否有一些特殊的語法,我錯過了,我只需要使引號內的找到的字符串(「你好有」)分配給\1
?替換Vim中字符串的引號?
23
A
回答
20
你需要用分組:
:s/\'\(.*\)\'/\"\1\"
這樣的參數1(即\ 1)將對應於任何由\分隔(和\)。
2
您需要圍繞您希望捕捉的表達部分放置括號。
s/\'\(.*\)\'/"\1"/
但是,您可能會遇到無意的匹配問題。你可以簡單地用文件中的雙引號替換任何單引號?
5
除非我失去了一些東西,不會s/\'/"/g
工作?
1
你有正確的想法 - 你想有"\1"
作爲你的替代條款,但你需要首先在捕獲組1中放置「你好」部分(0是整個匹配)。嘗試:
:%/'\(.*\)'/"\1"
13
%s/'\([^']*\)'/"\1"/g
你將要使用的[^']*
代替.*
否則
'apples' are 'red'
將轉換爲:"apples' are 'red"
+1
或者使用'。\ { - }'而不是'。*'。見':help/\ { - '。 – 2012-06-16 10:08:22
48
還有surround.vim,如果你正在尋找經常這樣做。您將使用cs'"
來更改周圍的引號。
6
只是一個供參考 - 以取代單一的所有雙引號,這是正確的正則表達式 - 基於以上
:%s/"\([^"]*\)"/'\1'/g
0
rayd09的例子假設你想這樣做對整個文件...
N模式:
ggvG$ [SHIFT+:]
X模式:
'<,'>/'/" [RET]
相關問題
- 1. vim字符串替換
- 2. PHP的字符串替換引號
- 3. 如何在字符串中替換引號中的符號
- 4. 用一個字符串中的單引號替換雙引號
- 5. 替換雙引號字符串空
- 6. 用xml字符串替換引號
- 7. 用引號替換字符串
- 8. 雙引號字符串替換在C#
- 9. 用字符串替換單引號(Ruby)
- 10. Vim替換內部引號
- 11. 替換字符串中的子字符串,除非字符串在引號內
- 12. 在Javascript字符串中替換雙引號和單引號
- 13. 用Vim中的字符串替換行號顯示
- 14. 替換vim中除括號外的所有字符串
- 15. C++ - 用雙引號將字符串替換爲帶雙引號的字符串
- 16. 替換字符串C#中的引號字符不工作
- 17. 替換字符串中的字符,除了值雙引號
- 18. 替換帶引號的字符串中的所有逗號
- 19. 轉換單引號字符串中雙引號字符串
- 20. 如何用緩衝區中的字符串替換引號中的字符串?
- 21. 替換函數替換單引號字符串
- 22. 替換所有單引號在字符串雙引號 - 常規
- 23. 字符串替換單引號雙引號在C#
- 24. 替換字符串雙引號後引號
- 25. Perl將單引號替換爲雙引號字符串
- 26. ^v與vim替換字符串
- 27. 使用vim替換字符串
- 28. vim:轉義替換字符串(vimscript)
- 29. 在Vim中匹配單引號或雙引號字符串
- 30. 替換URL字符串中的括號
這是我的妥協,但我覺得它不太對,特別是如果在屬性中有單引號。我不認爲這可能發生在XML中,但它可能發生在需要相同解決方案的道路上。 – ravuya 2010-01-20 17:59:29
單引號屬性中的單引號應該是''',雙引號屬性中的雙引號應該是'"'。當然,單引號可能存在於雙引號屬性中,反之亦然...... – ephemient 2010-01-20 18:44:13