diff --git a/src/UI/ScriptViews/ScriptEditor.cc b/src/UI/ScriptViews/ScriptEditor.cc
index 9b6bb6f87f2e7d08dbefb7ca72bbbf1be1bed171..5f9d7f5905e8af4da4f2bbbb561818180d15023e 100644
--- a/src/UI/ScriptViews/ScriptEditor.cc
+++ b/src/UI/ScriptViews/ScriptEditor.cc
@@ -3,10 +3,11 @@
 
 #include <QTextCursor>
 #include <QBrush>
+#include <QKeyEvent>
 
 using namespace Vivy;
 
-ScriptEditor::LineNumberArea::LineNumberArea(ScriptEditor *editor)
+ScriptEditor::LineNumberArea::LineNumberArea(ScriptEditor *editor) noexcept
     : QWidget(editor)
     , scriptEditor(editor)
 {
@@ -24,7 +25,7 @@ ScriptEditor::LineNumberArea::paintEvent(QPaintEvent *event) noexcept
     scriptEditor->lineNumberAreaPaintEvent(event);
 }
 
-ScriptEditor::ScriptEditor(QWidget *parent)
+ScriptEditor::ScriptEditor(QWidget *parent) noexcept
     : QPlainTextEdit(parent)
 {
     setStyleSheet(QStringLiteral("* { font-family: \"FiraCode\"; font-size: 10pt}"));
@@ -36,8 +37,22 @@ ScriptEditor::ScriptEditor(QWidget *parent)
     updateLineNumberAreaWidth(0);
 }
 
+void
+ScriptEditor::keyPressEvent(QKeyEvent *e) noexcept
+{
+    if (e->key() == Qt::Key_Tab) {
+        QTextCursor cursor = textCursor();
+        cursor.insertText("    ");
+        e->accept();
+    }
+
+    else {
+        QPlainTextEdit::keyPressEvent(e);
+    }
+}
+
 int
-ScriptEditor::lineNumberAreaWidth()
+ScriptEditor::lineNumberAreaWidth() noexcept
 {
     int digits = 1;
     int max    = qMax(1, blockCount());
@@ -53,13 +68,13 @@ ScriptEditor::lineNumberAreaWidth()
 }
 
 void
-ScriptEditor::updateLineNumberAreaWidth([[maybe_unused]] int newBlockCount)
+ScriptEditor::updateLineNumberAreaWidth([[maybe_unused]] int newBlockCount) noexcept
 {
     setViewportMargins(lineNumberAreaWidth(), 0, 0, 0);
 }
 
 void
-ScriptEditor::updateLineNumberArea(const QRect &rect, int dy)
+ScriptEditor::updateLineNumberArea(const QRect &rect, int dy) noexcept
 {
     if (dy)
         lineNumberArea->scroll(0, dy);
@@ -71,7 +86,7 @@ ScriptEditor::updateLineNumberArea(const QRect &rect, int dy)
 }
 
 void
-ScriptEditor::resizeEvent(QResizeEvent *e)
+ScriptEditor::resizeEvent(QResizeEvent *e) noexcept
 {
     QPlainTextEdit::resizeEvent(e);
     const QRect cr = contentsRect();
@@ -79,7 +94,7 @@ ScriptEditor::resizeEvent(QResizeEvent *e)
 }
 
 void
-ScriptEditor::lineNumberAreaPaintEvent(QPaintEvent *event)
+ScriptEditor::lineNumberAreaPaintEvent(QPaintEvent *event) noexcept
 {
     QPainter painter(lineNumberArea);
     painter.fillRect(event->rect(), QColor::fromRgb(69, 83, 100));
diff --git a/src/UI/ScriptViews/ScriptEditor.hh b/src/UI/ScriptViews/ScriptEditor.hh
index ecb5738ecb788acfad75ca8d10f1164a310dd2eb..076e51fc136dc83f80813f5af2ab8c154b48fbc8 100644
--- a/src/UI/ScriptViews/ScriptEditor.hh
+++ b/src/UI/ScriptViews/ScriptEditor.hh
@@ -17,7 +17,7 @@ class ScriptEditor final : public QPlainTextEdit {
     class LineNumberArea final : public QWidget {
         VIVY_UNMOVABLE_OBJECT(LineNumberArea)
     public:
-        LineNumberArea(ScriptEditor *editor);
+        LineNumberArea(ScriptEditor *editor) noexcept;
 
         QSize sizeHint() const noexcept override;
 
@@ -25,23 +25,24 @@ class ScriptEditor final : public QPlainTextEdit {
         void paintEvent(QPaintEvent *event) noexcept override;
 
     private:
-        ScriptEditor *scriptEditor;
+        ScriptEditor *scriptEditor{ nullptr };
     };
 
 public:
-    ScriptEditor(QWidget *parent = nullptr);
+    ScriptEditor(QWidget *parent) noexcept;
 
-    void lineNumberAreaPaintEvent(QPaintEvent *event);
-    int lineNumberAreaWidth();
+    void lineNumberAreaPaintEvent(QPaintEvent *event) noexcept;
+    int lineNumberAreaWidth() noexcept;
 
 protected:
-    void resizeEvent(QResizeEvent *event) override;
+    void resizeEvent(QResizeEvent *event) noexcept override;
+    void keyPressEvent(QKeyEvent *e) noexcept override;
 
 private slots:
-    void updateLineNumberAreaWidth(int newBlockCount);
-    void updateLineNumberArea(const QRect &rect, int dy);
+    void updateLineNumberAreaWidth(int newBlockCount) noexcept;
+    void updateLineNumberArea(const QRect &rect, int dy) noexcept;
 
 private:
-    QWidget *lineNumberArea;
+    QWidget *lineNumberArea{ nullptr };
 };
 }