Teilen Sie Dateien beim Schreiben des Vim-Plugins in Python

Hintergrund

Schreiben Sie ein Vim-Plugin in Python

Ich mache ein Plugin für Vim (Neovim), indem ich auf den oben verlinkten Artikel verweise. Als die Python-Datei größer wurde und ich versuchte, sie zu teilen, stolperte ich ein wenig, damit ich die Lösung teilen kann.

In diesem Artikel erstellen wir als Beispiel ein Plug-In, das den Titel einer Webseite mithilfe des Anforderungsmoduls anzeigt.

Verzeichnisstruktur und Dateiinhalt

sample-vim-plugin
  plugin/
    sample_vim_plugin.vim
  src/
    sample_vim_plugin.py
    requests_caller.py

plugin/sample_vim_plugin.vim


scriptencoding utf-8

if exists('g:loaded_sample_vim_plugin')
	finish
endif
let g:loaded_sample_vim_plugin = 1

let s:save_cpo = &cpo
set cpo&vim

py3file <sfile>:h:h/src/sample_vim_plugin.py

function! sample_vim_plugin#print_title(url)
	py3 sample_vim_plugin_print_title(vim.eval('a:url'))
endfunction

let &cpo = s:save_cpo
unlet s:save_cpo

src/sample_vim_plugin.py


import vim
import requests_caller

def sample_vim_plugin_print_title(url):
	print(requests_caller.get_title(url))

requests_caller.py


import requests
from bs4 import BeautifulSoup

def get_title(url):
	response = requests.get(url)
	soup = BeautifulSoup(response.text, 'lxml')
	return soup.title.text

Ich verwalte Plugins mit dein, also wenn ich das obige Plugin zur Toml-Datei hinzufüge und neovim starte ModuleNotFoundError: No module named 'requests_caller' Es wurde gesagt, dass.

Ich möchte das Problem lösen, dass dieses Modul nicht gefunden werden kann.

In "Processing'runtimepath'in Python"

In Python wird vim.VIM_SPECIAL_PATH anstelle der Pfadliste für 'Laufzeitpfad' verwendet Ein spezielles Verzeichnis namens wird verwendet. Dieses Verzeichnis wird in sys.path verwendet Wann und wann vim.path_hooks in sys.path_hooks verwendet wird, 'runtimepath' {Rtp} / python2 (oder python3) und {rtp} / pythonx (beide Balken) für jeden Pfad {rtp} in Das Modul (geladen von John) wird geladen.

Es gibt.

Daher gibt es zwei mögliche Methoden.

Lösung 1: Benennen Sie das Verzeichnis um

Wenn sich die Verzeichnisse python2, python3 und pythonx direkt unter dem Laufzeitpfad befinden, werden sie geladen. Benennen Sie das Verzeichnis src daher in python3 um. Natürlich muss das zu lesende Teil geändert werden, also ändern Sie es wie folgt

plugin/sample_vim_plugin.vim


- py3file <sfile>:h:h/src/sample_vim_plugin.py
+ py3file <sfile>:h:h/python3/sample_vim_plugin.py

Lösung 2: Zu sys.path hinzufügen

Wenn Sie das Verzeichnis nicht umbenennen möchten, fügen Sie es direkt zu sys.path hinzu.

plugin/sample_vim_plugin.vim


+ let s:sample_vim_plugin_root_dir = expand('<sfile>:p:h:h')
  py3file <sfile>:h:h/src/sample_vim_plugin.py

src/sample_vim_plugin.py


  import vim
+ import sys
+ import os
+ plugin_python_dir = os.path.join(vim.eval('s:sample_vim_plugin_root_dir'), 'src')
+ sys.path.append(plugin_python_dir)
  import requests_caller

Zusammenfassung

Das Plug-In funktioniert auf zwei Arten.

Bekanntlich scheint davidhalter / jedi-vim Lösung 1 (Pythonx) zu verwenden. Ich habe nur einen Blick auf den Quellcode geworfen, aber Shougo / denite.nvim und Shougo / deoplete.nvim scheint Lösung 2 zu verwenden.

Recommended Posts

Teilen Sie Dateien beim Schreiben des Vim-Plugins in Python
Schreiben Sie das Vim-Plugin in Python
Beim Schreiben eines Programms in Python
Schreiben Sie ein einfaches Vim-Plugin in Python 3
[Tipps] Leicht lesbares Schreiben beim Verbinden von Funktionen in Python
Lesen und Schreiben von CSV- und JSON-Dateien mit Python
Zeichenkodierung beim Umgang mit Dateien in Python 3
Ein Memorandum beim Schreiben von experimentellem Code ~ Anmelden in Python
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.
Achtung bei os.mkdir in Python
Praktische Schreibmethode beim kontinuierlichen Anhängen an die Liste in Python
Verschieben von CSV-Dateien mit Python Teil 1
Vorsichtsmaßnahmen bei der Verwendung von Pit mit Python
Verhalten beim Auflisten in Python heapq
Formatieren Sie Python-Code automatisch mit Vim
Bearbeiten Sie Dateien und Ordner in Python
Umgang mit JSON-Dateien in Python
Laden Sie Google Drive-Dateien in Python herunter
Sortieren Sie große Textdateien in Python
Lesen Sie Dateien parallel zu Python
Exportieren und Ausgeben von Dateien in Python
Lesen und Schreiben von Text in Python
In Python geteiltes Rechteckbereichselement
Bei Verwendung regulärer Ausdrücke in Python
Extrahieren Sie mit Python Zeichenfolgen aus Dateien
Moduszeile, wenn Sie den entsprechenden Python-Code in Vim öffnen
Einstellungen beim Schreiben von Google App Engine / Python-Apps mit Intellij Idea
[Python ORM] Notation beim Schreiben von SQL mithilfe von Unterabfragen in der IN-Klausel in SQL Alchemy
Vergessen Sie Shebang nicht, wenn Sie Check! Ansibles dynamisches Inventar in Python schreiben!
Wenn Sie mehrere Schlüssel in Python-Sortierung angeben
Erstellen Sie ScriptableObject in Python, wenn Sie ADX2 erstellen
Vorsichtsmaßnahmen beim Beizen einer Funktion in Python
Suchen Sie nach Dateien wie Linux Find in Python
Ausgabebaumstruktur von Dateien in Python
Referenz der INI-Datei in Python oder Ruby
Was Emacs-Benutzer wissen sollten, wenn sie Python-Code in Sublime Text schreiben
Vorlage zum Schreiben von Batch-Skripten in Python
Wenn Sie sich die Speichernutzung in Python 3 ansehen
Automatisieren Sie Jobs, indem Sie Dateien in Python bearbeiten
Lesen und Schreiben von JSON-Dateien mit Python
Beispiel für den Umgang mit EML-Dateien in Python
Laden Sie Dateien in jedem Format mit Python herunter
Wenn der Codec das Byte nicht dekodieren kann, wird es in Python angezeigt
Erstellen Sie in 1 Minute eine Vim + Python-Testumgebung
Konvertieren Sie die FBX-Datei in Python in ASCII <-> BINARY
Zusammenfassung zum Importieren von Dateien in Python 3
Studie aus Python Lesen und Schreiben von Hour9-Dateien
Wenn ich matplotlib in Python versuche, heißt es'cairo.Context '.
Ein Memo, das ich in Python zusammengeführt habe
Vorsichtsmaßnahmen beim Umgang mit Kontrollstrukturen in Python 2.6
Hinweis zur Codierung bei LANG = C in Python
Behandeln Sie Zip-Dateien mit japanischen Dateinamen in Python 3
Das 18. Offline-Echtzeit-Schreibproblem in Python
So erhalten Sie die Dateien im Ordner [Python]
Vim-Plug-In, das automatisch Python-Stile formatiert
Holen Sie sich die Datei, Funktion, Zeilennummer in Python ausgeführt
Lesen und Schreiben passt Dateien mit Python (Memo)
[Frage] Was passiert, wenn Sie% in Python verwenden?
Fehler beim Versuch, psycopg2 in Python zu installieren