Subscribed unsubscribe Subscribe Subscribe

F# Monkey

about

deoplete.nvimのソースをつくってみた

やりたいこと

下記のような感じでオートコンプリートしたい

apと入力したらapple

baと入力したらbanana

chと入力したらcherry

f:id:callmekohei00:20170129233114p:plain

必要なもの

deoplete.nvim

# dein.toml の記入例
[[plugins]]
repo = 'Shougo/deoplete.nvim'
hook_add = 'let g:deoplete#enable_at_startup = 1'

ソースをつくる

ソースの置き場所

$XDG_CONFIG_HOME/nvim/rplugin/python3/deoplete/sources


まずフォルダをつくる

cd $XDG_CONFIG_HOME/nvim
mkdir -p rplugin/python3/deoplete/sources

ソース(パイソンファイル)を作成

cd rplugin/python3/deoplete/sources
vim callmekohei.py

callmekohei.pyの中身(さわるところは3ヶ所のみ!)

from .base import Base

class Source(Base):
    def __init__(self, vim):
        super().__init__(vim)
        self.name = 'callmekohei'           # なまえ
        self.mark = '[kohei]'               # mark のなまえ

    def gather_candidates(self, context):
        return ["apple","banana","cherry"]  # ポップアップのリスト






やりたいこと2

fruits.と入力したらapple, banana, cherry

f:id:callmekohei00:20170130111957p:plain

ソース

import re
from .base import Base

class Source(Base):
    def __init__(self, vim):
        super().__init__(vim)
        self.name = 'callmekohei'
        self.mark = '[kohei]'
        self.input_pattern = (r'^fruits\.')        # input_pattern で fruits. を指定する
        
    def get_complete_position(self, context):      # input_pattern を使うときは必須
        m = re.search(r'\w*$', context['input'])
        return m.start() if m else -1

    def gather_candidates(self, context):
        return ["apple","banana","cherry"]






やりたいこと3

appleを選択したらappleの説明を表示したい

f:id:callmekohei00:20170210005937p:plain

ソース

from .base import Base

class Source(Base):
    def __init__(self, vim):
        super().__init__(vim)
        self.name          = 'callmekohei'
        self.mark          = '[kohei]'

    def gather_candidates(self, context):
        return [
            {
                  'word' : "apple"
                , 'abbr' : "apple  : red, round and delicious!"
                , 'info' : "Apple is delicious"
                , 'kind' : "Food"
                , 'dup'  : 1
            }
        ]



参照

ヘルプ :help deoplete

CREATE SOURCE                    *deoplete-create-source*

To create source, you should read default sources implementation in
rplugin/python3/deoplete/source/*.py.

The files are automatically loaded and deoplete creates new Source class
object.
Source class must extend Base class in ".base".

Note: The sources must be created by Python3 language.

Note: If you call Vim functions in your source, it is not asynchronous.


qiita.com

Remove all ads