如果由於某種原因,我想選擇性地將camelCase命名的東西轉換爲vim中的下劃線分隔符,我該怎麼做呢?camelCase在vi中的下劃線(m)
目前我發現我可以做一個搜索/s[a-z][A-Z]
和錄製宏添加下劃線,並轉換爲小寫,但我很好奇,如果我可以像做:
%s/([a-z])([A-Z])/\1\u\2/gc
在此先感謝!
編輯:我想出了camelCase的答案(這是我真正需要的),但其他人可以回答如何將CamelCase更改爲camel_case嗎?
如果由於某種原因,我想選擇性地將camelCase命名的東西轉換爲vim中的下劃線分隔符,我該怎麼做呢?camelCase在vi中的下劃線(m)
目前我發現我可以做一個搜索/s[a-z][A-Z]
和錄製宏添加下劃線,並轉換爲小寫,但我很好奇,如果我可以像做:
%s/([a-z])([A-Z])/\1\u\2/gc
在此先感謝!
編輯:我想出了camelCase的答案(這是我真正需要的),但其他人可以回答如何將CamelCase更改爲camel_case嗎?
這是有點長,但似乎做的工作:
:%s/\<\u\|\l\u/\=len(submatch(0)) == 1 ? tolower(submatch(0)) : submatch(0)[0].'_'.tolower(submatch(0)[1])/gc
我想我應該繼續嘗試約5分鐘以上。那麼...如果有人很好奇:
%s/\(\l\)\(\u\)/\1\_\l\2/gc
是否有竅門。
其實,我意識到這適用於camelCase,但不適用於CamelCase,它也可能對某人有用。
對於駝峯情況:
%s#(\<\u\|\l)(\l+)(\u)#\l\1\2_\l\3#gc
提示:正則表達式分隔符可以在我的例子來改變以使其(有點)更清晰易讀。
你可能想嘗試一下Abolish插件添教皇。它提供了幾種從一種風格到另一種風格的快捷方式。例如,從:
MixedCase
打字crc
[助記:強制到駝峯]會給你:
mixedCase
打字crs
[助記:強制到Snake_case]會給你:
mixed_case
和打字crm
[助記符:CoeRce to MixedCase]將帶你回到:
MixedCase
如果您還安裝repeat.vim,那麼您可以通過按下點鍵重複強制命令。
不知道廢除。很酷。 – michaelmichael 2011-03-03 20:33:57
我認爲這是最好的答案。沒有必要重新發明輪子。 – Kelvin 2012-05-17 16:57:13
我有一個用於各種面向開發的處理的API。除其他外,它提供了一些用於在(可配置)約定之間轉換名稱的函數(變量< - >屬性< - > getter < - > setter < - >常量< - >參數< - > ...)和樣式(camelcase (低/高)< - >下劃線)。這些轉換功能已被封裝到一個插件中。
插件+ API可以從這裏獲取:https://github.com/LucHermitte/lh-dev,這個名字轉換任務,它需要lh-vim-lib
可以使用以下方法:
:NameConvert
+您希望的轉換類型(此處爲underscore
)。注意:這個命令支持自動完成。我掀起了一個這樣做的插件。 https://github.com/chiedojohn/vim-case-convert
要轉換的情況下,在視覺模式選擇文本塊和輸入以下內容(自我解釋)中的一個:
:CamelToHyphen :CamelToSnake :HyphenToCamel :HyphenToSnake :SnakeToCamel :SnakeToHyphen
要轉換文檔中的所有occerences然後運行一個
:CamelToHyphenAll :CamelToSnakeAll :HyphenToCamelAll :HyphenToSnakeAll :SnakeToCamelAll :SnakeToHyphen
添加砰(例如:!CamelToHyphen)任何上述命令的旁路下列命令的每次轉換前的提示。 雖然插件不知道文件中變量或其他文本之間的差異,但您可能不想這樣做。
簡單而有效,謝謝你的努力! – Reorx 2017-11-28 12:26:20
爲了不匹配以大寫字母開頭的單詞,我稍微修改了這個正則表達式:'%s/\(\)\ @<!\ <\ u \ | \ l \ u/\ = len(submatch(0 ))== 1? tolower(submatch(0)):submatch(0)[0] .'_'。tolower(submatch(0)[1])/ gc' – 2018-03-01 10:46:48