Saltar a contenido

Plugin Fragmentos

Escribe un prefijo corto, pulsa ++tab++ y se expande en toda una construcción: un bucle for, el esqueleto de una clase, una tabla de Markdown, con el cursor listo en el primer hueco que hay que rellenar. Tab/Shift+Tab recorren los campos y Esc termina. El plugin proporciona además Archivo ▸ Nuevo a partir de una plantilla… para generar archivos enteros.

Expandir un fragmento

  1. Escribe el prefijo de un fragmento (digamos for en un archivo de C++).
  2. Pulsa ++tab++. El prefijo se sustituye por el cuerpo del fragmento —como un solo paso de deshacer— y el primer campo queda seleccionado, listo para sobrescribirlo.
  3. Pulsa ++tab++ para saltar al campo siguiente y ++shift+tab++ para retroceder.
  4. Después del último campo, ++tab++ coloca el cursor en la posición final del fragmento. ++esc++ termina la sesión en cualquier momento y deja el texto tal como se ha escrito.

Si la palabra anterior al cursor no es un prefijo de fragmento, ++tab++ sangra como de costumbre: la tecla solo se toma prestada cuando hay algo que expandir. Mientras la ventana emergente de autocompletado está abierta, ++tab++ pertenece a esa ventana.

Una expansión de varias líneas hereda la sangría de la línea en la que la escribiste, y sus finales de línea siguen la convención del documento (CRLF/LF).

Fragmentos en la ventana emergente de autocompletado

Los prefijos de los fragmentos aparecen también en la ventana emergente de autocompletado, marcados con un pequeño glifo para que destaquen entre las palabras normales. Aceptar un elemento de fragmento lo expande de inmediato e inicia la sesión de campos: lo mismo que escribir el prefijo y pulsar ++tab++.

Qué puede contener un fragmento

Elemento Significado
$1 … $9 Campos de parada, visitados en orden numérico (independientemente de su posición en el cuerpo).
${1:valor} Un campo con contenido inicial, seleccionado al visitarlo.
$0 Dónde acaba el cursor después del último campo (por defecto, el final del fragmento).
$FILENAME El nombre de archivo del documento (vacío en búferes sin guardar).
$DATE La fecha de hoy, en formato ISO (2026-07-06).
$SELECTION El texto seleccionado cuando se activó el fragmento.
$CLIPBOARD El texto actual del portapapeles.
\$ Un signo de dólar literal.

Cualquier cosa mal formada se inserta literalmente en lugar de fallar. Un índice de campo repetido en el cuerpo conserva solo su primera aparición como campo activo.

Gestionar los fragmentos

Preferencias ▸ Fragmentos lista todos los fragmentos: los conjuntos incluidos y los tuyos. Desde ahí puedes:

  • Añadir… un fragmento nuevo: prefijo, ámbito (identificadores de lenguaje separados por comas, como cpp, c; vacío o * se aplica en todas partes), descripción y cuerpo.
  • Editar… tus fragmentos. Editar un fragmento incluido crea una copia tuya, que tiene precedencia sobre el incluido (mismo prefijo y ámbito).
  • Eliminar tus fragmentos (los incluidos no se pueden eliminar; eclípsalos en su lugar).

Se incluyen conjuntos para C/C++, Python, JavaScript/TypeScript y Markdown, además de dos ayudantes universales (date, clip). Tus fragmentos se guardan como JSON en el directorio de datos del plugin (snippets/user.json); también puedes dejar ahí archivos *.json adicionales: el formato coincide con el de los archivos incluidos.

{
    "language": ["cpp", "c"],
    "snippets": [
        {
            "prefix": "for",
            "description": "indexed for loop",
            "body": ["for (${1:int i = 0}; ${2:i < count}; ${3:++i})", "{", "\t$0", "}"]
        }
    ]
}

Los cuerpos son matrices de líneas. Una matriz "scopes" por fragmento anula el valor predeterminado "language" del archivo.

Plantillas de archivo

Archivo ▸ Nuevo a partir de una plantilla… abre un selector de andamiajes de archivo: un fuente de C++ con main, una cabecera con guarda de inclusión, un script de Python, un documento de Markdown, una página HTML. La plantilla elegida se abre como un documento nuevo sin guardar con sus variables ($DATE, $CLIPBOARD, …) ya sustituidas; los elementos de campo se reducen a su texto predeterminado.

Las plantillas también son archivos JSON (templates/*.json, tanto los incluidos como los del directorio de datos del plugin):

{
    "templates": [
        {
            "name": "Python script",
            "suggestedName": "script.py",
            "body": ["#!/usr/bin/env python3", "", ""]
        }
    ]
}

Limitaciones

  • Un índice de campo repetido no se refleja (escribir en el campo 1 no actualiza un segundo $1); las apariciones posteriores son texto normal.
  • Los marcadores anidados (${1:${2:x}}) no están admitidos; el texto interior se toma literalmente.
  • $FILENAME está vacío en los búferes sin guardar.