--Je veux créer un plug-in vim
――Mais je ne comprends pas vimscript! !!
--Si vous entrez MyNameIs <name>
, vous verrez `Hello
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
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.
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>)
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
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