docs: function replaceBetween(args) {
    const getSourceContent  = args.source ? fs.readFile(path.normalize(args.source), { encoding: 'utf8' }) : getStdin();
    const getTargetContent  = fs.readFile(path.normalize(args.target), { encoding: 'utf8' });
    const commentBegin      = args.comment ? commentTypes[args.comment].begin : args.begin;
    const commentEnd        = args.comment ? commentTypes[args.comment].end : args.end;
  
    const beginTokenPattern = `(${commentBegin}\\s*?${args.token} BEGIN\\s*?${commentEnd}.*?[\\r\\n]+)`;
    const endTokenPattern   = `(${commentBegin}\\s*?${args.token} END\\s*?${commentEnd})`;
    const contentPattern    = '[\\s\\S]*?';
  
    const RX = new RegExp(`${beginTokenPattern}${contentPattern}${endTokenPattern}`, 'm');
  
    return Promise.all([getSourceContent, getTargetContent])
      .then(([sourceContent, targetContent]) => {
        if (!sourceContent) {
          throw new Error('Source content is empty.');
        }
  
        if (!targetContent.match(RX)) {
          const error = `Target file content does not have necessary tokens ${chalk.yellow(`${commentBegin} ${args.token} BEGIN ${commentEnd}`)} `
            + `and ${chalk.yellow(`${commentBegin} ${args.token} END ${commentEnd}`)}.`;
          throw new Error(error);
        }
  
        return targetContent.replace(RX, `$1${sourceContent}$2`);
      })
      .then(newContent => fs.outputFile(path.normalize(args.target), newContent));
  }