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
小さく始めるBCP ― 多プロダクト環境で始める最初の一歩
kekke_n
1
410
予期せぬコストの急増を障害のように扱う――「コスト版ポストモーテム」の導入とその後の改善
muziyoshiz
1
1.8k
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3k
IaaS/SaaS管理における SREの実践 - SRE Kaigi 2026
bbqallstars
4
2.2k
Red Hat OpenStack Services on OpenShift
tamemiya
0
100
Bedrock PolicyでAmazon Bedrock Guardrails利用を強制してみた
yuu551
0
220
AI駆動開発を事業のコアに置く
tasukuonizawa
1
180
Agile Leadership Summit Keynote 2026
m_seki
1
610
今日から始めるAmazon Bedrock AgentCore
har1101
4
410
Cosmos World Foundation Model Platform for Physical AI
takmin
0
870
GitHub Issue Templates + Coding Agentで簡単みんなでIaC/Easy IaC for Everyone with GitHub Issue Templates + Coding Agent
aeonpeople
1
220
【Oracle Cloud ウェビナー】[Oracle AI Database + AWS] Oracle Database@AWSで広がるクラウドの新たな選択肢とAI時代のデータ戦略
oracle4engineer
PRO
2
140
Featured
See All Featured
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.6k
Documentation Writing (for coders)
carmenintech
77
5.3k
Paper Plane
katiecoart
PRO
0
46k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
We Are The Robots
honzajavorek
0
160
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Prompt Engineering for Job Search
mfonobong
0
160
Raft: Consensus for Rubyists
vanstee
141
7.3k
Music & Morning Musume
bryan
47
7.1k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
290
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
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ʹ͓͚Δ࠷খߏ