2011-03-03 67 views
21

如果由於某種原因,我想選擇性地將camelCase命名的東西轉換爲vim中的下劃線分隔符,我該怎麼做呢?camelCase在vi中的下劃線(m)

目前我發現我可以做一個搜索/s[a-z][A-Z]和錄製宏添加下劃線,並轉換爲小寫,但我很好奇,如果我可以像做:

%s/([a-z])([A-Z])/\1\u\2/gc

在此先感謝!

編輯:我想出了camelCase的答案(這是我真正需要的),但其他人可以回答如何將CamelCase更改爲camel_case嗎?

回答

18

這是有點長,但似乎做的工作:

:%s/\<\u\|\l\u/\=len(submatch(0)) == 1 ? tolower(submatch(0)) : submatch(0)[0].'_'.tolower(submatch(0)[1])/gc

+0

爲了不匹配以大寫字母開頭的單詞,我稍微修改了這個正則表達式:'%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

9

我想我應該繼續嘗試約5分鐘以上。那麼...如果有人很好奇:

%s/\(\l\)\(\u\)/\1\_\l\2/gc是否有竅門。

其實,我意識到這適用於camelCase,但不適用於CamelCase,它也可能對某人有用。

1

對於駝峯情況:

%s#(\<\u\|\l)(\l+)(\u)#\l\1\2_\l\3#gc

提示:正則表達式分隔符可以在我的例子來改變以使其(有點)更清晰易讀。

36

你可能想嘗試一下Abolish插件添教皇。它提供了幾種從一種風格到另一種風格的快捷方式。例如,從:

MixedCase 

打字crc [助記:強制到駝峯]會給你:

mixedCase 

打字crs [助記:強制到Snake_case]會給你:

mixed_case 

和打字crm [助記符:CoeRce to MixedCase]將帶你回到:

MixedCase 

如果您還安裝repeat.vim,那麼您可以通過按下點鍵重複強制命令。

+0

不知道廢除。很酷。 – michaelmichael 2011-03-03 20:33:57

+0

我認爲這是最好的答案。沒有必要重新發明輪子。 – Kelvin 2012-05-17 16:57:13

0

我有一個用於各種面向開發的處理的API。除其他外,它提供了一些用於在(可配置)約定之間轉換名稱的函數(變量< - >屬性< - > getter < - > setter < - >常量< - >參數< - > ...)和樣式(camelcase (低/高)< - >下劃線)。這些轉換功能已被封裝到一個插件中。

插件+ API可以從這裏獲取:https://github.com/LucHermitte/lh-dev,這個名字轉換任務,它需要lh-vim-lib

可以使用以下方法:

  • 將光標放在符號你想要重命名
  • 類型:NameConvert +您希望的轉換類型(此處爲underscore)。注意:這個命令支持自動完成。
  • etvoilà!
4

我掀起了一個這樣做的插件。 https://github.com/chiedojohn/vim-case-convert

要轉換的情況下,在視覺模式選擇文本塊和輸入以下內容(自我解釋)中的一個:

:CamelToHyphen :CamelToSnake :HyphenToCamel :HyphenToSnake :SnakeToCamel :SnakeToHyphen

要轉換文檔中的所有occerences然後運行一個

:CamelToHyphenAll :CamelToSnakeAll :HyphenToCamelAll :HyphenToSnakeAll :SnakeToCamelAll :SnakeToHyphen

添加砰(例如:!CamelToHyphen)任何上述命令的旁路下列命令的每次轉換前的提示。 雖然插件不知道文件中變量或其他文本之間的差異,但您可能不想這樣做。

+0

簡單而有效,謝謝你的努力! – Reorx 2017-11-28 12:26:20