Je souhaite appliquer la complétion omni lors de l'écriture de code python avec Neocomplete.vim. Un moyen rapide consiste à utiliser jedi.vim, que j'utilise habituellement, mais En raison de diverses circonstances, j'ai créé un fichier de dictionnaire et je me suis référé à celui-ci pour le compléter.
Grattage de la page d'index de docs.python.jp, Les éléments listés (fonctions, classes, termes) sont désormais des éléments de fichier dictionnaire. La langue est Ruby, et Nokogiri est utilisé pour le grattage, et il y a quelques parties habiles.
make_python_dicts.rb
require 'nokogiri'
require 'open-uri'
require 'net/http'
#Ajout d'une méthode de vérification pour les caractères multi-octets
class String
def has_multibytes?
self.bytes do |byte|
return true if (byte & 0b10000000) != 0
end
false
end
end
#Vérification d'argument (obtenir la version et le nom du fichier de sortie)
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
#Génération d'URL de page d'index
BASE_URL = "http://docs.python.jp/" + versions + '/'.freeze
INDEX_URL = BASE_URL + 'genindex.html'.freeze
#Vérifiez si la version spécifiée de la page d'index existe
res = Net::HTTP.get_response(URI.parse(INDEX_URL))
if res.code != '200'
puts "status error : " + res.code.to_s
exit
end
#Obtenir la source de la page d'index
index = Nokogiri::HTML(open(INDEX_URL))
link_tags = index.xpath('//div[@class="genindex-jumpbox"]')
# A~Extraction des éléments d'index depuis les pages d'index jusqu'à Z (à l'exclusion des éléments japonais et des éléments auxiliaires)
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
#Après avoir trié tous les éléments acquis en omettant les doublons, exportez sous forme de fichier dictionnaire
File.open(DICT_NAME, 'w') do |f|
items.uniq!.sort!
items.each { |item| f.puts(item) }
end
Spécifiez le nom du fichier de dictionnaire à afficher avec le premier argument et la version de python que vous souhaitez créer avec le deuxième argument. Si le deuxième argument est omis, un fichier de dictionnaire version 2.7 sera créé. (À partir de juin 2016, vous pouvez spécifier les versions 2.7 et 3.5 où la page d'index existe)
#Spécifiez uniquement le nom du fichier de sortie
$ ruby make_python_dict.rb python.dict
#Fichier de sortie et spécification de version (ver 3.5)
$ ruby make_python_dict.rb python.dict 3.5
Définissez ce qui suit dans .vimrc et lisez le fichier de dictionnaire créé.
"Réglage du modèle d'affichage du candidat d'achèvement
let g:neocomplete#force_omni_input_patterns.python = '[^. \t]\.\w*'
"Paramètre de référence du dictionnaire
let g:neocomplete#sources#dictionary#dictionaries = {
\ 'python': $HOME . '/dicts/python.dict',
\ }
Il peut y avoir des lacunes dans le fichier du dictionnaire parce que je viens de le vérifier grossièrement. Aussi ver2.7 et [ver3.5](https://github.com/ligerbolt/dicts/blob/ Placez chaque fichier de dictionnaire de master / python_ver3.5.dict) sur github. Si vous souhaitez l'utiliser, veuillez.
Recommended Posts