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