Ich habe eine Python-Wörterbuchdatei für Neocomplete erstellt

Ich möchte die Omni-Vervollständigung anwenden, wenn ich Python-Code mit Neocomplete.vim schreibe. Ein schneller Weg ist die Verwendung von jedi.vim, die ich normalerweise benutze, aber Aufgrund verschiedener Umstände habe ich eine Wörterbuchdatei erstellt und darauf verwiesen, um sie zu vervollständigen.

So erstellen Sie ein Wörterbuch

Scraping der Indexseite von docs.python.jp, Die aufgelisteten Elemente (Funktionen, Klassen, Begriffe) sind jetzt Wörterbuchdateielemente. Die Sprache ist Ruby, und Nokogiri wird zum Schaben verwendet, und es gibt einige geschickte Teile.

Code zur Erstellung des Wörterbuchs

make_python_dicts.rb


require 'nokogiri'
require 'open-uri'
require 'net/http'

#Prüfmethode für Mehrbyte-Zeichen hinzugefügt
class String
  def has_multibytes?
    self.bytes do |byte|
      return true if (byte & 0b10000000) != 0
    end
    false
  end
end

#Argumentprüfung (Version und Name der Ausgabedatei abrufen)
if ARGV.size == 1
  versions = "2.7"
  DICT_NAME = ARGV[0].to_s
elsif ARGV.size == 2
  DICT_NAME = ARGV[0].to_s
  versions = ARGV[1].to_s
else
  puts "Argument error"
  exit
end

#Generierung der Indexseiten-URL
BASE_URL = "http://docs.python.jp/" + versions + '/'.freeze
INDEX_URL = BASE_URL + 'genindex.html'.freeze

#Überprüfen Sie, ob die angegebene Version der Indexseite vorhanden ist
res = Net::HTTP.get_response(URI.parse(INDEX_URL))
if res.code != '200'
  puts "status error : " + res.code.to_s
  exit
end

#Indexseitenquelle abrufen
index = Nokogiri::HTML(open(INDEX_URL))
link_tags = index.xpath('//div[@class="genindex-jumpbox"]')

# A~Extraktion von Indexelementen von Indexseiten bis Z (ausgenommen japanische Elemente und Zusatzelemente)
items = []
link_tags.search('//p[position()=1]//a').each do |tag|
  urls = URI.escape(BASE_URL + tag[:href])
  doc = Nokogiri::HTML(open(urls))
  doc.search('.//table[@class="indextable"]//a[position()=1]').each do |item|
      item = item.text.split[0]
      unless item.match(/^[-.:(]|,$/) || item.has_multibytes?
        items << item
      end
  end
end

#Exportieren Sie nach dem Sortieren aller erfassten Elemente durch Weglassen von Duplikaten als Wörterbuchdatei
File.open(DICT_NAME, 'w') do |f|
  items.uniq!.sort!
  items.each { |item| f.puts(item) }
end

Ausführungsmethode

Geben Sie den Namen der Wörterbuchdatei an, die mit dem ersten Argument ausgegeben werden soll, und die Python-Version, die Sie mit dem zweiten Argument erstellen möchten. Wenn das zweite Argument weggelassen wird, wird eine Wörterbuchdatei der Version 2.7 erstellt. (Ab Juni 2016 können Sie die Versionen 2.7 und 3.5 angeben, in denen die Indexseite vorhanden ist.)

#Geben Sie nur den Namen der Ausgabedatei an
$ ruby make_python_dict.rb python.dict

#Ausgabedatei und Versionsspezifikation (Version 3).5)
$ ruby make_python_dict.rb python.dict 3.5

Beispiel für die Vervollständigungseinstellung von Neocomplete.vim unter Verwendung der obigen Wörterbuchdatei

Es ist in Ordnung, wenn Sie in .vimrc Folgendes festlegen und die erstellte Wörterbuchdatei lesen.

"Einstellung des Anzeigemusters des Abschlusskandidaten
let g:neocomplete#force_omni_input_patterns.python = '[^. \t]\.\w*'

"Wörterbuchreferenzeinstellung
let g:neocomplete#sources#dictionary#dictionaries = {
 \   'python': $HOME . '/dicts/python.dict',
 \ }

Ergänzungs- & Referenzseite

Möglicherweise enthält die Wörterbuchdatei einige Unzulänglichkeiten, da ich sie nur grob überprüft habe. Auch ver2.7 und [ver3.5](https://github.com/ligerbolt/dicts/blob/ Legen Sie jede Wörterbuchdatei von master / python_ver3.5.dict) auf github. Wenn Sie es verwenden möchten, bitte.

Recommended Posts

Ich habe eine Python-Wörterbuchdatei für Neocomplete erstellt
Ich habe mit Python eine Einstellungsdatei erstellt
Python> Ich habe einen Testcode für meine eigene externe Datei erstellt
Ich habe einen Python-Text gemacht
Ich habe eine VM erstellt, auf der OpenCV für Python ausgeführt wird
[Python] Ich habe einen Klassifikator für Iris erstellt [Maschinelles Lernen]
Ich habe einen Line-Bot mit Python gemacht!
Ich habe mit Python eine Lotterie gemacht.
Ich habe mit Python einen Daemon erstellt
[VSCode] Ich habe ein Benutzer-Snippet für Python-Druck-F-String erstellt
Ich habe ein Dash-Docset für Holoviews erstellt
Ich habe ein Pay-Management-Programm in Python erstellt!
Ich habe mit Python einen Zeichenzähler erstellt
Anfänger: Ich habe einen Launcher mit dem Wörterbuch erstellt
Ich habe mit Python eine Hex-Map erstellt
Nachdem ich Python3 studiert hatte, machte ich einen Slackbot
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe eine Bibliothek für versicherungsmathematische Versicherungen erstellt
Ein Lehrbuch für Anfänger von Python-Anfängern
Ich habe mit Python einen Neuronensimulator erstellt
Ich habe viele Dateien für die RDP-Verbindung mit Python erstellt
Ich habe versucht, ein Gerüstwerkzeug für Python Web Framework Bottle zu erstellen
[Python] Ich habe eine Klasse erstellt, die schnell einen Dateibaum schreiben kann
Ich habe eine Python-Wrapper-Bibliothek für die Docomo-Bilderkennungs-API erstellt.
Ich habe ein Skript in Python erstellt, um eine Textdatei für JSON zu konvertieren (für das vscode-Benutzer-Snippet).
Ich habe einen Docker-Container erstellt, um JUMAN ++, KNP, Python (für pyKNP) zu verwenden.
Ich habe mit Python eine Bot-Wettervorhersage gemacht.
〇✕ Ich habe ein Spiel gemacht
Ich habe einen Ersatz2-Algorithmus für uWSGI billiger gemacht
Ich habe ein nützliches Tool für Digital Ocean erstellt
Ich habe eine GUI-App mit Python + PyQt5 erstellt
Ich habe versucht, mit Python einen Twitter-Blocker für faule Mädchen zu machen
Vorgehensweise zum Erstellen eines mit Python erstellten LineBot
[Python] Ich habe mit Tkinter einen Youtube Downloader erstellt.
Ich habe einen Downloader für wortverteilte Ausdrücke erstellt
Ich habe versucht, eine CSV-Datei mit Python zu lesen
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich möchte mit Python in eine Datei schreiben
Wir haben ein Peeping-Prevention-Produkt für die Telearbeit entwickelt.
Ich habe ein Caesar-Kryptografieprogramm in Python erstellt.
Ich habe mit Python ein Bin-Picking-Spiel gemacht
Mattermost Bot mit Python gemacht (+ Flask)
Python Qiita API Wrapper "qiipy" gemacht
Ich habe einen Twitter BOT mit GAE (Python) gemacht (mit einer Referenz)
Lassen Sie uns Chat-Benutzerverwaltungstool gemacht
Ich habe einen Anmelde- / Abmeldevorgang mit Python's Bottle durchgeführt.
Ich habe mit Python ein Weihnachtsbaum-Beleuchtungsspiel gemacht
Ich habe mit Tkinter ein Fenster für die Protokollausgabe erstellt
Ich habe ein Reinigungstool für Google Container Registry erstellt
Ich habe versucht, Python aus einer Bat-Datei auszuführen
Ich habe mit Python eine App für die Benachrichtigung über Netznachrichten erstellt
Ich habe ein Python-Modul erstellt, um Kommentare zu übersetzen
Ich habe eine Python3-Umgebung unter Ubuntu mit direnv erstellt.
Ich möchte eine Datei mit Python zufällig testen
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
Ich habe eine Python-Bibliothek erstellt, die einen rollierenden Rang hat