J'ai créé un fichier de dictionnaire python pour Neocomplete

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.

Comment créer un dictionnaire

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.

Code de création du dictionnaire

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

Méthode d'exécution

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

Exemple de réglage de complétion par Neocomplete.vim en utilisant le fichier de dictionnaire ci-dessus

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

Site supplémentaire et de référence

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

J'ai créé un fichier de dictionnaire python pour Neocomplete
J'ai créé un fichier de configuration avec Python
Python> J'ai créé un code de test pour mon propre fichier externe
J'ai fait un texte Python
J'ai créé une VM qui exécute OpenCV pour Python
[Python] J'ai créé un classificateur pour les iris [Machine learning]
J'ai fait un Line-bot avec Python!
J'ai fait une loterie avec Python.
J'ai créé un démon avec Python
[VSCode] J'ai créé un extrait d'utilisateur pour Python print f-string
J'ai créé un docset de tableau de bord pour Holoviews
J'ai fait un programme de gestion de la paie en Python!
J'ai fait un compteur de caractères avec Python
Débutant: j'ai créé un lanceur à l'aide d'un dictionnaire
J'ai fait une carte hexadécimale avec Python
Après avoir étudié Python3, j'ai créé un Slackbot
J'ai fait un jeu rogue-like avec Python
J'ai fait un simple blackjack avec Python
J'ai fait une bibliothèque pour l'assurance actuarielle
Un manuel pour les débutants réalisé par des débutants Python
J'ai fait un simulateur de neurones avec Python
J'ai créé beaucoup de fichiers pour la connexion RDP avec Python
J'ai essayé de créer un outil d'échafaudage pour le framework Web Python Bottle
[python] J'ai créé une classe qui peut écrire rapidement une arborescence de fichiers
J'ai créé une bibliothèque de wrapper Python pour l'API de reconnaissance d'images docomo.
J'ai créé un script en Python pour convertir un fichier texte pour JSON (pour l'extrait d'utilisateur vscode)
J'ai créé un conteneur Docker pour utiliser JUMAN ++, KNP, python (pour pyKNP).
J'ai fait une prévision météo de type bot avec Python.
〇✕ J'ai fait un jeu
J'ai fait un algorithme de rechange2 moins cher pour uWSGI
J'ai créé un outil utile pour Digital Ocean
J'ai créé une application graphique avec Python + PyQt5
J'ai essayé de créer un bloqueur de filles pourries sur Twitter avec Python ①
Procédure de création d'un LineBot réalisé avec Python
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
J'ai créé un téléchargeur pour l'expression distribuée par mot
J'ai essayé de lire un fichier CSV en utilisant Python
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
Je veux écrire dans un fichier avec Python
Nous avons créé un produit de prévention du télétravail.
J'ai créé un programme cryptographique César en Python.
J'ai fait un jeu de cueillette avec Python
Made Mattermost Bot avec Python (+ Flask)
Création du wrapper d'API Qiita Python "qiipy"
J'ai fait un Twitter BOT avec GAE (python) (avec une référence)
Création de l'outil de gestion des utilisateurs Let's Chat
J'ai effectué un processus de connexion / déconnexion en utilisant Python's Bottle.
J'ai fait un jeu d'éclairage de sapin de Noël avec Python
J'ai créé une fenêtre pour la sortie du journal avec Tkinter
J'ai créé un outil de nettoyage pour Google Container Registry
J'ai essayé d'exécuter python à partir d'un fichier chauve-souris
J'ai créé une application de notification de nouvelles en ligne avec Python
J'ai créé un module Python pour traduire les commentaires
J'ai créé un environnement Python3 sur Ubuntu avec direnv.
Je veux échantillonner au hasard un fichier avec Python
J'ai essayé de faire LINE BOT avec Python et Heroku
J'ai créé une bibliothèque python qui fait rouler le rang