Red de conocimiento informático - Material del sitio web - Cómo desarrollar complementos de Sublime Text 2

Cómo desarrollar complementos de Sublime Text 2

El modelo de extensión de Sublime Text 2 es muy completo. Puede cambiar el resaltado de sintaxis, la apariencia real del editor y todos los elementos del menú. También puede crear nuevos entornos de compilación, autocompletar, definiciones de idiomas, fragmentos, macros, combinaciones de teclas, combinaciones de mouse y complementos. Todas estas diferentes formas de modificación se implementan a través de archivos organizados en forma de paquetes de software.

El llamado paquete es una carpeta almacenada en el directorio Paquetes. Puede acceder al directorio de paquetes haciendo clic en el menú Preferencias > Explorar paquetes.... También puede empaquetar el paquete en un solo archivo creando un archivo zip y cambiando la extensión a .sublime-package. Discutiremos cómo empaquetar en este tutorial.

Sublime viene con varios paquetes diferentes, la mayoría de los cuales son específicos del idioma, incluidas definiciones de idioma, autocompletado y entornos de compilación. Además de los paquetes específicos del idioma, hay dos paquetes, Predeterminado y Usuario, donde el paquete Predeterminado contiene todas las combinaciones de teclas estándar, definiciones de menú, configuraciones de archivos y un montón de complementos escritos en Python.

El material de referencia de la API de Sublime Text 2 es esencial al escribir complementos. Además, el paquete predeterminado es una excelente referencia para ayudarlo a comprender cómo hacer lo que hicimos nosotros. La mayoría de las funciones del editor se implementan mediante el comando de comandos, y todas las operaciones, excepto escribir caracteres, se pueden completar mediante comandos. Eche un vistazo al menú Preferencias > Combinaciones de teclas - Predeterminado, donde podrá encontrar muchas funciones integradas útiles.

Ahora que la diferencia entre paquete y maternidad es clara, podemos comenzar a escribir nuestro complemento.

Paso 1: Primeros pasos

Sublime tiene una función que genera el esqueleto del código Python necesario para complementos simples. Seleccione Herramientas; el menú Nuevo complemento... abrirá un nuevo archivo con el siguiente estilo:

1

2

3

4

5

importar sublime, sublime_plugin

clase EjemploCommand(sublime_plugin.TextCommand):

def ejecutar(self, edit) :

self.view.insert(edit, 0, "Hello, World!")

Como puede ver, introdujimos dos módulos Sublime Python, lo que nos permite acceder ellos API y crear una nueva clase. Guarde este archivo antes de comenzar a editarlo para crear nuestro propio complemento.

Para guardar este archivo necesitamos crear un paquete para guardarlo. Presione Ctrl s (Windows/Linux) o cmd s (OS X) para guardar el archivo. El cuadro de diálogo para guardar abrirá Userpackage de forma predeterminada. No guarde el archivo aquí, sino cree una nueva carpeta llamada Prefixr.

1

2

3

4

5

6 p>

7

8

9

10

Paquetes/

.

- OCaml/

- Perl/

- PHP/

- Prefixr/

- Python/

- R/

- Rails/

...

Ahora, guarda nuestro archivo en la carpeta Prefixr con el nombre de archivo Prefixr. .py. El nombre del archivo realmente no importa, siempre que tenga la extensión .py. Pero por conveniencia, seguimos usando el nombre del complemento.

El complemento ya está guardado. Podemos intentar ejecutarlo ahora. Escriba ctrl ` para abrir la consola de Sublime, una consola Python con acceso a la API. Ingrese el siguiente código Python para probar nuestro nuevo complemento:

1

view.run_command('example')

Verá Hola mundo insertado en El principio del archivo del complemento. Deshaga el contenido recién insertado antes de continuar con el siguiente paso.

Paso 2: tipos y nombres de comandos

Para los complementos, Sublime proporciona tres tipos de comandos.

El comando de texto proporciona la función de acceder al contenido del archivo o buffer seleccionado a través del objeto Ver

El comando de ventana proporciona el objeto Ventana que hace referencia a la ventana actual

Aplicación El comando no hace referencia a ninguna ventana, archivo o búfer específico y rara vez se utiliza.

Dado que usaremos complementos para manipular el contenido de archivos CSS o buffers, usaremos la clase sublime_plugin.TextCommand como clase base para los comandos Prefixr personalizados. En este punto, necesitamos nombrar el nombre de clase del comando.

En nuestro esqueleto de código, puedes ver la siguiente clase:

1

class EjemploCommand(sublime_plugin.TextCommand):

Cuando ejecutamos el comando, se ejecutará el siguiente código en la consola:

1

view.Run_command('example')run_command('example')

Sublime tomará el nombre de la clase que hereda de cualquier clase sublime_plugin (TextCommand, WindowCommand o ApplicationCommand), eliminará el sufijo Command y utilizará guiones bajos en lugar de nombres en minúsculas.

De esta forma, para crear un comando llamado prefixr, el nombre de la clase debe ser PrefixrCommand. TextCommand):

Paso 3: Seleccionar texto

Una de las funciones más útiles de Sublime es seleccionar varias líneas

Ahora que hemos nombrado oficialmente nuestro complemento, luego podemos comenzar a obtener el CSS del búfer actual y enviarlo a la API de Prefixr.

Como queremos obtener el archivo seleccionado, debemos colocar todas las líneas seleccionadas en nuestro complemento para su procesamiento, no solo la primera línea seleccionada.

Dado que estamos escribiendo comandos de texto, podemos acceder a la vista actual a través de self.view.

El método self() del objeto de vista devolverá una colección iterable de regiones de la selección actual, que podemos escanear usando llaves. Si no puede encontrar una llave, puede expandir la selección a las llaves circundantes para asegurarse de que todo el bloque tenga un prefijo de llave. Si la selección contiene llaves o no, también nos ayudará más adelante con los espacios en blanco y el formato del contenido devuelto por la API de prefijo.

1

2

3

4

5

llaves = Falso

sels = self.view.sel()

para sel en sels:

if self.view.substr(sel).find('{' )! = -1:

llaves = True

Reemplace el código en el método run() del marco con estas líneas de código.

Si no se encuentran corchetes, debemos recorrer cada sección seleccionada, asociando cada sección con un corchete final. Luego, use el comando incorporado expand_selectionl y establezca el parámetro to entre paréntesis para garantizar que se capture todo el contenido de cada bloque CSS.

1

2

3

4

5

6 p>

7

8

si no son llaves:

new_sels = []

para sel en sels:

p>

new_sels.append(self.view.find('\}', sel.end()))

sels.clear()