2014-09-22 17 views
1

我想添加一個正則表達式ctrlp,時髦的打字稿功能,但是它正在迎頭趕上,如果和開關。 如何修改這個正則表達式不包括是包含{}ifswitch或函數調用的話。VIM正則表達式 - 字不啓動與

\v\s*\w+\s*\(.*\{ 

應該能夠匹配這些

greet() { 
ifExists() { 
public static greet(a: any) { 

,但應排除。 (請注意(中的空格和{)。

if (x) { 
if(x) { 
switch (x) { 
helloworld({a: null}); 

回答

1

這應該更好一點:

\v\s*<(for>|if>|switch>|while>)@!\w+\s*\(.{-}\)\s*\{ 
  • <>字界限。他們將匹配一個詞的左邊和右邊。
  • @!是負前瞻。它將匹配不遵循的內容。
  • {-}是一個懶惰的重複,零次或多次。類似於*,但會盡可能少地匹配。

它將匹配不匹配的關鍵字任何函數調用模式。

它不是完美的,因爲它沒有正確地匹配嵌套的括號。在vim中只有正則表達式是不可能的。例如:

foo(lock(foo) { })