"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é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.
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