Repository navigation
Language Support
Railscasts works with every Neovim filetype. The languages below have parser-backed fixtures in the project and deliberate Tree-sitter mappings. They extend the original TextMate/Vim theme's intent to modern scopes without adding colors or redefining the palette.
The original theme distinguishes language control flow, callable names, types, quoted text, comments, and preprocessing. Modern grammars expose more precise roles, so Railscasts maps them back to those existing roles:
-
Function (
light_orange) for declarations, calls, and component tags. -
Keyword (
dark_orange) for control flow, directives, and language words. -
Type (
beige_grey) for types and type-like declarations. -
PreProc (
dark_orange) for annotations, decorators, attributes, macros, and other compile-time directives. -
Identifier (
beige_grey) for fields, properties, and markup attributes. -
String (
light_green) for literal and expansion-like data.
These are semantic extensions—not assertions that the original grammars had these Tree-sitter captures. Where a language has no special mapping below, its standard captures inherit Railscasts' generic syntax hierarchy.
Decorators and attributes use PreProc, reflecting their declarative,
pre-execution role. Types use Type. This makes @dataclass visible as a
structural declaration without making it compete with methods or strings.
Functions use Function, while properties use Identifier. JSX/TSX tags also use Function, treating components as callable UI units; this is the only markup-specific choice beyond the original theme's generic HTML treatment.
Types use Type and functions use Function. Struct fields remain ordinary identifiers, preserving Go's intentionally compact, data-oriented appearance.
Types and functions use their normal Type and Function roles. Attributes, macros, and lifetimes use PreProc: all three modify or qualify compilation rather than functioning as ordinary runtime identifiers.
SQL keywords use Keyword and built-in function-like constructs use Function. Tables and columns stay identifiers, so statement structure is clear without turning schema names into a separate color family.
TOML keys use Function. This follows the theme's existing YAML convention: keys name a configuration entry and should be easy to scan, while values retain their normal literal colors.
Dockerfile and Makefile directives use Keyword; function-like build syntax uses Function. Docker and Make variable expansions use String, because they resolve to data injected into commands rather than ordinary source-code variables.
Types use Type and functions use Function. Preprocessor captures retain
the existing PreProc treatment, which closely matches the original
Railscasts Vim theme's #include and macro hierarchy.
Types and functions inherit the generic object-oriented mappings. Java and C# attributes/annotations use PreProc, separating declarative metadata from classes, members, and executable calls.
Component and HTML-like tags use Function, attributes use Identifier, and framework-language keywords use Keyword. This adapts the original HTML-oriented tag distinction for component-driven templates while preserving normal script highlighting within their embedded languages.
Git commit buffers have both Neovim runtime-syntax and Tree-sitter support. The subject is a Title so it remains the first visual anchor; conventional commit types and Git metadata headers use Keyword; trailer tokens use the purple Label role; paths use String; and status entries use the existing added, changed, and deleted diff roles. Branch names are underlined links.
BREAKING CHANGE is intentionally mapped to DiagnosticError. It is a
high-attention compatibility signal rather than ordinary comment text. This is
a modern semantic extension: classic Railscasts predates Conventional Commits,
but its existing diagnostic and diff language expresses the same priority
without adding a new color.
Rendered :Man buffers use Neovim's man syntax. Page headers use Title;
section headings retain the Keyword hierarchy; subheadings, commands, and
option descriptions use Function; references such as nvim(1) are
underlined; and footer metadata is muted as Comment.
Roff/groff source extends that language: request names are PreProc, escaped and special characters are Special, quoted strings are String, and numeric values are Number. Invalid roff spacing and syntax use the existing error role. These choices clarify document structure without introducing colors beyond the Railscasts palette.
Help headlines and headers use Title, help tags are underlined links, and options use Function. Notes and warnings use the existing information and warning diagnostics; deprecated text remains muted. This prioritizes scanning commands and following help links in documentation-dense buffers.
Git configuration sections use Keyword, setting names use Function, and comments, escapes, and invalid escapes follow their established comment, special, and error roles.
Interactive rebase plans visualize the effect of each action: pick is an
addition, reword/squash/fixup are changes, and drop is a deletion.
Commit IDs and labels remain identifiers, while summaries are strings. This
extends Railscasts' diff language to a Git workflow where the action itself is
more important than the command spelling.
Patch index metadata uses PreProc; old and new paths use String; and no-newline, binary, and comparison notices are muted comments. Added, changed, and deleted lines retain Railscasts' stable diff roles.
HCL block types use Type, attribute names and functions use Function, and braces remain delimiters. This follows the configuration-file convention used for TOML and YAML: named settings should be easy to scan, while values keep their normal literal roles.
ERB delimiters and Jinja/Liquid template delimiters use PreProc, clearly separating embedded logic from HTML. Template statements use Keyword; filters, blocks, and helpers use Function; variables and attributes use Identifier; and template comments remain muted. The treatment makes the language boundary visible without assigning templates a new palette.