Capitulo 7: Extensiones y Personalizacion Avanzada en Zed
Capitulo 7: Extensiones y Personalizacion Avanzada
Zed tiene un ecosistema de extensiones basado en Rust compilado a WebAssembly. Aprende a instalar, configurar y crear tus propias extensiones.
Anterior: Capitulo 6: Git, Terminal y Depuracion | Indice: Volver al Indice
Ecosistema de Extensiones
Tipos de Extensiones
Las extensiones en Zed pueden agregar:
- Soporte de lenguajes: Tree-sitter grammars y Language Servers
- Temas: Esquemas de colores para el editor
- Icon themes: Iconos personalizados para el explorador de archivos
- Servidores MCP: Herramientas adicionales para el agente de IA
- Adaptadores de debug: Soporte de depuracion para mas lenguajes
Instalar Extensiones
Abre el panel de extensiones con Cmd+Shift+X (macOS) o Ctrl+Shift+X (Linux/Windows).
- Busca la extension por nombre
- Haz click en “Install”
- La extension se descarga y activa automaticamente
Extensiones Recomendadas
Lenguajes
| Extension | Descripcion |
|---|---|
| Elixir | Soporte completo con ElixirLS |
| Ruby | Ruby LSP para completado y diagnosticos |
| PHP | Intelephense para PHP |
| Svelte | Soporte para archivos .svelte |
| Astro | Soporte para Astro framework |
| Zig | ZLS para desarrollo en Zig |
| Lua | lua-language-server |
| TOML | Taplo para archivos de configuracion |
| Dockerfile | Soporte para Dockerfiles |
| Prisma | Soporte para schemas de Prisma |
Temas
| Extension | Estilo |
|---|---|
| Catppuccin | Paleta pastel en 4 variantes |
| Gruvbox | Tonos calidos retro |
| Rose Pine | Elegante y suave |
| Tokyo Night | Inspirado en Tokyo nocturno |
| Dracula | Oscuro vibrante |
| Nord | Paleta artica |
Utilidades
| Extension | Funcion |
|---|---|
| Editorconfig | Respeta .editorconfig del proyecto |
| SQL | Soporte para queries SQL |
| GraphQL | Resaltado y completado para GraphQL |
Actualizar Extensiones
Las extensiones se actualizan automaticamente. Puedes verificar actualizaciones pendientes en el panel de extensiones.
Desinstalar Extensiones
- Abre el panel de extensiones
- Busca la extension instalada
- Haz click en “Uninstall”
Crear Extensiones Propias
Las extensiones de Zed se escriben en Rust y se compilan a WebAssembly (WASM). El proceso sigue un flujo estandar.
Requisitos
- Rust toolchain instalado (
rustup) - Target de WASM:
rustup target add wasm32-wasip1 - Cuenta de GitHub (para publicar)
Estructura de una Extension
mi-extension/
Cargo.toml
extension.toml
src/
lib.rs
languages/
mi-lenguaje/
config.toml
highlights.scm
injections.scm
LICENSE
extension.toml
Define los metadatos de tu extension:
[extension]
id = "mi-extension"
name = "Mi Extension"
description = "Soporte para mi lenguaje"
version = "0.1.0"
schema_version = 1
authors = ["Tu Nombre <[email protected]>"]
repository = "https://github.com/tu-usuario/mi-extension"
[language_servers.mi-language-server]
language = "MiLenguaje"
Cargo.toml
[package]
name = "mi-extension"
version = "0.1.0"
edition = "2021"
[lib]
crate-type = ["cdylib"]
[dependencies]
zed_extension_api = "0.1.0"
src/lib.rs (Extension Basica)
use zed_extension_api as zed;
struct MiExtension;
impl zed::Extension for MiExtension {
fn new() -> Self {
MiExtension
}
fn language_server_command(
&mut self,
language_server_id: &zed::LanguageServerId,
worktree: &zed::Worktree,
) -> zed::Result<zed::Command> {
Ok(zed::Command {
command: "mi-language-server".to_string(),
args: vec!["--stdio".to_string()],
env: Default::default(),
})
}
}
zed::register_extension!(MiExtension);
Añadir Soporte de Lenguaje
Crea Tree-sitter queries para resaltado de sintaxis en languages/mi-lenguaje/highlights.scm:
; Palabras clave
(keyword) @keyword
; Strings
(string) @string
; Numeros
(number) @number
; Comentarios
(comment) @comment
; Funciones
(function_name) @function
Y el archivo de configuracion languages/mi-lenguaje/config.toml:
name = "MiLenguaje"
grammar = "mi-lenguaje"
path_suffixes = ["ml"]
line_comments = ["// "]
block_comment = ["/*", "*/"]
brackets = [
{ start = "{", end = "}", close = true, newline = true },
{ start = "[", end = "]", close = true, newline = false },
{ start = "(", end = ")", close = true, newline = false },
]
Probar la Extension Localmente
- Construye la extension:
cargo build --target wasm32-wasip1 --release
- Instala localmente desde la paleta de comandos:
- “zed: install dev extension”
- Selecciona la carpeta de tu extension
Publicar la Extension
- Licencia obligatoria: Tu repositorio debe incluir un archivo
LICENSE - Sube tu extension a un repositorio de GitHub
- Haz un fork de zed-industries/extensions
- Añade tu extension como submodulo
- Actualiza
extensions.tomlcon los metadatos - Crea un Pull Request
Personalizacion Avanzada
Configuracion Completa de UI
{
"ui_font_family": "Inter",
"ui_font_size": 15,
"buffer_font_family": "JetBrains Mono",
"buffer_font_size": 14,
"buffer_font_weight": 400,
"buffer_line_height": "comfortable",
"tab_bar": {
"show": true
},
"toolbar": {
"breadcrumbs": true,
"quick_actions": true
},
"scrollbar": {
"show": "auto",
"cursors": true,
"git_diff": true,
"search_results": true,
"diagnostics": true
},
"gutter": {
"line_numbers": true,
"code_actions": true,
"folds": true
},
"indent_guides": {
"enabled": true,
"coloring": "indent_aware"
},
"minimap": {
"enabled": false
}
}
Tareas Personalizadas (Tasks)
Define tareas reutilizables en .zed/tasks.json:
[
{
"label": "Rust: cargo build",
"command": "cargo",
"args": ["build"],
"cwd": "${workspaceFolder}"
},
{
"label": "Rust: cargo test",
"command": "cargo",
"args": ["test"],
"cwd": "${workspaceFolder}"
},
{
"label": "npm: dev server",
"command": "npm",
"args": ["run", "dev"],
"cwd": "${workspaceFolder}"
},
{
"label": "Docker: compose up",
"command": "docker",
"args": ["compose", "up", "-d"],
"cwd": "${workspaceFolder}"
}
]
Ejecuta tareas con la paleta > “task: spawn” y selecciona la tarea.
Snippets
Zed soporta snippets en formato JSON. Crea snippets personalizados en la paleta > “zed: open snippets”:
{
"Rust test function": {
"prefix": "test",
"body": [
"#[test]",
"fn ${1:test_name}() {",
" $0",
"}"
],
"description": "Funcion de test en Rust"
},
"React Component": {
"prefix": "rfc",
"body": [
"export function ${1:ComponentName}() {",
" return (",
" <div>",
" $0",
" </div>",
" );",
"}"
],
"description": "Componente funcional de React"
}
}
Variables de Entorno
Configura variables de entorno para Zed y sus procesos hijos:
{
"terminal": {
"env": {
"EDITOR": "zed --wait",
"RUST_BACKTRACE": "1",
"NODE_ENV": "development"
}
}
}
Comparacion con Otros Editores
| Caracteristica | Zed | VS Code | Neovim |
|---|---|---|---|
| Rendimiento | GPU nativo | Electron | Terminal nativo |
| Extensiones | Rust/WASM | JS/TS | Lua/Vimscript |
| Colaboracion | Nativa CRDT | Extension (Live Share) | Plugin |
| IA | Integrada | Extension (Copilot) | Plugin |
| Depurador | DAP nativo | DAP via extension | Plugin |
| Consumo RAM | Bajo (~200MB) | Alto (~500MB+) | Muy bajo (~50MB) |
Recursos para Desarrolladores de Extensiones
Anterior: Capitulo 6: Git, Terminal y Depuracion | Indice: Volver al Indice