Schreiben Sie das Vim-Plugin in Python

Was du machen willst

»Aber ich verstehe Vimscript nicht! !!

Was zu machen

Python mit VimScript

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 

Implementierung

Verzeichnisaufbau

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.

  1. Laden Sie das erstellte Python-Skript.
  2. Importieren Sie vim ohne Python
  3. Erstellen Sie eine vom Plugin aufgerufene Funktion und drücken Sie eine Python-Funktion innerhalb der Funktion

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>)

Vollständiges Formular

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

Referenz

Andere

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

Schreiben Sie das Vim-Plugin in Python
Schreiben Sie ein einfaches Vim-Plugin in Python 3
Schreiben Sie eine Dichotomie in Python
Schreiben Sie A * (A-Stern) -Algorithmen in Python
Erstellen Sie ein Plug-In, um Python Doctest mit Vim (1) auszuführen.
Schreiben Sie ein Kreisdiagramm in Python
Schreiben Sie eine Suche mit Tiefenpriorität in Python
Schreiben Sie den Test in die Python-Dokumentzeichenfolge
Schreiben Sie eine kurze Eigenschaftsdefinition in Python
Schreiben Sie ein Caesar-Verschlüsselungsprogramm in Python
Schreiben Sie eine einfache Giermethode in Python
Schreiben Sie Python in MySQL
Teilen Sie Dateien beim Schreiben des Vim-Plugins in Python
Vim-Plug-In, das automatisch Python-Stile formatiert
Machen Sie einen Screenshot in Python
Erstellen Sie ein Wox-Plugin (Python)
Schreiben Sie Pandec-Filter in Python
Erstellen Sie eine Funktion in Python
Erstellen Sie ein Wörterbuch in Python
Schreiben Sie die Beta-Distribution in Python
Schreiben Sie Python in Rstudio (reticulate)
Erstellen Sie ein Lesezeichen in Python
Zeichne ein Herz in Python
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Schreiben Sie in Python ein logarithmisches Histogramm auf die x-Achse
Wahrscheinlich in einer Nishiki-Schlange (Originaltitel: Vielleicht in Python)
Schreiben Sie einen tabellengesteuerten Test in C.
[Python] Verwalten Sie Funktionen in einer Liste
Drücken Sie einen Befehl in Python (Windows)
Schreiben Sie ein JSON-Schema mit Python DSL
Erstellen Sie einen DI-Container mit Python
Formatieren Sie Python-Code automatisch mit Vim
Schreiben Sie einen HTTP / 2-Server in Python
Zeichnen Sie eine Streudiagrammmatrix mit Python
Schreiben Sie die AWS Lambda-Funktion in Python
ABC166 in Python A ~ C Problem
Erstellen Sie eine Binärdatei in Python
Schreiben Sie Selentestcode in Python
Implementierung eines einfachen Algorithmus in Python 2
Schreiben Sie Python-Liste schnell vim Tipps
Löse ABC037 A ~ C mit Python
Führen Sie einen einfachen Algorithmus in Python aus
Zeichnen Sie ein CNN-Diagramm in Python
Erstellen Sie eine zufällige Zeichenfolge in Python
Schreiben Sie einen C-Sprach-Unit-Test in Python
Schreiben Sie ein Batch-Skript mit Python3.5 ~
Beim Schreiben eines Programms in Python
Generieren Sie eine erstklassige Sammlung in Python
Spiralbuch in Python! Python mit einem Spiralbuch! (Kapitel 14 ~)
Löse ABC175 A, B, C mit Python
Verwenden Sie print in Python2 lambda expression
Ein einfacher HTTP-Client, der in Python implementiert ist
Führen Sie eine nicht rekursive Euler-Tour in Python durch
Ich habe ein Pay-Management-Programm in Python erstellt!
Vorsichtsmaßnahmen beim Beizen einer Funktion in Python
Zeigen Sie eine Liste der Alphabete in Python 3 an
Versuchen Sie, ein SYN-Paket in Python zu senden