Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
VimからSourcekit-lspを使おう
Search
kamecha
July 20, 2023
Technology
0
260
VimからSourcekit-lspを使おう
kamecha
July 20, 2023
Tweet
Share
Other Decks in Technology
See All in Technology
Introduction to Bill One Development Engineer
sansan33
PRO
0
360
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
230
Digitization部 紹介資料
sansan33
PRO
1
6.8k
プロポーザルに込める段取り八分
shoheimitani
1
230
変化するコーディングエージェントとの現実的な付き合い方 〜Cursor安定択説と、ツールに依存しない「資産」〜
empitsu
4
1.4k
SREが向き合う大規模リアーキテクチャ 〜信頼性とアジリティの両立〜
zepprix
0
450
Context Engineeringが企業で不可欠になる理由
hirosatogamo
PRO
3
570
MCPでつなぐElasticsearchとLLM - 深夜の障害対応を楽にしたい / Bridging Elasticsearch and LLMs with MCP
sashimimochi
0
170
会社紹介資料 / Sansan Company Profile
sansan33
PRO
15
400k
Embedded SREの終わりを設計する 「なんとなく」から計画的な自立支援へ
sansantech
PRO
3
2.4k
OCI Database Management サービス詳細
oracle4engineer
PRO
1
7.4k
CDKで始めるTypeScript開発のススメ
tsukuboshi
1
400
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.7k
Ethics towards AI in product and experience design
skipperchong
2
190
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
80
ラッコキーワード サービス紹介資料
rakko
1
2.3M
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
1
51
Test your architecture with Archunit
thirion
1
2.2k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
430
Git: the NoSQL Database
bkeepers
PRO
432
66k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
Transcript
kamecha Vim͔Βsourcekit-lspΛ͓͏
ࣗݾհ • kamehcaʢ͔ΊͪΌɾُʣ • pixivίϛοΫ෦ॴଐʢΞϧόΠτʣ • pixiv iOSτϨʔχϯάίʔεܦݧऀ • झຯ
• vimͷઃఆ • ͓ֆඳ͖
࣍ • ΤσΟλԿ͍ͬͯ·͔͢ʁ • ίʔυฤूʹvimΛ͓͏ • XcodeͷػೳʢLSPͷػೳʣΛvim͔Β͓͏ • XcodeͱvimΛซ༻ͯ͠։ൃ͠Α͏
ΤσΟλԿͬͯ·͔͢ʁ
None
• iOS։ൃʹ͓͍ͯඞਢͱͳΔ౷߹։ൃڥ • iOS։ൃͱີͱͳΔػೳ͕ॆ࣮ • ϓϩδΣΫτ࡞ • SwiftUIϓϨϏϡʔػೳ Xcode
Neovim • vimͷfork • vimͱࢥ͕ҟͳΔ • ৽͍͠֎෦࿈ܞ(LSP, tree-sitter)ʹੵۃత • ઈࢍ։ൃத
• Personal Development Environment(PDE)ͷߏஙʹศར 1%&ɿ֤ݸਓʹ͋ͬͨڥʹ͍ͤͯ͘͞ΠϝʔδΛ͍ͯ͠·͢
Neovimͷಛͷยྡྷ CBSCFDVFOWJN UBCCZOWJN MVBMJOFOWJN • UIݸผʹઃఆՄೳ • ࣗͷڥʹԠͨ͡ઃఆ͕ Ͱ͖Δ •
IDE-likeʹՄೳ
ίʔυฤूʹvimΛ͓͏
࣮XcodeࣗମʹVimϞʔυ͕͋Γ·͢ vimΛΤϛϡϨʔτ͍ͯ͠Δ͚ͩͰɺ ·ͩෆศͳଟ͍…
Ͱ͖ΕຊͷvimΛ͍͍ͨ • ςΩετΦϒδΣΫτ • υοτϦϐʔτ • QuickFix • طଘͷvimrcҨ࢈ʢϓϥάΠϯʣ •
ϑΝδʔϑΝΠϯμʔ
ͨͩɺ XcodeͷΑ͏ͳػೳҰ෦͍͍ͨ…
Xcode-likeͳػೳʢLSPͷػೳʣΛ vim͔Β༻͠Α͏
Xcode(IDE)ͱLSP • ิ • ఆٛδϟϯϓ • rename • etc… ҰൠԽ
LSP (Language Server Protocol) $ͷ0NOJTIBSQػೳ͕ݩͱͳ͓ͬͯΓɺ ݱࡏ7JTVBM4UVEJP$PEFͰΑ͘༻͞Ε͍ͯΔΒ͍͠ɻ ҰઆʹΑΔͱͦͷ0NOJTIBSQʹWJN͕ؔΘ͍ͬͯΔͷͩͱ͔
SwiftͱLSP https://nshipster.com/language-server-protocol/
SwiftͱLSP Sourcekit-lsp
SwiftͷLSP࣮ • Swift Package ManagerԼͰ ༗ޮ • ·ͩ։ൃஈ֊ • جຊతͳػೳ༻Մೳ
• ิ • ఆٛδϟϯϓ • etc…
LSPͱVim
VimͰLSPΫϥΠΞϯτΛ༻͢Δ • vim-lsp • vimscriptͷΈͰ࣮͞Ε͍ͯͯ෭࡞༻͕ͳ͍ • vim-lsp-settingsΛ༻͍ͯઃఆͷ؆ུԽ͕Ͱ͖Δ • coc.nvim •
node.jsʹґଘ͓ͯ͠ΓɺVSCodeͱ͋Δఔͷޓ͕͋Δ • ͍ΘΏΔAll in OneܥϓϥάΠϯ • neovim’s built-in client • NeovimʹϏϧτΠϯ͞Ε͍ͯΔΫϥΠΞϯτ • nvim-lspcon fi gΛ༻͍ͯઃఆΛߦ͏ Vim&Neovim྆ରԠ
֤ΫϥΠΞϯτʹԠͨ͡ ؆қతͳઃఆྫ ࠷খߏิεϥΠυ
vim-lsp 1. vim-lsp, vim-lsp-settingΛvimʹಡΈࠐ·ͤΔ 2. .vimrc(init.vim)ʹΩʔϚοϓͷઃఆΛ͢Δ 3. vim-lsp-settingΛ༻͍ͯsourcekit-lspΛΠϯετʔϧ • `:LspInstallServer
sourcekit-lsp` WJNMTQͰͷઃఆΛָʹ͢ΔϓϥάΠϯ
࣮ߦྫʢvim-lspʣ SwiftUIܗࣜͷϑΝΠϧͰ ϗόʔใΛݟΔਤ σϑΥϧτઃఆͷͨΊɺ popup windowͷ৭͕ࢵͱͳΔ
coc.nvim 1. coc.nvimʹґଘ͍ͯ͠ΔʢnodeʣΛΠϯετʔϧ 2. coc.nvimΛΠϯετʔϧʢ’release’ϒϥϯνͩͱϏϧυઃఆ͕ෆཁʣ 3. ΩʔϚοϓͷઃఆ 4. sourcekit-lspΛcocʹೝࣝͤ͞Δ •
ݱ࣌Ͱsourcekit-lsp`:CocInstall coc-sourcekit-lsp`͕Ͱ͖ͳ͍
coc.nvimͰLSPΛϚχϡΞϧͰઃఆ͢Δ 1. `:CocCon fi g`ʹΑΓcocશମͷઃఆϑΝΠϧΛ։͘ 2. sourcekit-lspͱͯ͠ɺpathͱରԠ͢ΔϑΝΠϧλΠϓΛઃఆ͢Δ xcrun — fi
nd sourcekit-lsp
࣮ߦྫʢcoc.nvimʣ SwiftUIܗࣜͷϑΝΠϧͰ ϗόʔใΛݟΔਤ cocݟͨΛΑ͠ͳʹมߋ͢Δ /FPWJNͩͱA-TQ*OGPAͰ֬ೝՄ
neovim’s built-in client 1. nvim-lspcon fi gΛΠϯετʔϧ͢Δ 2. ΩʔϚοϓͷઃఆ 3.
nvim-lspcon fi gΛ༻͍ͯsourcekit-lspΛೝࣝͤ͞Δ ௨ৗNBTTPOOWJNʢ-4ཧQMVHJOʣΛར༻ -4ݸผʹཧ͢ΔͷͰͳ͘ɺҰׅઃఆ͢Δ ϓϩδΣΫτSPPUΛHJUʹΑΓఆ
࣮ߦྫʢneovim’s built-in clientʣ SwiftUIܗࣜͷϑΝΠϧͰ ϗόʔใΛݟΔਤ σϑΥϧτઃఆͷͨΊ ৭ɾେ͖͜͞ͷΑ͏ʹͳΔ
LSP͔ΒͷใΛॲཧͰ͖ΔΑ͏ʹͳͬͨ
LSPΛ༻͍ͨิ • ΦϜχิʢΈࠐΈʣ • ddc.vim • coc.nvim • nvim-cmp •
etc… LSP͔ΒͷิใΛvimͷิͱͯ͠ػೳͤ͞Δํ๏ଟذʹΘͨΔ
ͦΕͧΕͷิΤϯδϯͷಛʢภݟʣ ར ܽ ΦϜχิ WJNຊମͷػೳ ͍Β͍͠ EEDWJN ֦ுੑ͕ߴ͍ ઃఆͷࣗ༝͕ߴ͍ ઃఆํ๏ʹ׳ΕΔඞཁੑ͋Γ
DPDOWJN ΦʔϧΠϯϫϯܥͰɺ Α͠ͳʹಈ͘ ࡉ͔͍ઃఆʹऑ͍ OWJNDNQ ༻ऀ͕ଟͦ͏ MVBʹ׳Εͯͳ͍ͱɺ ઃఆ͕Ͱ͖ͳ͍
XcodeͱvimΛซ༻ͯ͠։ൃ͠Α͏
• ϑΝΠϧ࡞ • SwiftUIϓϨϏϡʔ • ߴͳิˍఆٛδϟϯϓ • etc… • ςΩετΦϒδΣΫτ
• ϑΝδʔϑΝΠϯμʔ • vimrcࢿ࢈ͷ׆༻ • etc… 9DPEFܦ༝ͰϑΝΠϧΛ࡞͠ͳ͍ͱ ϑΝΠϧ͕9DPEFʹೝࣝ͞Εͳ͍
ิΠϝʔδਤʢXcodeͷSwiftUIϓϨϏϡʔΛఴ͑ͯ…ʣ • ddc.vimΛ༻ • ิͷઆ໌දࣔ • ϑΝδʔϚον
LSPΛ༻͍ͨఆٛδϟϯϓͷྫ • `ContentView`ͷఆٛॴΛݟΔ߹ • ϑΝδʔϑΝΠϯμʔͰӾཡͰ͖Δ • ϓϨϏϡʔ͍͍ͭͯΔͨΊɺ ࣮ࡍͷδϟϯϓ͠ͳͯ͘ྑ͍ ϑΝδʔϑΝΠϯμʔQMVHJOʢEEVʣΛ༻
·ͱΊ
• ίʔυฤूʹదͨ͠vimͰSourcekit-lspΛಈ͔ͤͨ • XcodeͱvimΛซ༻͢Δͱศར • vimͷػೳΛษڧ͢ΔࣄɺͲ͜ʹͰ׆͔ͤΔ vim͍͍ͧ
ิࢿྉ
vim-lsp, vim-lsp-settingʹ͓͚Δ࠷খߏ sourcekit-lspΛvim-lsp-settingsܦ༝ͰΠϯετʔϧ
coc.nvimʹ͓͚Δ࠷খߏ ઌ΄Ͳղઆͨ͠cocઃఆͷjsonΛ༻
built-in lipʹ͓͚Δ࠷খߏ