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.
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.
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
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
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',
\ }
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