← Volver al listado de tecnologías

Capitulo 7: Extensiones y Personalizacion Avanzada en Zed

Por: SiempreListo
zededitorextensioneswasmrustpersonalizacion

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:

Instalar Extensiones

Abre el panel de extensiones con Cmd+Shift+X (macOS) o Ctrl+Shift+X (Linux/Windows).

  1. Busca la extension por nombre
  2. Haz click en “Install”
  3. La extension se descarga y activa automaticamente

Extensiones Recomendadas

Lenguajes

ExtensionDescripcion
ElixirSoporte completo con ElixirLS
RubyRuby LSP para completado y diagnosticos
PHPIntelephense para PHP
SvelteSoporte para archivos .svelte
AstroSoporte para Astro framework
ZigZLS para desarrollo en Zig
Lualua-language-server
TOMLTaplo para archivos de configuracion
DockerfileSoporte para Dockerfiles
PrismaSoporte para schemas de Prisma

Temas

ExtensionEstilo
CatppuccinPaleta pastel en 4 variantes
GruvboxTonos calidos retro
Rose PineElegante y suave
Tokyo NightInspirado en Tokyo nocturno
DraculaOscuro vibrante
NordPaleta artica

Utilidades

ExtensionFuncion
EditorconfigRespeta .editorconfig del proyecto
SQLSoporte para queries SQL
GraphQLResaltado y completado para GraphQL

Actualizar Extensiones

Las extensiones se actualizan automaticamente. Puedes verificar actualizaciones pendientes en el panel de extensiones.

Desinstalar Extensiones

  1. Abre el panel de extensiones
  2. Busca la extension instalada
  3. 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

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

  1. Construye la extension:
cargo build --target wasm32-wasip1 --release
  1. Instala localmente desde la paleta de comandos:
    • “zed: install dev extension”
    • Selecciona la carpeta de tu extension

Publicar la Extension

  1. Licencia obligatoria: Tu repositorio debe incluir un archivo LICENSE
  2. Sube tu extension a un repositorio de GitHub
  3. Haz un fork de zed-industries/extensions
  4. Añade tu extension como submodulo
  5. Actualiza extensions.toml con los metadatos
  6. 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

CaracteristicaZedVS CodeNeovim
RendimientoGPU nativoElectronTerminal nativo
ExtensionesRust/WASMJS/TSLua/Vimscript
ColaboracionNativa CRDTExtension (Live Share)Plugin
IAIntegradaExtension (Copilot)Plugin
DepuradorDAP nativoDAP via extensionPlugin
Consumo RAMBajo (~200MB)Alto (~500MB+)Muy bajo (~50MB)

Recursos para Desarrolladores de Extensiones


Anterior: Capitulo 6: Git, Terminal y Depuracion | Indice: Volver al Indice