Ecrire le plugin vim en Python

Chose que tu veux faire

--Je veux créer un plug-in vim

――Mais je ne comprends pas vimscript! !!

Quoi faire

--Si vous entrez MyNameIs <name>, vous verrez `Hello

Python avec VimScript

J'utilise souvent python et pyfile

python et pyfile sont essentiellement les mêmes, la différence entre si la source est écrite directement ou séparée en fichiers. Par exemple, les deux codes suivants sont identiques

python:

python print('Hello')

pyfile

pyfile hello.py

hello.py


print('Hello')

Notez que si vous écrivez python, cette ligne est déjà dans le monde Python. J'ai écrit ce qui suit et j'étais très inquiet.

function! hello#hello(name)
  python hello_hello(a:name)
endfuncion

Il est facile de comprendre que c'est une erreur en la réécrivant comme suit

function! hello#hello(name)
  python << endpython
hello(a:name)
endpython
endfuncion

Il y en a aussi un "pydo". Si vous écrivez pydo <body>,

def _vim_pydo(line, linenr):
  <body>

Est créé, et le contenu de la ligne est passé à la ligne et le numéro de ligne est passé à linr pour chaque ligne de la plage sélectionnée. Si vous retournez une valeur, la ligne sera remplacée par cette valeur, mais comme il s'agit d'une fonction, vous devez bien entendu écrire return. Donc c'est un peu long et merdique. Ruby semble être capable d'écrire ce genre de chose plus magnifiquement.

Par exemple, si vous exécutez le code ci-dessous, le numéro de ligne sera inséré au début de la ligne dans la plage de sélection.

pydo return str(linenr) + line 

la mise en oeuvre

Structure du répertoire

plugin/
  hello.vim
autoload/
  hello.vim
src/
  hello.py

hello.py

Créez une fonction sans vous soucier de vim.

Post-scriptum 1/25: @Thnka a souligné la possibilité de conflits de noms. Il pollue l'espace global et doit être préfixé ou inclus dans la classe.

src/hello.py


def hello_hello(name):
  print('Hello {0}'.format(name))

autoload/hello.vim

C'est le foie

Il y a trois choses à faire.

  1. Chargez le script python créé.
  2. Importez vim sans python
  3. Créez une fonction appelée à partir du plugin et appuyez sur une fonction python à l'intérieur de la fonction

Commencez par charger le script python créé. Notez comment obtenir le chemin du script.

autoload/hello.vim


pyfile <sfile>:h:h/src/hello.py

Puis importez vim. Si vous ne le faites pas, vous ne pourrez pas échanger des valeurs.

autoload/hello.vim


python import vim

Enfin, créez une fonction appelée du côté du plugin et appuyez sur la fonction python à l'intérieur de la fonction. Puisque python et la ligne manquante sont déjà dans le monde python, passez les arguments via le module vim.

autoload/hello.vim


function! hello#hello(name)
  python hello(vim.eval('a:name'))
endfunction

plugin/hello.vim

Ce n'est pas différent d'un plug-in normal. Pontage entre la fonction décrite dans le chargement automatique et la commande

plugin/hello.vim


command! -nargs=1 MyNameIs call hello#hello(<f-args>)

Formulaire rempli

src/hello.py


def hello_hello(name):
  print('Hello {0}'.format(name))

autoload/hello.vim


let s:save_cpo = &cpo
set cpo&vim

pyfile <sfile>:h:h/src/hello.py
python import vim

function! hello#hello(name)
  python hello_hello(vim.eval('a:name'))
endfunction

let &cpo = s:save_cpo
unlet s:save_cpo

plugin/hello.vim


if exists("g:loaded_hello")
  finish
endif
let g:loaded_hello = 1

let s:save_cpo = &cpo
set cpo&vim

command! -nargs=1 MyNameIs call hello#hello(<f-args>)

let &cpo = s:save_cpo
unlet s:save_cpo

référence

Autre

J'ai en fait créé un plug-in appelé httpstatus.vim. Vous pouvez voir ce que signifiait le code d'état HTTP de Vim. Le texte utilise BaseHTTPServer.BaseHTTPRequestHandler.responses de Python.

Je l'ai fait triomphalement, mais apparemment il semble que mattn l'avait déjà fait. De plus, cela semble être plus sophistiqué que celui que j'ai fait cette fois (vous pouvez vérifier non seulement le code d'état mais aussi le message), mais c'était suffisant car je ne peux de toute façon vérifier qu'à partir du code d'état.

Recommended Posts

Ecrire le plugin vim en Python
Ecrire un plugin Vim simple en Python 3
Ecrire une dichotomie en Python
Ecrire des algorithmes A * (A-star) en Python
Créez un plug-in pour exécuter Python Doctest avec Vim (1)
Ecrire un graphique à secteurs en Python
Écrire une recherche de priorité en profondeur en Python
Ecrire le test dans la docstring python
Ecrire une courte définition de propriété en Python
Ecrire un programme de chiffrement Caesar en Python
Ecrire une méthode de cupidité simple en Python
Ecrire Python dans MySQL
Diviser les fichiers lors de l'écriture du plugin vim en python
Plug-in Vim qui formate automatiquement les styles Python
Prendre une capture d'écran en Python
Créer un plugin Wox (Python)
Ecrire des filtres Pandec en Python
Créer une fonction en Python
Créer un dictionnaire en Python
Écrire une distribution bêta en Python
Ecrire python dans Rstudio (réticulé)
Créer un bookmarklet en Python
Dessinez un cœur en Python
Je veux écrire en Python! (2) Écrivons un test
Ecrire un histogramme à l'échelle logarithmique sur l'axe des x en python
Écrivez votre plugin blackbird # 001
Écrivez votre plugin blackbird # 003
Ecrire le plugin vim en Python
Ecrire un plugin Vim simple en Python 3
Probablement dans un serpent Nishiki (Titre original: Peut-être en Python)
Ecrire un test piloté par table en C
[python] Gérer les fonctions dans une liste
Appuyez sur une commande en Python (Windows)
Ecrire un schéma JSON avec Python DSL
Créer un conteneur DI avec Python
Formater automatiquement le code Python avec Vim
Ecrire un serveur HTTP / 2 en Python
Dessinez une matrice de diagramme de dispersion avec python
Ecrire une fonction AWS Lambda en Python
ABC166 en Python A ~ C problème
Créer un fichier binaire en Python
Ecrire le code de test du sélénium en python
Implémentation d'un algorithme simple en Python 2
Écrire une liste de python astuces vim rapides
Résoudre ABC037 A ~ C avec Python
Exécutez un algorithme simple en Python
Dessinez un diagramme CNN en Python
Créer une chaîne aléatoire en Python
Ecrire un test unitaire de langage C en Python
Ecrire un script batch avec Python3.5 ~
Lors de l'écriture d'un programme en Python
Générer une collection de première classe en Python
Livre en spirale en Python! Python avec un livre en spirale! (Chapitre 14 ~)
Résoudre ABC175 A, B, C avec Python
Utiliser l'impression dans l'expression lambda Python2
Un client HTTP simple implémenté en Python
Faites une visite Euler non récursive en Python
J'ai fait un programme de gestion de la paie en Python!
Précautions lors du décapage d'une fonction en python
Afficher une liste d'alphabets en Python 3
Essayez d'envoyer un paquet SYN en Python