Créez un plug-in pour exécuter Python Doctest avec Vim (1)

introduction

"Création du premier plug-in Vim (autopep8) -J'ai essayé de forger / cloner / mettre à jour / pousser le référentiel existant comme pratique pour GitHub" Puis. J'ai expliqué comment personnaliser et utiliser le plug-in Vim existant. Cette fois, je mettrai au défi de créer un plug-in à partir de zéro. C'est un mémorandum pour moi-même écrit par un débutant de Vim, donc c'est une description plutôt déroutante. J'espère que cela aidera tous ceux qui envisagent de créer un plug-in Vim.

J'ai choisi Python Doctest comme sujet. J'ai Python NumPy, SciPy, pandas J'utilise souvent des bibliothèques telles que /). Dans les calculs scientifiques et technologiques utilisant ces bibliothèques, si le codage est incorrect, aucune erreur ne se produira et la réponse incorrecte sera renvoyée en silence. Seule la personne qui l'a fait peut juger si le résultat est correct ou non. Il est très important de vous assurer que votre fonction renvoie toujours le résultat correct. Ne laissez pas une erreur se propager à l'ensemble et conduire à une conclusion complètement fausse. Doctest est utilisé de manière positive au quotidien car il vous permet de vérifier les résultats du calcul juste à côté de la définition de la fonction. Afin de rendre Doctest plus facile à utiliser, j'ai décidé de créer mon propre plug-in.

Dans l'article suivant

On suppose que l'environnement Vim a été intégré. Si vous souhaitez vous y référer, veuillez le remplacer par votre propre environnement.

Création d'un référentiel et mise à jour du fichier de configuration Vim

Créez un nouveau référentiel sur GitHub. Le nom est «vim-greater3». Clonez sous C: \ Users \ daizu \ Documents \ Vim \ plugin. Ensuite, sous le répertoire vim-greater3 nouvellement créé, créez deux répertoires, plugin et ʻautoload`. De plus, créez un fichier vide sous chacun de ces deux répertoires avec le nom «greater3.vim».

Enregistrez ce plug-in dans C: \ Users \ daizu \ vimfiles \ dotfiles \ _vimrc.

_vimrc.vim


NeoBundleLazy 'vim-greater3', {
\   'base': '~/Documents/Vim/plugin',
\   'type': 'nosync',
\   'autoload': {
\       'mappings' : ['<Plug>(greater3)'],
\   }
\}

Ensuite, enregistrez le mappage de clé dans C: \ Users \ daizu \ vimfiles \ after \ ftplugin \ python.vim.

ftplugin\python.vim


nmap <buffer> <F10> <Plug>(greater3)

Démarrez Vim et essayez-le en tant que : nmap. Je ne trouve pas le mappage des touches F10. Ensuite, ouvrez le fichier Python approprié et tapez : nmap

python


n <F10>    @<Plug>(greater3)

A été trouvé. Jusqu'à présent, cela semble bien se passer. Maintenant, essayez d'appuyer sur la touche F10. Rien ne s'est passé. Je m'attendais à recevoir une sorte de message d'erreur, mais rien n'est sorti.

Écrivons un plug-in. Écrivez le contenu suivant dans C: \ Users \ daizu \ Documents \ Vim \ plugin \ vim-greater3 \ plugin \ greater3.vim et enregistrez-le.

plugin\greater3.vim


if exists('g:loaded_greater3')
  finish
endif

nnoremap <silent> <Plug>(greater3) :<C-U>echo 'greater3'<CR>

let g:loaded_greater3 = 1

Afin de refléter immédiatement les modifications que vous venez de faire, lancez un autre Vim séparément de l'édition de Vim plugin \ greater3.vim (il en va de même pour l'exemple ci-dessous). Lorsque j'ouvre un fichier Python et que j'appuie sur la touche F10, Greater3 est maintenant affiché sur la ligne de commande. Il est également facile d'exécuter des fichiers Python avec QuickRun:

a.py


print('greater3!!!')

plugin\greater3.vim


nnoremap <silent> <Plug>(greater3) :<C-U>QuickRun<CR>

Enfin, j'écrirai VimScript.

plugin\greater3.vim


nnoremap <silent> <Plug>(greater3) :<C-U>call greater3#run()<CR>

Appuyez sur F10 dans le fichier Python pour accéder à la ligne de commande

python


E117: Unknown function: greater3#run

Il sera affiché. Comme prévu. Nous allons créer le plug-in réel. Dans Vim, si vous essayez d'appeler une fonction non définie, elle recherchera dans le répertoire ʻautoload. Écrivez le contenu suivant dans C: \ Users \ daizu \ Documents \ Vim \ plugin \ vim-greater3 \ autoload \ greater3.vim` et enregistrez-le.

autoload\greater3.vim


function! greater3#run()
  let l = line('.')
  echo l
endfunction

Le numéro de ligne du curseur est maintenant affiché avec la touche F10.

Lions VimScript et Python. "Création du premier plug-in Vim (autopep8) -J'ai essayé de fork / clone / update / push le référentiel existant pour pratiquer GitHub" C'est une pratique de ce que j'ai appris. Réécrivez ʻautoload \ supérieur3.vim` avec le contenu suivant afin que Python puisse être utilisé dans VimScript.

autoload\greater3.vim


function! greater3#run()
  let l = line('.')
py3 << EOF
l = int(vim.eval('l'))
vim.command('echo {}'.format(l))
EOF
endfunction

function! s:init_py_modules()
py3 << EOF
import vim
vim.command('echo "init_py_modules"')
EOF
endfunction

call s:init_py_modules()

Ouvrez le fichier Python et appuyez sur F10

python


init_py_modules
1

Il sera affiché. 1 est dû au fait que le curseur actuel se trouve au début du tampon. Vous pouvez voir que Vim est accessible depuis Python avec la fonction vim.eval et la fonction vim.command du module vim de Python. Il semble que vous puissiez faire différentes choses avec cette fonction. Maintenant, essayez à nouveau d'appuyer sur la touche F10. Puis,

python


1

est devenu. La fonction s: init_py_modules est exécutée uniquement lorsque ʻautoload \ greater3.vim est chargé, donc ʻinit_py_modules n'est pas affiché avec la deuxième touche F10. C'est comme prévu. Ce qui m'a surpris, c'est que même si je n'ai pas importé le module vim dans la fonction greater3 # run, j'ai pu accéder au module vim lors de la deuxième exécution sans aucun problème. En d'autres termes, la première importation du module vim avec la touche F10 reste valide, en d'autres termes, la session Python se poursuit. Cela m'a donné l'espoir de créer un plug-in Doctest.

La raison en est que le fichier suivant est exécuté par QuickRun. Il s'agit d'une exportation typique dans un programme Python qui effectue des calculs scientifiques et technologiques.

a.py


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

Cela prendra un certain temps entre le moment où vous définissez : QuickRun et la fin de l'exécution. Cela prend à peu près le même temps après la deuxième fois. Cela est dû au fait que la bibliothèque est importée à chaque exécution. Maintenant, essayons le plug-in. Réécrivez ʻautoload \ supérieur3.vim` avec le contenu suivant.

autoload\greater3.vim


function! greater3#run()
py3 << EOF
vim.command('echo {:.6f}'.format(np.pi))
EOF
endfunction

function! s:init_py_modules()
py3 << EOF
import vim
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
vim.command('echo "init_py_modules"')
EOF
endfunction

call s:init_py_modules()

La première exécution prend à peu près le même temps que QuickRun, mais la deuxième et les suivantes renvoient des résultats instantanés. génial. Je ne veux pas attendre la fin de l'importation de la bibliothèque à chaque fois que je fais un Doctest.

Résumé

J'essaie de créer un plug-in Vim dans le but d'exécuter confortablement Python Doctest avec Vim. Avant d'entrer dans le sujet principal, ça s'allonge, je vais donc m'arrêter ici. Je vais résumer cet article.

La prochaine fois, nous créerons un module Python qui exécute Doctest.

Recommended Posts

Créer un plugin pour exécuter Python Doctest sur Vim (2)
Créez un plug-in pour exécuter Python Doctest avec Vim (1)
Ecrire le plugin vim en Python
Ecrire un plugin Vim simple en Python 3
Créez un environnement de test Vim + Python en 1 minute
Je veux créer une fenêtre avec Python
Comment créer un fichier JSON en Python
Créer un plugin Wox (Python)
Créez des raccourcis pour exécuter des fichiers Python sur le terminal avec VScode
Créer une fonction en Python
Créer un dictionnaire en Python
Un mémorandum pour exécuter un script python dans un fichier bat
Créez un plugin qui vous permet de rechercher les onglets Sublime Text 3 en Python
Créer un conteneur DI avec Python
Créer un fichier binaire en Python
5 façons de créer un chatbot Python
Exécutez un algorithme simple en Python
Créer une chaîne aléatoire en Python
Créer une application GUI simple en Python
Exécuter l'interpréteur Python dans le script
Comment obtenir stacktrace en python
[GPS] Créer un fichier kml avec Python
Comment exécuter des scripts Maya Python
J'ai créé un plugin pour générer une table Markdown à partir de csv avec Vim
[Python] [Word] [python-docx] Essayez de créer un modèle de phrase de mot en Python en utilisant python-docx
[Python] Compréhension de liste Différentes façons de créer une liste
Modifier Excel à partir de Python pour créer un tableau croisé dynamique
Créer un fichier GIF en utilisant Pillow en Python
Calculons en fait le problème statistique avec Python
Comment effacer un taple dans une liste (Python)
Comment incorporer des variables dans des chaînes python
Créer un graphique de distribution normale standard en Python
Créer un environnement virtuel avec conda avec Python
Une manière intelligente de chronométrer le traitement avec Python
Étapes pour développer une application Web en Python
Étapes pour créer un bot Twitter avec Python
Pour ajouter un module à python que vous mettez dans Julialang
Créer un modèle d'investissement dynamique simple en Python
Comment notifier les canaux Discord en Python
Diviser les fichiers lors de l'écriture du plugin vim en python
Je souhaite créer un type d'implémentation pouvant être branché
Créer une nouvelle page en confluence avec Python
Plug-in Vim qui formate automatiquement les styles Python
Créer un objet datetime à partir d'une chaîne en Python (Python 3.3)
Comment exécuter LeapMotion avec Python non-Apple
Créer un package contenant des commandes globales en Python
[Python] Comment dessiner un histogramme avec Matplotlib
Comment créer une API Rest dans Django
Créez un fichier MIDI en Python en utilisant pretty_midi
Créer un modèle d'antenne cadre en Python dans KiCad
[Docker] Créez un environnement jupyterLab (python) en 3 minutes!
Créer un module Python
Créer Spatia Lite en Python