Slide 1

Slide 1 text

-41͕΋ͨΒͨ͠ 7JNϓϥάΠϯͷมԽʹ ࢥ͍Λ஘ͤΔ VimϓϥάΠϯιϜϦΤ(ݟश͍) @lighttiger2505 gollira.vim #3

Slide 2

Slide 2 text

ΠϯτϩμΫγϣϯ

Slide 3

Slide 3 text

͔ͳΓલʹ ͜ΜͳهࣄΛॻ͖·ͨ͠ • NeovimͰϞμϯͳPython؀ڥΛߏங͢Δ • https://qiita.com/lighttiger2505/items/ e0ada17634516c081ee7

Slide 4

Slide 4 text

શવϞμϯ ͡Όͳ͘ͳͬͯΔʂʁ

Slide 5

Slide 5 text

ͳ͔ͥ • LSP(Language Server Protocol)ͷӨڹ͕େ͖͍ • NeoVimͷϦϞʔτϓϥάΠϯͱ৽ػೳ͕ߋʹม ԽΛଅ͢

Slide 6

Slide 6 text

ຊ೔ͷςʔϚΰʔϧ • ςʔϚ • LSP͕VimͷϓϥάΠϯʹͲͷΑ͏ͳมԽΛ΋ͨ Β͔ͨ͠ • ΰʔϧ • Vim͸ະͩʹൃల్্ʹ͋Δ • զʑ͸ͦͷൃలʹߩݙͰ͖Δ

Slide 7

Slide 7 text

ΞδΣϯμ • LSP(Language Server Protocol)ͱ͸ͳʹ͔ • LSPΫϥΠΞϯτϓϥάΠϯͷ঺հ • ϦϞʔτϓϥάΠϯͱ͸ͳʹ͔ • VimϓϥάΠϯͷมԽ • ·ͱΊ

Slide 8

Slide 8 text

-41ͱ͸ͳʹ͔

Slide 9

Slide 9 text

-BOHVBHF4FSWFS ݴޠ։ൃπʔϧΛ౷߹ͨ͠αʔό w ࣗಈิ׬ w ఆٛδϟϯϓ w ࢀরݕࡧFUD -BOHVBHF4FSWFS1SPUPDPM -41 -BOHVBHF4FSWFSͱΫϥΠΞϯτؒͰ࢖༻͢Δϓϩτίϧ w .JDSPTPGU͕࢓༷ࡦఆ 74$PEFͷͨΊʁ w +40/31$ϕʔε -41ͱ͸ͳʹ͔

Slide 10

Slide 10 text

͜Ε·Ͱ͸ΤσΟλຖʹݴޠπʔϧΛར༻͢ΔϓϥάΠϯ͕ඞཁͩͬ ͨ w 74$PEFͷ1ZUIPOϓϥάΠϯ w "UPNͷ1ZUIPOϓϥάΠϯ w 7JNͷ1ZUIPOϓϥάΠϯ w 4VCMJNF5FYU &NBDT 4PVSDFHSBQIFUD ݴޠίϛϡχςΟͷ։ൃϦιʔεΛ-BOHVBHF 4FSWFSʹूதͯ͠ߴ඼࣭ͳݴޠ։ൃπʔϧΛ࡞ Δ Ϣʔβ͸-41ΛαϙʔτΫϥΠΞϯτΛಋೖͯ͠ ͙͢ʹߴ඼࣭ͳݴޠͷαϙʔτΛڗडͰ͖Δ -41͸ͳͥඞཁ͔

Slide 11

Slide 11 text

.FUIPE ػೳ textDocument/completion ࣗಈิ׬ textDocument/definition ఆٛδϟϯϓ textDocument/formatting ϑΥʔϚοτ textDocument/hover ώϯτදࣔ textDocument/implementation ࣮૷(ܧঝ/ΠϯλϑΣʔε)ͷϦετ textDocument/rename ໊લมߋ textDocument/references γϯϘϧࢀরݕࡧ textDocument/documentSymbol υΩϡϝϯτγϯϘϧݕࡧ workspace/symbol ϫʔΫεϖʔεγϯϘϧݕࡧ -41ͷఏڙ͢Δػೳ

Slide 12

Slide 12 text

#FGPSF"GUFS

Slide 13

Slide 13 text

KFEJ HPDPEF BVUPQFQ qBLF JTPSU ZBSQ CMBDL HPEFG JNQM HVSV HPMJOU 7JN ϦϯλʔϑΥʔϚολ ϓϥάΠϯ "-& ࣗಈิ׬ EFPQMFUF (PݴޠπʔϧϓϥάΠϯ WJNHP 1ZUIPOݴޠπʔϧϓϥάΠϯ KFEJWJN 1ZUIPOิ׬ EFPQMFUFKFEJ (Pิ׬ EFPQMFUFHP

Slide 14

Slide 14 text

KFEJ HPDPEF BVUPQFQ qBLF JTPSU ZBSQ CMBDL HPEFG JNQM HVSV HPMJOU ϦϯλʔϑΥʔϚολ ϓϥάΠϯ "-& ࣗಈิ׬ EFPQMFUF (PݴޠπʔϧϓϥάΠϯ WJNHP 1ZUIPOݴޠπʔϧϓϥάΠϯ KFEJWJN 1ZUIPOิ׬ EFPQMFUFKFEJ (Pิ׬ EFPQMFUFHP 7JN 7JN

Slide 15

Slide 15 text

KFEJ HPDPEF BVUPQFQ qBLF JTPSU ZBSQ CMBDL HPEFG JNQM HVSV HPMJOU 7JN ϦϯλʔϑΥʔϚολ ϓϥάΠϯ "-& ࣗಈิ׬ EFPQMFUF (PݴޠπʔϧϓϥάΠϯ WJNHP 1ZUIPOݴޠπʔϧϓϥάΠϯ KFEJWJN 1ZUIPOิ׬ EFPQMFUFKFEJ (Pิ׬ EFPQMFUFHP 7JNϓϥάΠϯ

Slide 16

Slide 16 text

7JN ϦϯλʔϑΥʔϚολ ϓϥάΠϯ "-& ࣗಈิ׬ EFPQMFUF (PݴޠπʔϧϓϥάΠϯ WJNHP 1ZUIPOݴޠπʔϧϓϥάΠϯ KFEJWJN 1ZUIPOิ׬ EFPQMFUFKFEJ (Pิ׬ EFPQMFUFHP KFEJ HPDPEF BVUPQFQ qBLF JTPSU ZBSQ CMBDL HPEFG JNQM HVSV HPMJOU ݴޠ։ൃπʔϧ

Slide 17

Slide 17 text

#FGPSF"GUFS

Slide 18

Slide 18 text

ࣗಈิ׬ (deoplete) LSPิ׬ (deoplete- vim-lsp) QZMT HPQMT Language Server Client (vim-lsp) 7JN -41

Slide 19

Slide 19 text

ࣗಈิ׬ (deoplete) LSPิ׬ (deoplete- vim-lsp) QZMT HPQMT 7JN Language Server Client (vim-lsp) -41 -BOHVBHF4FSWFS$MJFOU

Slide 20

Slide 20 text

ࣗಈิ׬ (deoplete) LSPิ׬ (deoplete- vim-lsp) 7JN Language Server Client (vim-lsp) QZMT HPQMT -41 -BOHVBHF4FSWFS

Slide 21

Slide 21 text

Ϧιʔεͷूத (PݴޠπʔϧϓϥάΠϯ WJNHP 1ZUIPOݴޠπʔϧϓϥάΠϯ KFEJWJN Language Server Client (vim-lsp) 7JNTDSJQU(P 7JNTDSJQU1ZUIPO

Slide 22

Slide 22 text

(PݴޠπʔϧϓϥάΠϯ WJNHP 1ZUIPOݴޠπʔϧϓϥάΠϯ KFEJWJN Language Server Client (vim-lsp) 7JNTDSJQU0OMZ Ϧιʔεͷूத

Slide 23

Slide 23 text

Ϧιʔεͷूத (PݴޠπʔϧϓϥάΠϯ WJNHP (PݴޠπʔϧϓϥάΠϯ WTDPEFHP gopls 7JN(P 74$PEF(P

Slide 24

Slide 24 text

Ϧιʔεͷूத (PݴޠπʔϧϓϥάΠϯ WJNHP (PݴޠπʔϧϓϥάΠϯ WTDPEFHP gopls HPQMT

Slide 25

Slide 25 text

-41ΫϥΠΞϯτ ϓϥάΠϯͷ঺հ

Slide 26

Slide 26 text

-41ࡾॐ࢜ • vim-lsp • LanguageClient-neovim • coc.nvim

Slide 27

Slide 27 text

WJNMTQ • Vim script • Vimͱ΋NeoVimͱ΋ߴ౓ͳޓ׵ੑ • NeoVimͷ৽ػೳ௥ै΋ੵۃత

Slide 28

Slide 28 text

8JUI"VUP$PNQMFUF • asyncomplete.vim • asyncomplete-lsp.vim • deoplete.nvim • deoplete-vim-lsp • ncm2 • ncm2-vim-lsp

Slide 29

Slide 29 text

-BOHVBHF$MJFOUOFPWJN • Rust(ϦϞʔτϓϥάΠϯ) • NeoVimͱ͍͍ͭͯΔ͕VimͰ΋ಈ͘ • LSPΫϥΠΞϯτͱͯ͠͸vim-lspͱಉఔ౓ͷ࣮ ૷ • fzfͳͲdenite.nvimͳͲͷ֎෦࿈ܞ͸एׯڧ͍ ҹ৅

Slide 30

Slide 30 text

8JUI"VUP$PNQMFUF • deoplete.nvim • LanguageClient source(ϦϙδτϦʹಉࠝ) • ncm2

Slide 31

Slide 31 text

DPDOWJN • Type Script(ϦϞʔτϓϥάΠϯ) • nvimͱ͍͍ͭͯΔ͕VimͰ΋ಈ͘ • ࣗಈิ׬ʙͦͷଞΠϯςϦηϯε·Ͱશ෦ೖΓ • FloatingWindowରԠͷ଎͞

Slide 32

Slide 32 text

ϦϞʔτϓϥάΠϯ ͱ͸ͳʹ͔

Slide 33

Slide 33 text

/FP7JNʹ͍ͭͯ͸ҎԼࢀর • Differences between Nvim and Vim full version • https://www.slideshare.net/Shougo/ differences-between-nvim-and-vim-full-version • Neovim͕Ͳ͏͍͏ϓϩδΣΫτͳͷ͔·ͱΊ • https://qiita.com/lighttiger2505/items/ 440c32e40082dc310c1e

Slide 34

Slide 34 text

ͬ͘͟Γ • Improve the extensibility power with a new plugin architecture based on coprocesses. Plugins will be written in any programming language without any explicit support from the editor. • https://github.com/Neovim/Neovim/wiki/ Introduction • VimϓϥάΠϯΛVim scriptҎ֎ͷ͋ΒΏΔϓϩά ϥϜݴޠͰॻ͚Δ

Slide 35

Slide 35 text

ৄղ • :h remote_plugin • NeoVim͸RPCΛ௨ͯ͡ຊମૢ࡞Λߦ͑ΔAPIΛ උ͑Δ • ϦϞʔτϓϥάΠϯ͸ຊମͱผϓϩηεͰىಈ ͠msgpack-RPCͰ্هAPIͱ௨৴͢Δ • ଟ͘ͷ৔߹௨৴͸ϥούʔ͞ΕͨϥΠϒϥϦΛ ༻͍Δ

Slide 36

Slide 36 text

/FP7JNͰ͔͠ಈ͔ͳ͍ʁ • NeoVimͷϦϞʔτϓϥάΠϯΛVimͰ΋࢖༻Ͱ͖ΔΑ͏ ʹ͢Δϥούʔ૚΋͋Δ • ͔͠͠·࣮ͩݧతͳཱͪҐஔ • nvim-yarp • https://github.com/roxma/nvim-yarp • vim-hug-neovim-rpc • https://github.com/roxma/vim-hug-neovim-rpc

Slide 37

Slide 37 text

7JNϓϥάΠϯͷมԽ

Slide 38

Slide 38 text

-41ΫϥΠΞϯτ͸΍Δ͜ͱ ͕ͨ͘͞Μ • ࣗಈิ׬ • ੩తղੳ • ίʔυδϟϯϓ • γϯϘϧݕࡧ/දࣔ • ฤूதͷϑΝΠϧಉظ

Slide 39

Slide 39 text

-41ΫϥΠΞϯτ͸΍Δ͜ͱ ͕ͨ͘͞Μ • Language Serverͱͷ௨৴(JSON-RPC2) • ඇಉظ • ߴ଎

Slide 40

Slide 40 text

-41ొ৔ʹΑΓ ϓϥάΠϯͷ΍Δ͜ͱ͕ ͲΜͲΜ૿͍͑ͯ͘

Slide 41

Slide 41 text

7JNTDSJQUͷಛੑ • Vimʹ౥ࡌ͞Ε͍ͯΔͨΊɺผ్ϥϯλΠϜෆཁ • VimಠࣗͷείʔϓɺΠϕϯτϋϯυϦϯά • ΦϒδΣΫτࢦ޲(Ϋϥε)ͳͲݱ୅తͳϓϩάϥ ϛϯάػೳͷܽ೗

Slide 42

Slide 42 text

ϦϞʔτϓϥάΠϯͰ ࡞ͬͨ΄͏͕ྑ͍ʁ • Vim scriptͷ΄͏͕؆୯ʹ͔͚Δ৔໘΋͋Δ • Vimͱͷೖग़ྗҎ֎ͷϩδοΫ͕૿͑ଓ͚Δͱ൚ ༻ϓϩάϥϜݴޠͷ΄͏͕༗རͳ৔໘΋͋Δ • ϞδϡʔϧԽɺߏ଄Խ

Slide 43

Slide 43 text

·ͱΊ • LSPͷొ৔ʹΑͬͯϓϥάΠϯʹେ͖ͳมԽ • ݴޠΠϯςϦηϯεΛಘΔୈҰͷखஈͱͯ͠LSPΫϥΠΞϯτ ͕ొ৔ • ͜Ε·ͰݸผʹඞཁͩͬͨϓϥάΠϯ͕LSPΫϥΠΞϯτ ʹ·ͱ·Δ • LSPΫϥΠΞϯτ͕େ͖ͳϓϥάΠϯʹ • ϦϞʔτϓϥάΠϯͰ࣮૷͞ΕΔLSPΫϥΠϯτͷొ ৔

Slide 44

Slide 44 text

Ͳ͏ͳΔͷ͔Θ͔Βͳ͍ • coc.nvimͷΑ͏ͳLSPΫϥΠΞϯτʹଞͷϓϥά Πϯͷػೳ͕શ෦΋Γ͜·ΕΔͷ͔ • খ͞ͳಛఆػೳͷϓϥάΠϯΛ૊Έ߹Θ͍ͤͯ͘ ͷ͔ • ϕετϓϥΫςΟε͸ͳ͘·ͩΈΜͳ໛ࡧ͍ͯ͠ Δঢ়گ

Slide 45

Slide 45 text

7JNʹ͸ ·ͩ·ͩՄೳੑ͕͋Δ • Vim͸ރΕͯΔͱࢥ͕ͬͨͦΜͳ͜ͱ͸ͳ͔ͬͨ • ৽͍͠ϓϥάΠϯ͸ͲΜͲΜग़ͯ͘Δ • deoplete-vim-lsp࡞͕ͬͨ਺Χ݄ޙ΋͏ϨΨγʔʹͳ ΔͷͰ͸ʁ • ·ͩ·֤ͩLSPΫϥΠΞϯτʹ͸଍Γͳ͍෦෼ͳͲͨ͘͞ Μ͋Δ • ࢲୡ͸ߩݙ͢Δ͜ͱ͕Ͱ͖Δ

Slide 46

Slide 46 text

-FU`TFOKPZ ZPVS7JNMJGF