diff --git a/src/os_amiga.c b/src/os_amiga.c
index 6717f0b..0e5c714 100644
--- a/src/os_amiga.c
+++ b/src/os_amiga.c
@@ -677,8 +677,8 @@
 
     if (pwd != NULL && pwd->pw_name && len > 0)
     {
-        vim_strncpy(s, (char_u *)pwd->pw_name, len - 1);
-        return OK;
+	vim_strncpy(s, (char_u *)pwd->pw_name, len - 1);
+	return OK;
     }
 #endif
     *s = NUL;
@@ -897,17 +897,17 @@
     BPTR seg = LoadSeg(name);
 
     if (seg && GetSegListInfoTags(seg, GSLI_Native, NULL, TAG_DONE) !=
-        GetSegListInfoTags(seg, GSLI_68KHUNK, NULL, TAG_DONE))
+	    GetSegListInfoTags(seg, GSLI_68KHUNK, NULL, TAG_DONE))
     {
-        // Test if file permissions allow execution.
-        struct ExamineData *exd = ExamineObjectTags(EX_StringNameInput, name);
+	// Test if file permissions allow execution.
+	struct ExamineData *exd = ExamineObjectTags(EX_StringNameInput, name);
 
-        exe = (exd && !(exd->Protection & EXDF_NO_EXECUTE)) ? 1 : 0;
-        FreeDosObject(DOS_EXAMINEDATA, exd);
+	exe = (exd && !(exd->Protection & EXDF_NO_EXECUTE)) ? 1 : 0;
+	FreeDosObject(DOS_EXAMINEDATA, exd);
     }
     else
     {
-        exe = 0;
+	exe = 0;
     }
 
     UnLoadSeg(seg);
@@ -915,21 +915,21 @@
     // Search for executable in path if applicable.
     if (!exe && use_path)
     {
-        // Save current working dir.
-        BPTR cwd = GetCurrentDir();
-        struct PathNode *head = DupCmdPathList(NULL);
+	// Save current working dir.
+	BPTR cwd = GetCurrentDir();
+	struct PathNode *head = DupCmdPathList(NULL);
 
-        // For each entry, recur to check for executable.
-        for(struct PathNode *tail = head; !exe && tail;
-            tail = (struct PathNode *) BADDR(tail->pn_Next))
-        {
-            SetCurrentDir(tail->pn_Lock);
-            exe = mch_can_exe(name, path, 0);
-        }
+	// For each entry, recur to check for executable.
+	for(struct PathNode *tail = head; !exe && tail;
+		tail = (struct PathNode *) BADDR(tail->pn_Next))
+	{
+	    SetCurrentDir(tail->pn_Lock);
+	    exe = mch_can_exe(name, path, 0);
+	}
 
-        // Go back to where we were.
-        FreeCmdPathList(head);
-        SetCurrentDir(cwd);
+	// Go back to where we were.
+	FreeCmdPathList(head);
+	SetCurrentDir(cwd);
     }
 #endif
     return exe;
@@ -1052,38 +1052,38 @@
 mch_get_shellsize(void)
 {
     if (!term_console)
-        return FAIL;
+	return FAIL;
 
     if (raw_in && raw_out)
     {
-        // Save current console mode.
-        int old_tmode = cur_tmode;
-        char ctrl[] = "\x9b""0 q";
+	// Save current console mode.
+	int old_tmode = cur_tmode;
+	char ctrl[] = "\x9b""0 q";
 
-        // Set RAW mode.
-        mch_settmode(TMODE_RAW);
+	// Set RAW mode.
+	mch_settmode(TMODE_RAW);
 
-        // Write control sequence to console.
-        if (Write(raw_out, ctrl, sizeof(ctrl)) == sizeof(ctrl))
-        {
-            char scan[] = "\x9b""1;1;%d;%d r",
-                 answ[sizeof(scan) + 8] = { '\0' };
+	// Write control sequence to console.
+	if (Write(raw_out, ctrl, sizeof(ctrl)) == sizeof(ctrl))
+	{
+	    char scan[] = "\x9b""1;1;%d;%d r",
+		 answ[sizeof(scan) + 8] = { '\0' };
 
-            // Read return sequence from input.
-            if (Read(raw_in, answ, sizeof(answ) - 1) > 0)
-            {
-                // Parse result and set Vim globals.
-                if (sscanf(answ, scan, &Rows, &Columns) == 2)
-                {
-                    // Restore console mode.
-                    mch_settmode(old_tmode);
-                    return OK;
-                }
-            }
-        }
+	    // Read return sequence from input.
+	    if (Read(raw_in, answ, sizeof(answ) - 1) > 0)
+	    {
+		// Parse result and set Vim globals.
+		if (sscanf(answ, scan, &Rows, &Columns) == 2)
+		{
+		    // Restore console mode.
+		    mch_settmode(old_tmode);
+		    return OK;
+		}
+	    }
+	}
 
-        // Restore console mode.
-        mch_settmode(old_tmode);
+	// Restore console mode.
+	mch_settmode(old_tmode);
     }
 
     // I/O error. Default size fallback.
