Erstellen Sie ein Plug-In, um Python Doctest mit Vim (1) auszuführen.

Einführung

"Erstellen des ersten Vim-Plug-Ins (autopep8) - Ich habe versucht, das vorhandene Repository als Übung für GitHub zu forken / klonen / aktualisieren / pushen" Dann. Ich erklärte, wie das vorhandene Vim-Plug-In angepasst und verwendet wird. Dieses Mal werde ich herausfordern, ein Plug-In von Grund auf neu zu erstellen. Es ist ein Memorandum für mich, das von einem Vim-Anfänger geschrieben wurde, daher ist es eine ziemlich verwirrende Beschreibung. Ich hoffe, es hilft jedem, der daran denkt, ein Vim-Plug-In zu erstellen.

Ich habe Python Doctest als Thema gewählt. Ich habe Python NumPy, SciPy, pandas Ich benutze oft Bibliotheken wie /). Bei wissenschaftlichen und technologischen Berechnungen mit diesen Bibliotheken tritt bei falscher Codierung kein Fehler auf und die falsche Antwort wird stillschweigend zurückgegeben. Nur die Person, die es gemacht hat, kann beurteilen, ob das Ergebnis korrekt ist oder nicht. Es ist sehr wichtig sicherzustellen, dass Ihre Funktion immer das richtige Ergebnis zurückgibt. Lassen Sie nicht zu, dass sich ein Fehler auf das Ganze ausbreitet und zu einer völlig falschen Schlussfolgerung führt. Doctest wird täglich positiv verwendet, da Sie damit die Berechnungsergebnisse direkt neben der Funktionsdefinition überprüfen können. Um die Verwendung von Doctest zu vereinfachen, habe ich beschlossen, ein eigenes Plug-In zu erstellen.

Im folgenden Artikel

Es wird davon ausgegangen, dass die Vim-Umgebung integriert wurde. Wenn Sie darauf verweisen möchten, ersetzen Sie es bitte durch Ihre eigene Umgebung.

Erstellen eines Repositorys und Aktualisieren der Vim-Konfigurationsdatei

Erstellen Sie ein neues Repository auf GitHub. Der Name ist "vim-größer3". Klonen Sie unter "C: \ Users \ daizu \ Documents \ Vim \ plugin". Erstellen Sie dann unter dem neu erstellten Verzeichnis "vim-Greater3" zwei Verzeichnisse, "Plugin" und "Autoload". Erstellen Sie außerdem unter jedem dieser beiden Verzeichnisse eine leere Datei mit dem Namen "Greater3.vim".

Registrieren Sie dieses Plug-In unter "C: \ Users \ daizu \ vimfiles \ dotfiles \ _vimrc".

_vimrc.vim


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

Registrieren Sie als Nächstes die Schlüsselzuordnung in "C: \ Users \ daizu \ vimfiles \ after \ ftplugin \ python.vim".

ftplugin\python.vim


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

Starten Sie Vim und versuchen Sie es als : nmap. Ich kann die F10-Tastenbelegung nicht finden. Öffnen Sie dann die entsprechende Python-Datei und geben Sie : nmap ein

python


n <F10>    @<Plug>(greater3)

Wurde gefunden. Bisher scheint es gut zu laufen. Versuchen Sie nun, die Taste F10 zu drücken. Nichts ist passiert. Ich hatte erwartet, eine Fehlermeldung zu erhalten, aber es kam nichts heraus.

Schreiben wir ein Plug-In. Schreiben Sie den folgenden Inhalt in C: \ Benutzer \ daizu \ Dokumente \ Vim \ plugin \ vim-Greater3 \ plugin \ Greater3.vim und speichern Sie.

plugin\greater3.vim


if exists('g:loaded_greater3')
  finish
endif

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

let g:loaded_greater3 = 1

Um die soeben vorgenommenen Änderungen sofort wiederzugeben, starten Sie ein anderes Vim getrennt vom Vim-Bearbeitungs-Plugin \ Greater3.vim (dasselbe gilt für das folgende Beispiel). Wenn ich eine Python-Datei öffne und die Taste F10 drücke, wird jetzt größer3 in der Befehlszeile angezeigt. Es ist auch einfach, Python-Dateien mit QuickRun auszuführen:

a.py


print('greater3!!!')

plugin\greater3.vim


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

Schließlich werde ich VimScript schreiben.

plugin\greater3.vim


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

Drücken Sie F10 in der Python-Datei, um zur Befehlszeile zu gelangen

python


E117: Unknown function: greater3#run

Es wird angezeigt. Wie erwartet. Wir werden das eigentliche Plug-In erstellen. Wenn Sie in Vim versuchen, eine undefinierte Funktion aufzurufen, wird im Verzeichnis "Autoload" gesucht. Schreiben Sie den folgenden Inhalt in C: \ Benutzer \ daizu \ Dokumente \ Vim \ plugin \ vim-Greater3 \ autoload \ Greater3.vim und speichern Sie.

autoload\greater3.vim


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

Die Zeilennummer des Cursors wird jetzt mit der Taste F10 angezeigt.

Lassen Sie uns VimScript und Python verknüpfen. "Erstellen des ersten Vim-Plug-Ins (autopep8) - Ich habe versucht, das vorhandene Repository als Übung für GitHub zu forken / klonen / aktualisieren / pushen" Es ist eine Übung dessen, was ich gelernt habe. Schreiben Sie autoload \ Greater3.vim auf den folgenden Inhalt um, damit Python in VimScript verwendet werden kann.

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

Öffnen Sie die Python-Datei und drücken Sie F10

python


init_py_modules
1

Es wird angezeigt. 1 liegt daran, dass sich der aktuelle Cursor am Anfang des Puffers befindet. Sie können sehen, dass auf Vim von Python aus mit der Funktion vim.eval und vim.command des Moduls vim von Python zugegriffen werden kann. Es scheint, dass Sie mit dieser Funktion verschiedene Dinge tun können. Versuchen Sie nun erneut, die Taste F10 zu drücken. Dann,

python


1

ist geworden. Die Funktion s: init_py_modules wird nur ausgeführt, wenn autoload \ Greater3.vim geladen ist, sodass die Funktion init_py_modules nicht mit der zweiten Taste F10 angezeigt wird. Dies ist wie erwartet. Was mich überraschte, war, dass ich, obwohl ich das vim-Modul nicht in der Greater3 # run -Funktion importiert hatte, beim zweiten Lauf problemlos auf das vim -Modul zugreifen konnte. Mit anderen Worten, der erste Import des vim Moduls mit der Taste F10 bleibt gültig, mit anderen Worten, die Python-Sitzung wird fortgesetzt. Dies hat mir Hoffnung gegeben, ein Doctest-Plug-In zu erstellen.

Der Grund dafür ist, dass die folgende Datei von QuickRun ausgeführt wird. Dies ist ein typischer Export in ein Python-Programm, das wissenschaftliche und technologische Berechnungen durchführt.

a.py


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

Von der Einstellung von : QuickRun bis zum Ende der Ausführung dauert es einige Zeit. Nach dem zweiten Mal dauert es ungefähr genauso lange. Dies liegt daran, dass die Bibliothek bei jeder Ausführung importiert wird. Probieren wir jetzt das Plug-In aus. Schreiben Sie autoload \ Greater3.vim auf den folgenden Inhalt um.

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

Der erste Lauf dauert ungefähr genauso lange wie QuickRun, aber der zweite und die nachfolgenden Läufe liefern sofortige Ergebnisse. groß. Ich möchte nicht jedes Mal warten, bis der Import der Bibliothek abgeschlossen ist, wenn ich einen Doctest durchführe.

Zusammenfassung

Ich versuche, ein Vim-Plug-In zu erstellen, um Python Doctest bequem mit Vim ausführen zu können. Bevor ich zum Hauptthema komme, wird es länger, also höre ich hier auf. Ich werde diesen Artikel zusammenfassen.

Nächstes Mal werden wir ein Python-Modul erstellen, das Doctest ausführt.

Recommended Posts

Erstellen Sie ein Plug-In, das Python Doctest auf Vim ausführt (2)
Erstellen Sie ein Plug-In, um Python Doctest mit Vim (1) auszuführen.
Schreiben Sie das Vim-Plugin in Python
Schreiben Sie ein einfaches Vim-Plugin in Python 3
Erstellen Sie in 1 Minute eine Vim + Python-Testumgebung
Ich möchte mit Python ein Fenster erstellen
So erstellen Sie eine JSON-Datei in Python
Erstellen Sie ein Wox-Plugin (Python)
Erstellen Sie Verknüpfungen, um Python-Dateien auf dem Terminal mit VScode auszuführen
Erstellen Sie eine Funktion in Python
Erstellen Sie ein Wörterbuch in Python
Ein Memorandum zum Ausführen eines Python-Skripts in einer Bat-Datei
Erstellen Sie ein Plugin, mit dem Sie in Python nach Registerkarten für Sublime Text 3 suchen können
Erstellen Sie einen DI-Container mit Python
Erstellen Sie eine Binärdatei in Python
5 Möglichkeiten zum Erstellen eines Python-Chatbots
Führen Sie einen einfachen Algorithmus in Python aus
Erstellen Sie eine zufällige Zeichenfolge in Python
Erstellen Sie eine einfache GUI-App in Python
Führen Sie den Python-Interpreter im Skript aus
Wie bekomme ich Stacktrace in Python?
[GPS] Erstellen Sie eine kml-Datei mit Python
So führen Sie Maya Python-Skripte aus
Ich habe ein Plugin erstellt, um mit Vim eine Markdown-Tabelle aus CSV zu generieren
[Python] [Word] [python-docx] Versuchen Sie, mit python-docx eine Vorlage für einen Wortsatz in Python zu erstellen
[Python] Listenverständnis Verschiedene Möglichkeiten zum Erstellen einer Liste
Bearbeiten Sie Excel in Python, um eine Pivot-Tabelle zu erstellen
Erstellen Sie eine GIF-Datei mit Pillow in Python
Berechnen wir das statistische Problem mit Python
So löschen Sie einen Taple in einer Liste (Python)
Einbetten von Variablen in Python-Strings
Erstellen Sie in Python ein Diagramm der Standardnormalverteilung
Erstellen Sie eine virtuelle Umgebung mit conda in Python
Eine clevere Möglichkeit zur Zeitverarbeitung mit Python
Schritte zum Entwickeln einer Webanwendung in Python
Schritte zum Erstellen eines Twitter-Bots mit Python
So fügen Sie Python ein Modul hinzu, das Sie in Julialang eingefügt haben
Erstellen Sie in Python ein einfaches Momentum-Investmentmodell
So benachrichtigen Sie Discord-Kanäle in Python
Teilen Sie Dateien beim Schreiben des Vim-Plugins in Python
Ich möchte eine Art von Implementierung erstellen, die angeschlossen werden kann
Erstellen Sie eine neue Seite im Zusammenfluss mit Python
Vim-Plug-In, das automatisch Python-Stile formatiert
Erstellen Sie ein Datum / Uhrzeit-Objekt aus einer Zeichenfolge in Python (Python 3.3).
So führen Sie LeapMotion mit Nicht-Apple Python aus
Erstellen Sie in Python ein Paket mit globalen Befehlen
[Python] Wie zeichnet man mit Matplotlib ein Histogramm?
So erstellen Sie eine Rest-API in Django
Erstellen Sie eine MIDI-Datei in Python mit pretty_midi
Erstellen Sie in KiCad ein Rahmenantennenmuster in Python
[Docker] Erstellen Sie in 3 Minuten eine jupyterLab (Python) -Umgebung!
Erstellen Sie ein Python-Modul
Erstellen Sie Spatia Lite in Python