Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
VimからSourcekit-lspを使おう
Search
kamecha
July 20, 2023
Technology
290
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
VimからSourcekit-lspを使おう
kamecha
July 20, 2023
Other Decks in Technology
See All in Technology
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
1
460
継続的なAIコスト最適化
bgpat
1
340
フロントエンドカンファレンス関西2026 - 速すぎるUIに、待ち時間を
teamlab
PRO
0
130
Kiro Crewをはじめよう
kizawa2020
1
160
触りたくないデータに、どう触るか AI時代のRBACアクセスガバナンス
ivry_presentationmaterials
0
260
実践!Cloud Run ハンズオン!! / Cloud Run handson
y0hgi
2
280
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
590
遠藤な_めぐろLT #38 「社内のAI活用推進」@麻布台_20261009
endonanana
0
130
実体験から学ぶ分析エージェントの開発と運⽤
recruitengineers
PRO
8
2.4k
Benchmarking Disaggregated Serving on vLLM + Dynamo with a Real Coding-Agent Workload
nttcom
1
190
Persisting Massive Data with Rails ~Designing for 60 billion rows, and fighting the bottlenecks~ Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
0
730
DGX Spark でどこまでハッキングができるのか?
kash1064
3
1.3k
Featured
See All Featured
エンジニアに許された特別な時間の終わり
watany
109
250k
Tell your own story through comics
letsgokoyo
1
1.1k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
270
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
KATA
mclloyd
PRO
35
16k
Bash Introduction
62gerente
615
220k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Google's AI Overviews - The New Search
badams
0
1.6k
Evolving SEO for Evolving Search Engines
ryanjones
0
330
How to Talk to Developers About Accessibility
jct
2
580
Test your architecture with Archunit
thirion
2
2.4k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
270
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ʹ͓͚Δ࠷খߏ