var list = require('./extend').console.list(),
  clc = require('cli-color'),
  _ = require('underscore');

module.exports = function(command, args){
  var keys = Object.keys(list);

  if (_.indexOf(keys, command) === -1){
    var maxLen = 0,
      result = '\nUsage: hexo <command>\n\nCommands:\n';

    var helps = [
      ['version', 'Display version'],
      ['help', 'Display help']
    ];

    _.each(list, function(val, key){
      helps.push([key, val.description]);
    });

    helps = helps.sort(function(a, b){
      var orderA = a[0],
        orderB = b[0];

      if (orderA.length >= orderB.length) maxLen = orderA.length;
      else maxLen = orderB.length;

      if (orderA < orderB) return -1;
      else if (orderA > orderB) return 1;
      else return 0;
    });

    _.each(helps, function(item){
      result += '  ' + clc.bold(item[0]);

      for (var i=0; i<maxLen + 3 - item[0].length; i++){
        result += ' ';
      }

      result += item[1] + '\n';
    });

    result += '\nMore info: http://zespia.tw/hexo/docs/cli.html\n';

    console.log(result);
  } else {
    require('./config')(process.cwd(), function(){
      list[command](args);
    });
  }
};
@@ -1,16 +1,17 @@
 var 
-list
+async
  = requi
@@ -18,32 +18,14 @@
 re('
-./extend').console.list(
+async'
 ),%0A 
@@ -127,19 +127,238 @@
 rgs)%7B%0A  
-var
+async.series(%5B%0A    function(next)%7B%0A      require('./config')(process.cwd(), next);%0A    %7D,%0A    function(next)%7B%0A      require('./loader')(next);%0A    %7D%0A  %5D, function()%7B%0A    var list = require('./extend').console.list(),%0A     
  keys = 
@@ -377,16 +377,18 @@
 list);%0A%0A
+  
   if (_.
@@ -419,24 +419,26 @@
 == -1)%7B%0A    
+  
 var maxLen =
@@ -441,16 +441,18 @@
 en = 0,%0A
+  
       re
@@ -501,24 +501,26 @@
 s:%5Cn';%0A%0A    
+ 
+ 
 var helps = 
@@ -521,16 +521,18 @@
 lps = %5B%0A
+  
       %5B'
@@ -561,16 +561,18 @@
 sion'%5D,%0A
+  
       %5B'
@@ -598,20 +598,24 @@
 p'%5D%0A    
+  
 %5D;%0A%0A
+  
     _.ea
@@ -645,24 +645,26 @@
 key)%7B%0A      
+ 
+ 
 helps.push(%5B
@@ -687,29 +687,33 @@
 tion%5D);%0A    
+  
 %7D);%0A%0A
+  
     helps = 
@@ -741,24 +741,26 @@
 , b)%7B%0A      
+  
 var orderA =
@@ -774,16 +774,18 @@
         
+  
 orderB =
@@ -790,32 +790,34 @@
  = b%5B0%5D;%0A%0A      
+ 
+ 
 if (orderA.lengt
@@ -860,16 +860,18 @@
 length;%0A
+  
       el
@@ -900,24 +900,26 @@
 gth;%0A%0A      
+  
 if (orderA %3C
@@ -940,24 +940,26 @@
 n -1;%0A      
+ 
+ 
 else if (ord
@@ -984,24 +984,26 @@
 rn 1;%0A      
+  
 else return 
@@ -1005,16 +1005,18 @@
 turn 0;%0A
+  
     %7D);%0A
@@ -1016,24 +1016,26 @@
    %7D);%0A%0A    
+  
 _.each(helps
@@ -1052,16 +1052,18 @@
 (item)%7B%0A
+  
       re
@@ -1103,16 +1103,18 @@
 %0A%0A      
+ 
+ 
 for (var
@@ -1156,32 +1156,34 @@
 ; i++)%7B%0A        
+  
 result += ' ';%0A 
@@ -1181,16 +1181,18 @@
 += ' ';%0A
+  
       %7D%0A
@@ -1194,24 +1194,26 @@
    %7D%0A%0A      
+  
 result += it
@@ -1226,29 +1226,33 @@
 + '%5Cn';%0A    
+  
 %7D);%0A%0A
+  
     result +
@@ -1312,16 +1312,18 @@
 ';%0A%0A    
+  
 console.
@@ -1335,16 +1335,18 @@
 esult);%0A
+  
   %7D else
@@ -1352,59 +1352,8 @@
 e %7B%0A
-    require('./config')(process.cwd(), function()%7B%0A
     
@@ -1384,13 +1384,13 @@
    %7D
-);
 %0A  %7D
+);
 %0A%7D;

Load config & plugins before console start