VT (Vertical Tab) is ASCII code point 11 (0x0B), Unicode U+000B, and a control character. If you're here, you probably found it hiding inside pasted text or a data file and something broke — that's the main way developers encounter VT today. It was originally meant to advance the cursor downward to the next vertical tab stop, but almost nothing honors that behavior anymore. In code, `\v` is recognized as an escape sequence in C, JavaScript, and most languages, and `isspace('\v')` returns true, but printing it to a terminal does nothing useful. Its real danger is as an invisible gremlin: it can slip into strings and break parsers that only expect `\n` or `\r\n` as line endings. Some linters flag it on sight. If you're cleaning data, strip it with the rest of the non-standard whitespace. On line printers, vertical tab stops were physically configurable — operators could skip to preset rows on a form, useful for printing invoices where fields always appeared at fixed vertical offsets. The row counterpart to horizontal tab's column positioning. UTF-8 encodes it as a single byte 0x0B, identical to its ASCII value. Unicode classifies it as Cc (Control, Other) under the official name LINE TABULATION. Easily confused with HT (U+0009) or mistaken for LF (U+000A), but unlike LF it does not universally signal a new line.
const char *s = "row1\vrow2"; // VT via \vsize_t pos = strcspn(s, "\v"); // find first VT// pos indexes where vertical-tab separator occurs
VT (ASCII 11) is like a regular tab but vertical — it advances the print position down to the next vertical tab stop instead of across. On old line printers, vertical tab stops could be physically set with paper tape loops, enabling fast form layouts.
Barely. Most terminals ignore it or treat it as a line feed. You'll occasionally see it in mainframe data, legacy printer control, or obscure file formats. It's considered whitespace by most regex engines and programming languages, which is about its only modern relevance.
The \v escape sequence (for VT, ASCII 11) persists in C, Python, JavaScript, and other languages because it's part of the ASCII standard and removing it would break backward compatibility. It's a fossil — technically alive, practically unused.
Occasionally. Since VT is classified as whitespace by functions like isspace() and regex \s, it can match unexpectedly in whitespace-sensitive parsing. If your code splits on 'any whitespace' and encounters VT in data, it'll split there — which may not be what you intended.