driver.size_ = command.size();
 
             if (parser.parse() != 0 || !driver.errors_.empty()) {
-                for (CYDriver::Errors::const_iterator i(driver.errors_.begin()); i != driver.errors_.end(); ++i) {
-                    cy::position begin(i->location_.begin);
+                for (CYDriver::Errors::const_iterator error(driver.errors_.begin()); error != driver.errors_.end(); ++error) {
+                    cy::position begin(error->location_.begin);
                     if (begin.line != lines.size() || begin.column - 1 != lines.back().size()) {
-                        std::cerr << i->message_ << std::endl;
+                        cy::position end(error->location_.end);
+                        if (begin.line != lines.size()) {
+                            std::cerr << "  | ";
+                            std::cerr << lines[begin.line - 1] << std::endl;
+                        }
+                        std::cerr << "  | ";
+                        for (size_t i(0); i != begin.column - 1; ++i)
+                            std::cerr << '.';
+                        if (begin.line != end.line)
+                            std::cerr << '^';
+                        else for (size_t i(0), e(end.column - begin.column); i != e; ++i)
+                            std::cerr << '^';
+                        std::cerr << std::endl;
+                        std::cerr << "  | ";
+                        std::cerr << error->message_ << std::endl;
                         add_history(command.c_str());
                         goto restart;
                     }