Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Neocomplete用のpython辞書ファイルを作ってみた

$
0
0

Neocomplete.vimでpythonコード作成時にもomni補完が適用させるようにしたいなあと。
手っ取り早い方法としてはjedi.vimを用いるという手があり普段は自分も愛用してますが、
諸事情により辞書ファイルを作成し、それを参照して補完させるようにしました。

辞書作成方法

docs.python.jpの索引ページをスクレイピングし、
掲載されている項目(関数、クラス、用語)を辞書ファイル項目としました。
言語はRuby、スクレイピングにはNokogiriを使用し、若干力技な部分も入ってます。

辞書作成コード

make_python_dicts.rb
require'nokogiri'require'open-uri'require'net/http'# マルチバイト文字のチェックメソッド追加classStringdefhas_multibytes?self.bytesdo|byte|returntrueif(byte&0b10000000)!=0endfalseendend# 引数チェック(バージョンと出力ファイル名取得)ifARGV.size==1versions="2.7"DICT_NAME=ARGV[0].to_selsifARGV.size==2DICT_NAME=ARGV[0].to_sversions=ARGV[1].to_selseputs"Argument error"exitend# 索引ページのURL生成BASE_URL="http://docs.python.jp/"+versions+'/'.freezeINDEX_URL=BASE_URL+'genindex.html'.freeze# 指定したバージョンの索引ページが存在するか確認res=Net::HTTP.get_response(URI.parse(INDEX_URL))ifres.code!='200'puts"status error : "+res.code.to_sexitend# 索引ページのソース取得index=Nokogiri::HTML(open(INDEX_URL))link_tags=index.xpath('//div[@class="genindex-jumpbox"]')# A~Zまでの索引ページより索引項目抽出(日本語項目&補助項目は除外)items=[]link_tags.search('//p[position()=1]//a').eachdo|tag|urls=URI.escape(BASE_URL+tag[:href])doc=Nokogiri::HTML(open(urls))doc.search('.//table[@class="indextable"]//a[position()=1]').eachdo|item|item=item.text.split[0]unlessitem.match(/^[-.:(]|,$/)||item.has_multibytes?items<<itemendendend# 取得した全項目から重複分を省きソート後、辞書ファイルとして書き出しFile.open(DICT_NAME,'w')do|f|items.uniq!.sort!items.each{|item|f.puts(item)}end

実行方法

第一引数で出力する辞書ファイル名、第二引数で作成したいpythonのversionを指定する。
なお第二引数は省略した場合はversion2.7の辞書ファイルが作成される。
(2016/6月現在は索引ページが存在する2.7と3.5のversionが指定できる)

# 出力ファイル名のみ指定
$ ruby make_python_dict.rb python.dict

# 出力ファイルとversion指定(ver 3.5)
$ ruby make_python_dict.rb python.dict 3.5

上記辞書ファイルを用いたNeocomplete.vimによる補完設定例

.vimrcに以下のように設定し、作成した辞書ファイルを読み込んでやればOKです。

"補完候補表示パターン設定
let g:neocomplete#force_omni_input_patterns.python = '[^. \t]\.\w*'

" 辞書参照設定
let g:neocomplete#sources#dictionary#dictionaries = {
 \   'python': $HOME . '/dicts/python.dict',
 \ }

補足&参照サイト

力技&おおまかにチェックしただけなので、辞書ファイルに不備等あるかもしれません。
またver2.7ver3.5の各辞書ファイルをgithubに置いておきます。もし使いたい場合にはどうぞ。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>