Sublime Text 2

Sublime Text 2 est un éditeur de code écrit en python et qu’on peut trouver sur ce lien http://www.sublimetext.com

Il n’est pas gratuit et pas open-source mais il est écrit en python et il possède un gestionnaire de plugin full python.

Il est multiplateforme:

  • windows
  • portable windows
  • linux

une fois installé il faut déterminer ou ce trouve le gestionnaire de configuration et de plugin.

pour cela il faut ouvrir sublime puis lancer le mode console (menu View/ Hide Console) et lancer la commande

print sublime.installed_packages_path()
C:\Users\fraoustin\AppData\Roaming\Sublime Text 2\Installed Packages

mode vim

Un des modes très intéressant est le mode vintage + vintagex.

Cela permet d’avoir le comportant de vim dans sublime avec la possibilité de créer soi-même les plugins

pour activer le mode vintage il suffit de suivre la doc http://www.sublimetext.com/docs/2/vintage.html

Vintage is disabled by default, via the ignored_packages setting.
If you remove "Vintage" from the list of ignored packages, you'll be able to edit with vi keys:

1. Select the Preferences/Settings - Default menu item
2. Edit the ignored_packages setting, changing it from:

        "ignored_packages": ["Vintage"]

    to:

        //"ignored_packages": ["Vintage"]
        "ignored_packages": []

    now save the file.
3. Vintage mode is now enabled - you'll see "INSERT MODE" listed in the status bar

Vintage starts in insert mode by default. This can be changed by adding:

    "vintage_start_in_command_mode": true

to your User Settings.

maintenant vous avez deux mode:

  • INSERT (pour rentrer dans ce mode faire “i”)
  • COMMAND(pour rentrer dans ce mode faire “Esc”)

pour installer le plugin vintagex il suffit de suivre la doc sur http://wbond.net/sublime_packages/package_control/installation

Installation is through the Sublime Text 2 console. This is accessed via the ctrl+` shortcut. Once open, paste the following command into the console:

import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None;rllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler())); open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read()); print Please restart Sublime Text to finish installation'

This command creates the Installed Packages folder for you (if necessary), and then downloads the Package Control.sublime-package into it.

puis il faut via le control package installer le package

lancer la palette sublime via un Crtl+Shit+p

_images/sublime_ecran1.png

sélectionner vitangex,lancer l’installation et redémarrer sublime

_images/sublime_ecran2.png

maintenant un Esc+: permet d’avoir une ligne de commande vim

Modification création d’un theme

les thèmes sont présent dans le dossier Sublime Text 2PackagesColor Scheme - Default

print sublime.installed_packages_path().join('..\Packages\Color Scheme - Default')

il suffit d’ajouter un fichier *.tmTheme dans ce dossier Vous pouvez partir d’un fichier existant pour créer le votre

Par exemple on peut copier Monokai.tmTheme en MonokaiFAO.tmTheme

puis modifier

...
                            <key>background</key>
                            <string>#49483E</string>
...
                            <key>selection</key>
                            <string>#272822</string>
...
            <dict>
                    <key>name</key>
                    <string>Comment</string>
                    <key>scope</key>
                    <string>comment</string>
                    <key>settings</key>
                    <dict>
                            <key>foreground</key>
                            <string>#00FF40</string>
                    </dict>
            </dict>
...
    <key>uuid</key>
    <string>D8D5E82E-3D5B-46B5-B38E-8C841C21346D</string>

Ajouter des commandes dans le mode vim

Le plugin VintageEx ce trouve dans le répertoire Sublime Text 2PackagesVintageEx et est composé principalement de

VintageEx
 |__ ex_commands.py
 |__ ex_search_cmd.py
 |__ setup.py
 |__ test_runner.py
 |__ vintage_ex.py
 |__ vex
      |__ ex_command_parser.py
      |__ ex_error.py
      |__ ex_location.py
      |__ ex_range.py
      |__ shell.py

Pour ajouter des commandes il faut:

  1. ajouter modifier EX_COMMANDS dans le fichier ex_command_parser.py: cela permet d’ajouer la définition de la commande
  2. ajouter la classe qui sera appeler par la commande dans le fichier ex_commands.py

Note

il faut noter que dans EX_COMMANDS on utilise la commande ex_yzz ce qui donne comme classe appelé ExYzz( dérivée de sublime_plugin.*)

Un exemple de mise en place: on souhaite ajouter la commande build qui permet de lancer la fonction build de Sublime

Dans ex_command_parser.py on ajoute:

#ADD BY FAO
EX_COMMANDS[('build', 'build')] = ex_cmd_data(
                                command='ex_build',
                                invocations=(),
                                error_on=()
                                )
#END ADD BY FAO

et dans ex_commands.py on ajoute la classe ExBuild

class ExBuild(sublime_plugin.TextCommand):
    def run(self, edit, line_range=None):
        try:
            w = self.view.window()
            w.run_command('build')
        except Exception as e:
            sublime.status_message("VintageEx: Error while executing command build.")
            return

Il est tout à fait possible de faire passer des paramètres à travers une commande vi. Nous pouvons par exemple créer la commande echo qui réalise:

  • un message comportant les paramètres passés à la commande echo
  • un messageBox comportant les paramètres passés à la commande echo
EX_COMMANDS[('echo', 'echo')] = ex_cmd_data(
                            command='ex_echo',
                            invocations=(
                                    re.compile(r'(?P<params>.+)$'),
                            ),
                            error_on=()
                            )

et dans ex_commands.py on ajoute la classe ExEcho

class ExEcho(sublime_plugin.TextCommand):
    def run(self, edit, line_range=None, params=''):
        w = self.view.window()
        sublime.status_message(params)
        sublime.message_dialog(params)
        return

vous pouvez obtenir la documentation sur l’API en suivant le lien http://www.sublimetext.com/docs/2/api_reference.html

les plugins utilent

il existe une gestion des plugins sur cette adresse http://wbond.net/sublime_packages/package_control/installation

quelques liens utilent:

il faut d’abord installer le plugin package control (cf plus haut ou web pour l’installer)

  • dictionaries
  • Format SQL
  • Indent XML
  • Package Control
  • Python PEP8 Autoformat
  • Sublimerge
  • JsMinifier
  • JSFormat
  • ColorPicker
  • Terminal : il faut placer dans le setting default de l’utilisateur les éléments suivant
{
    // The command to execute for the terminal, leave blank for the OS default
    // On OS X the terminal can be set to iTerm.sh to execute iTerm
    "terminal": "cmd",

    // A list of default parameters to pass to the terminal, this can be
    // overridden by passing the "parameters" key with a list value to the args
    // dict when calling the "open_terminal" or "open_terminal_project_folder"
    // commands
    "parameters": []
}
  • VintageEx
  • plainTasks: gestion d’une todo avec la conf suivante
open_tasks_bullet": "❑"
"before_tasks_bullet_margin": 0,
"date_format": "",//"(%y-%m-%d %H:%M)",
"done_tag": true, // related to @cancelled as well
"line_numbers": true,
"margin": 0,
"tab_size": 4,

et modification de PlainTasks.tmlanguage

<!--<dict>
  <key>match</key>
  <string>^\s*((?!-|\+|✓|✔|❍|❑|■|□|☐|▪|▫|–|—|_|✘)\S).*((?!:\s*).\s*)$</string>
  <key>name</key>
  <string>notes.todo</string>
</dict>-->

on peut aussi modifier le taks.hidden-tmTheme

<dict>
    <key>background</key>
    <string>#FFFFFF</string>

a tester:

  • INI

Trucs et astuces

lancer un fichier bat

Pour pouvoir lancer, via un crtl+b, un fichier bat il suffit de créer un nouveau paramétrage de build

Pour cela il faut créer un nouveau système de build

_images/20121219_01.png

puis dans le fichier ouvert, copier le code suivant

{
    "cmd": ["$file"],
    "working_dir": "$file_path",
    "selector": "source.dosbatch"
}

ajouter des raccourcis clavier

il est possible de modifier les fichiers sublime-keymap (depuis le menu préférence par exemple) et d’y ajouter ces propres raccourcis

{ "keys": ["ctrl+shift+a"], "command": "open_terminal" }

ou

{ "keys": ["j", "j"], "command": "exit_insert_mode",
    "context":
    [
        { "key": "setting.command_mode", "operand": false },
        { "key": "setting.is_widget", "operand": false }
    ]
}

Un dès meilleur exemple est l’ajout du key bing “insert” pour rentrer en mode insertion (commme avec vim).

Il suffit de rajouter dans le fichier Sublime Text 2PackagesVintageDefault.sublime-keymap l’élément suivant

{ "keys": ["insert"], "command": "enter_insert_mode",
  "context":
  [
        {"key": "setting.command_mode"},
        {"key": "selection_empty"}
  ]
},

créer son plugin

Pour créer un plugin on peut regarder ce lien http://net.tutsplus.com/tutorials/python-tutorials/how-to-create-a-sublime-text-2-plugin/

vous pouvez obtenir la documentation sur l’API en suivant le lien http://www.sublimetext.com/docs/2/api_reference.html

@TODO

filtrer les resultats d’un tableau