diff --git a/src/winio.c b/src/winio.c
index 4fbb30a055be8c8138744e00a7f83f814c760013..69efa182e06e7934a73af122d057182f78f7cd16 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -1906,7 +1906,8 @@ char *display_string(const char *buf, size_t column, size_t span, bool isdata)
 	} else if (*buf == '\t') {
 	    /* Show a tab as a visible character, or as as a space. */
 #ifndef NANO_TINY
-	    if (ISSET(WHITESPACE_DISPLAY)) {
+	    if (ISSET(WHITESPACE_DISPLAY) && (index > 0 || !isdata ||
+			!ISSET(SOFTWRAP) || column % tabsize == 0)) {
 		int i = 0;
 
 		while (i < whitespace_len[0])