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
170
VimからSourcekit-lspを使おう
kamecha
July 20, 2023
Tweet
Share
Other Decks in Technology
See All in Technology
Rustで「プリズモイダル法」を利用して「土量計算」をガチでやる
nokonoko1203
1
280
KubeConにproposalを送りたい人へのアドバイス
sat
PRO
3
270
コードファーストの考え方。 Amplify Gen2から学ぶAWS次世代のWeb開発体験
yoshiitaka
2
320
【SORACOM UG 東海】あらゆるモノがつながる社会へ、IoT と SORACOM
soracom
PRO
1
140
生産性向上チームの紹介
cybozuinsideout
PRO
1
910
AWS学習者向けにAzureの解説スライドを作成した話
handy
3
190
AOAI をきっかけに 社内の Azure 管理を見直した話
recruitengineers
PRO
1
450
【基本】データベース設計
oracle4engineer
PRO
2
170
LangSmith入門―トレース/評価/プロンプト管理などを担うLLMアプリ開発プラットフォーム
os1ma
5
700
2024春 注目のWeb系 OSS & SaaS 3選
makies
0
170
Gradle Build Scanを使ってビルドのことを知ろう potatotips #87
tomorrowkey
2
150
M&A戦略を支えるデータマネジメント (MIDAS Tech Study #16 GENDA Komiyama)
kommy339
0
100
Featured
See All Featured
Facilitating Awesome Meetings
lara
43
5.6k
Music & Morning Musume
bryan
41
5.6k
Building Better People: How to give real-time feedback that sticks.
wjessup
356
18k
Being A Developer After 40
akosma
66
580k
Designing on Purpose - Digital PM Summit 2013
jponch
111
6.5k
Become a Pro
speakerdeck
PRO
13
4.6k
A better future with KSS
kneath
231
16k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
41
4.4k
The Brand Is Dead. Long Live the Brand.
mthomps
49
29k
Six Lessons from altMBA
skipperchong
22
3k
How GitHub Uses GitHub to Build GitHub
holman
468
290k
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ʹ͓͚Δ࠷খߏ