»Aber ich verstehe Vimscript nicht! !!
Wenn Sie "MyNameIs
Verbessern der Implementierung auf Python und Verwenden von Vimscript in Form eines Python-Wrappers
Ich benutze oft "Python" und "Pyfile"
Python und Pyfile sind im Wesentlichen gleich, der Unterschied zwischen der direkten oder der Trennung der Quelle in Dateien. Beispielsweise sind die folgenden zwei Codes identisch
python:
python print('Hello')
pyfile
pyfile hello.py
hello.py
print('Hello')
Beachten Sie, dass sich diese Zeile beim Schreiben von Python bereits in der Python-Welt befindet. Ich schrieb folgendes und war sehr besorgt.
function! hello#hello(name)
python hello_hello(a:name)
endfuncion
Es ist leicht zu verstehen, dass dies ein Fehler ist, wenn man ihn wie folgt umschreibt
function! hello#hello(name)
python << endpython
hello(a:name)
endpython
endfuncion
Es gibt auch einen "Pydo". Wenn Sie pydo <body>
schreiben,
def _vim_pydo(line, linenr):
<body>
Wird erstellt, und der Zeileninhalt wird an die Zeile übergeben, und die Zeilennummer wird für jede Zeile im ausgewählten Bereich an linenr übergeben. Wenn Sie einen Wert zurückgeben, wird die Zeile durch diesen Wert ersetzt. Da es sich jedoch um eine Funktion handelt, müssen Sie return natürlich schreiben. Also ist es ein bisschen lang und Mist. Ruby scheint in der Lage zu sein, so etwas schöner zu schreiben.
Wenn Sie beispielsweise den folgenden Code ausführen, wird die Zeilennummer am Anfang der Zeile im Auswahlbereich eingefügt.
pydo return str(linenr) + line
plugin/
hello.vim
autoload/
hello.vim
src/
hello.py
hello.py
Erstellen Sie eine Funktion, ohne sich um vim kümmern zu müssen.
1/25 Nachschrift: @Thnka wies auf die Möglichkeit von Namenskonflikten hin. Es verschmutzt den globalen Raum und muss vorangestellt oder in die Klasse aufgenommen werden.
src/hello.py
def hello_hello(name):
print('Hello {0}'.format(name))
autoload/hello.vim
Das ist die Leber
Es gibt drei Dinge zu tun.
Laden Sie zunächst das erstellte Python-Skript. Beachten Sie, wie Sie den Pfad des Skripts abrufen.
autoload/hello.vim
pyfile <sfile>:h:h/src/hello.py
Dann importiere vim. Wenn Sie dies nicht tun, können Sie keine Werte austauschen.
autoload/hello.vim
python import vim
Erstellen Sie zum Schluss eine Funktion, die von der Plugin-Seite aufgerufen wird, und drücken Sie die Python-Funktion innerhalb der Funktion. Da sich Python und die fehlende Zeile bereits in der Python-Welt befinden, übergeben Sie die Argumente durch das vim-Modul.
autoload/hello.vim
function! hello#hello(name)
python hello(vim.eval('a:name'))
endfunction
plugin/hello.vim
Dies unterscheidet sich nicht von einem normalen Plug-In. Überbrückung der in Autoload und dem Befehl beschriebenen Funktion
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
Ich habe tatsächlich ein Plug-In namens httpstatus.vim erstellt. Sie können sehen, was der HTTP-Statuscode von Vim bedeutete. Der Text verwendet Pythons BaseHTTPServer.BaseHTTPRequestHandler.responses
.
Ich habe es triumphierend gemacht, aber anscheinend es scheint, dass Mattn es bereits geschafft hat. Außerdem scheint es ausgefeilter zu sein als das, das ich dieses Mal gemacht habe (Sie können nicht nur den Statuscode, sondern auch die Nachricht überprüfen), aber es hat gereicht, weil ich sowieso nur anhand des Statuscodes überprüfen kann.
Recommended Posts