mirror of
https://github.com/zed-industries/zed.git
synced 2026-05-24 13:39:08 +00:00
Many editors such as vim and emacs support "modelines", a comment at the beginning of the file that allows the file type to be explicitly specified along with per-file specific settings - The amount of configurations, style and settings mapping cannot be handled in one go, so this opens up a lot of potential improvements. - I left out the possiblity to have "zed" specific modelines for now, but this could be potentially interesting. - Mapping the mode or filetype to zed language names isn't obvious either. We may want to make it configurable. This is my first contribution to zed, be kind. I struggled a bit to find the right place to add those settings. I use a similar approach as done with editorconfig (merge_with_editorconfig). There might be better ways. Closes #4762 Release Notes: - Add basic emacs/vim modeline support. Supersedes #41899, changes: - limit reading to the first and last 1kb - add documentation - more variables handled - add Arc around ModelineSettings to avoid extra cloning - changed the way mode -> language mapping is done, thanks to `modeline_aliases` language config - drop vim ex: support - made "Local Variables:" handling a separate commit, so we can drop it easily - various code style improvements --------- Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
4.3 KiB
4.3 KiB
Modelines
Modelines are special comments at the beginning or end of a file that configure editor settings for that specific file. Zed supports both Vim and Emacs modeline formats, allowing you to specify settings like tab size, indentation style, and file type directly within your files.
Configuration
Use the modeline_lines setting to control how many lines Zed searches for modelines:
{
"modeline_lines": 5
}
Set to 0 to disable modeline parsing entirely.
Emacs
Zed has some compatibility support for Emacs file variables.
Example:
# -*- mode: python; tab-width: 4; indent-tabs-mode: nil; -*-
Supported Emacs Variables
| Variable | Description | Zed Setting |
|---|---|---|
mode |
Major mode/language | Language detection |
tab-width |
Tab display width | tab_size |
fill-column |
Line wrap column | preferred_line_length |
indent-tabs-mode |
nil for spaces, t for tabs |
hard_tabs |
electric-indent-mode |
Auto-indentation | auto_indent |
require-final-newline |
Ensure final newline | ensure_final_newline_on_save |
show-trailing-whitespace |
Show trailing whitespace | show_whitespaces |
Vim
Zed has some compatibility support for Vim modeline.
Example:
# vim: set ft=python ts=4 sw=4 et:
Supported Vim Options
| Option | Aliases | Description | Zed Setting |
|---|---|---|---|
filetype |
ft |
File type/language | Language detection |
tabstop |
ts |
Number of spaces a tab counts for | tab_size |
textwidth |
tw |
Maximum line width | preferred_line_length |
expandtab |
et |
Use spaces instead of tabs | hard_tabs |
noexpandtab |
noet |
Use tabs instead of spaces | hard_tabs |
autoindent |
ai |
Enable auto-indentation | auto_indent |
noautoindent |
noai |
Disable auto-indentation | auto_indent |
endofline |
eol |
Ensure final newline | ensure_final_newline_on_save |
noendofline |
noeol |
Disable final newline | ensure_final_newline_on_save |
Notes
- The first kilobyte of a file is searched for modelines.
- Emacs modelines take precedence over Vim modelines when both are present.
- Modelines in the first few lines take precedence over those at the end of the file.