diff --git a/src/message.c b/src/message.c
index 5379b5b..2f8b2fe 100644
--- a/src/message.c
+++ b/src/message.c
@@ -503,7 +503,7 @@
     p = get_emsg_lnum();
     if (p != NULL)
     {
-	msg_attr(p, hl_attr(HLF_N));
+	msg_attr(p, HL_ATTR(HLF_N));
 	vim_free(p);
 	last_sourcing_lnum = sourcing_lnum;  /* only once for each line */
     }
@@ -690,7 +690,7 @@
 
     emsg_on_display = TRUE;	/* remember there is an error message */
     ++msg_scroll;		/* don't overwrite a previous message */
-    attr = hl_attr(HLF_E);	/* set highlight mode for error messages */
+    attr = HL_ATTR(HLF_E);	/* set highlight mode for error messages */
     if (msg_scrolled != 0)
 	need_wait_return = TRUE;    /* needed in case emsg() is called after
 				     * wait_return has reset need_wait_return
@@ -985,7 +985,7 @@
 	if (s != NULL && *s != NUL)
 	    msg_attr((char_u *)
 		    _("Messages maintainer: Bram Moolenaar <Bram@vim.org>"),
-		    hl_attr(HLF_T));
+		    HL_ATTR(HLF_T));
     }
 
     /* Display what was not skipped. */
@@ -1280,7 +1280,7 @@
     if (got_int)
 	MSG_PUTS(_("Interrupt: "));
 
-    MSG_PUTS_ATTR(_("Press ENTER or type command to continue"), hl_attr(HLF_R));
+    MSG_PUTS_ATTR(_("Press ENTER or type command to continue"), HL_ATTR(HLF_R));
     if (!msg_use_printf())
 	msg_clr_eos();
     p_more = save_p_more;
@@ -1431,7 +1431,7 @@
     void
 msg_home_replace_hl(char_u *fname)
 {
-    msg_home_replace_attr(fname, hl_attr(HLF_D));
+    msg_home_replace_attr(fname, HL_ATTR(HLF_D));
 }
 #endif
 
@@ -1544,7 +1544,7 @@
 		    msg_puts_attr_len(plain_start, (int)(str - plain_start),
 									attr);
 		plain_start = str + mb_l;
-		msg_puts_attr(transchar(c), attr == 0 ? hl_attr(HLF_8) : attr);
+		msg_puts_attr(transchar(c), attr == 0 ? HL_ATTR(HLF_8) : attr);
 		retval += char2cells(c);
 	    }
 	    len -= mb_l - 1;
@@ -1562,7 +1562,7 @@
 		    msg_puts_attr_len(plain_start, (int)(str - plain_start),
 									attr);
 		plain_start = str + 1;
-		msg_puts_attr(s, attr == 0 ? hl_attr(HLF_8) : attr);
+		msg_puts_attr(s, attr == 0 ? HL_ATTR(HLF_8) : attr);
 		retval += (int)STRLEN(s);
 	    }
 	    else
@@ -1623,7 +1623,7 @@
     int		attr;
     int		len;
 
-    attr = hl_attr(HLF_8);
+    attr = HL_ATTR(HLF_8);
     while (*str != NUL)
     {
 	/* Leading and trailing spaces need to be displayed in <> form. */
@@ -1846,13 +1846,13 @@
 		{
 		    c = lcs_tab1;
 		    c_extra = lcs_tab2;
-		    attr = hl_attr(HLF_8);
+		    attr = HL_ATTR(HLF_8);
 		}
 	    }
 	    else if (c == 160 && list && lcs_nbsp != NUL)
 	    {
 		c = lcs_nbsp;
-		attr = hl_attr(HLF_8);
+		attr = HL_ATTR(HLF_8);
 	    }
 	    else if (c == NUL && list && lcs_eol != NUL)
 	    {
@@ -1860,7 +1860,7 @@
 		c_extra = NUL;
 		n_extra = 1;
 		c = lcs_eol;
-		attr = hl_attr(HLF_AT);
+		attr = HL_ATTR(HLF_AT);
 		--s;
 	    }
 	    else if (c != NUL && (n = byte2cells(c)) > 1)
@@ -1871,17 +1871,17 @@
 		c = *p_extra++;
 		/* Use special coloring to be able to distinguish <hex> from
 		 * the same in plain text. */
-		attr = hl_attr(HLF_8);
+		attr = HL_ATTR(HLF_8);
 	    }
 	    else if (c == ' ' && trail != NULL && s > trail)
 	    {
 		c = lcs_trail;
-		attr = hl_attr(HLF_8);
+		attr = HL_ATTR(HLF_8);
 	    }
 	    else if (c == ' ' && list && lcs_space != NUL)
 	    {
 		c = lcs_space;
-		attr = hl_attr(HLF_8);
+		attr = HL_ATTR(HLF_8);
 	    }
 	}
 
@@ -1913,7 +1913,7 @@
 		msg_col == Columns - 1))
     {
 	/* Doesn't fit, print a highlighted '>' to fill it up. */
-	msg_screen_putchar('>', hl_attr(HLF_AT));
+	msg_screen_putchar('>', HL_ATTR(HLF_AT));
 	return s;
     }
 
@@ -1956,7 +1956,7 @@
 msg_puts_title(
     char_u	*s)
 {
-    msg_puts_attr(s, hl_attr(HLF_T));
+    msg_puts_attr(s, HL_ATTR(HLF_T));
 }
 
 /*
@@ -1981,7 +1981,7 @@
     {
 	slen = (room - 3) / 2;
 	msg_outtrans_len_attr(longstr, slen, attr);
-	msg_puts_attr((char_u *)"...", hl_attr(HLF_8));
+	msg_puts_attr((char_u *)"...", HL_ATTR(HLF_8));
     }
     msg_outtrans_len_attr(longstr + len - slen, slen, attr);
 }
@@ -3067,7 +3067,7 @@
     int		attr;
     char_u	*s = (char_u *)_("-- More --");
 
-    attr = hl_attr(HLF_M);
+    attr = HL_ATTR(HLF_M);
     screen_puts(s, (int)Rows - 1, 0, attr);
     if (full)
 	screen_puts((char_u *)
@@ -3420,7 +3420,7 @@
     vim_free(keep_msg);
     keep_msg = NULL;
     if (hl)
-	keep_msg_attr = hl_attr(HLF_W);
+	keep_msg_attr = HL_ATTR(HLF_W);
     else
 	keep_msg_attr = 0;
     if (msg_attr(message, keep_msg_attr) && msg_scrolled == 0)
@@ -3812,7 +3812,7 @@
     /* avoid that 'q' at the more prompt truncates the message here */
     ++confirm_msg_used;
     if (confirm_msg != NULL)
-	msg_puts_attr(confirm_msg, hl_attr(HLF_M));
+	msg_puts_attr(confirm_msg, HL_ATTR(HLF_M));
     --confirm_msg_used;
 }
 
