2013-07-24 1 views
2

J'ai beaucoup utilisé D récemment et j'utilise Vim comme éditeur. Je fais face à du code qui a beaucoup de tests unitaires en ligne et je veux les plier pour que je puisse seulement voir le code. Quelle devrait être l'expression de pli dans Vim pour plier automatiquement ces tests unitaires?Quelle serait l'expression de pli dans Vim pour plier unittests lors de l'utilisation de D?

Voici un exemple de ce qu'ils ressemblent dans le code D:

T getUnixTime(T, A...)(A args) 
{ 
    return to!T(SysTime(DateTime(args)).toUnixTime()); 
} 

unittest 
{ 
    assert(getUnixTime!string(2013, 7, 18, 14, 49, 43) == "1374155383"); 
    assert(getUnixTime!uint(2071, 12, 5, 12, 9, 5) == 3216542945); 
} 

Je voudrais que cela ressemble:

T getUnixTime(T, A...)(A args) 
{ 
    return to!T(SysTime(DateTime(args)).toUnixTime()); 
} 

+-- 5 lines: unittest---------------------------------------------------------- 
+0

Aucune. Je n'ai absolument aucune idée par où commencer! D'où moi demandant de l'aide sur un site Q & A de programmeurs. Vous avez une idée? –

+1

C'est juste que j'ai entendu dire que les questions de style "envoyez-moi le code" sont quelque peu désapprouvées sur Stackoverflow. Je ne peux pas vous aider, mais il y a un tutoriel approfondi sur les expressions de pli dans [LVtHW] (http://learnvimscriptthehardway.stevelosh.com/chapters/49.html) et beaucoup, beaucoup d'autres indices dans [les autres questions] (http://stackoverflow.com/search?q=[vim]+foldexpr) sur ce sujet. – glts

Répondre

2

Vous cherchez un « foldexpression » ou une "commande de pli"?

Supposant votre curseur est sur unittest, vous pouvez faire

zf/{/e 

pour créer un pli.

Faites-en un mappage pour plus de vitesse.

+0

Je suppose une expression de fold. Ce qui suit est ce que j'utilise principalement comme modline mais c'est inadéquat pour le but de OP: vim: fdc = 3: fdm = expr: fde = getline (v \: lnum) = ~ '\ unittest'? '> 1' \: ' 1''. S'il vous plaît montrez-nous comment c'est fait :). –

0

Désolé pour une réponse tardive. Je cherchais les mêmes fonctionnalités, et finalement venu avec ceci:

set foldexpr=DlangUnitTestFold(v:lnum) 

" If the line matches `unittest {`, increase the indentation. 
" Keep the indentation level steady until we encounter a line 
" that only matches `}`: if so, decrease the indentation. 

function! DlangUnitTestFold(lnum) 
    if getline(a:lnum) =~ '^\s*unittest\s{\s*$' 
    return "a1" 
    elseif getline(a:lnum) =~ '^\s*}\s*$' 
    return "s1" 
    else 
    return "=" 
    endif 
endfunction 

Je ne sais pas si elle est trop hacky, mais ça marche pour moi :)

Modifier: Idéalement, vous devriez placer la première ligne dans un setlocal, par exemple:

au BufNewFile,BufRead *.d setlocal foldexpr=DlangUnitTestFold(v:lnum) 
Questions connexes