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
ブロックテーマ、WordPress でウェブサイトをつくるということ / 2026.02.07 Gifu WordPress Meetup
torounit
0
180
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
13k
Data Hubグループ 紹介資料
sansan33
PRO
0
2.7k
今日から始めるAmazon Bedrock AgentCore
har1101
4
410
Ruby版 JSXのRuxが気になる
sansantech
PRO
0
150
~Everything as Codeを諦めない~ 後からCDK
mu7889yoon
3
350
ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordPress Meetup
torounit
0
460
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
2
240
クレジットカード決済基盤を支えるSRE - 厳格な監査とSRE運用の両立 (SRE Kaigi 2026)
capytan
6
2.7k
配列に見る bash と zsh の違い
kazzpapa3
1
140
OpenShiftでllm-dを動かそう!
jpishikawa
0
100
レガシー共有バッチ基盤への挑戦 - SREドリブンなリアーキテクチャリングの取り組み
tatsukoni
0
210
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
74
11k
Writing Fast Ruby
sferik
630
62k
Being A Developer After 40
akosma
91
590k
Marketing to machines
jonoalderson
1
4.6k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
64
Designing Experiences People Love
moore
144
24k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
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ʹ͓͚Δ࠷খߏ