Skip to content

Commit c0b7d55

Browse files
committed
(wiki) Improve readability of "Vim vs Neovim" document
1 parent bc18362 commit c0b7d55

File tree

1 file changed

+49
-25
lines changed

1 file changed

+49
-25
lines changed

โ€Žsrc/_wiki/vim/versus-neovim.mdโ€Ž

Lines changed: 49 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,34 +7,58 @@ tags: vim developer-experience
77

88
์ฃผ๋ณ€์—์„œ ํ•˜๋„ ๊ณ„์† ๋ฌผ์–ด๋ด์„œ Vim๊ณผ Neovim์˜ ๊ฒฐ์ •์ ์ธ ์ฐจ์ด์ ์„ ๋ฌธ์„œ๋กœ ๋‚จ๊ธด๋‹ค. ๋‹น์žฅ์€ ์ƒ๊ฐ๋‚˜๋Š”๋Œ€๋กœ ๋‚˜์—ดํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ถ”ํ›„์— ๋‚ด์šฉ์ด ๋” ์ถ”๊ฐ€๋  ์ˆœ ์žˆ๋‹ค.
99

10-
* Vim์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ• ๋•Œ๋Š” **VimScript**๋ฅผ ์“ฐ์ง€๋งŒ, Neovim์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ• ๋•Œ๋Š” **lua**๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
11-
* ๊ฐœ์ธ์ ์œผ๋ก  VimScript๋ฅผ ์„ ํ˜ธํ•˜์ง„ ์•Š๋Š”๋ฐ, vimscript ๊ธฐ๋ฐ˜์œผ๋กœ ์งœ์—ฌ์ ธ ์žˆ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ๊ณ ํ†ต์Šค๋Ÿฌ์› ๋˜ ๊ฒฝํ—˜์ด๊ธฐ๋„ ํ–ˆ๊ณ , vimscript๋ผ๋Š” ์–ธ์–ด ์ž์ฒด๊ฐ€ ๊ทธ๋‹ฅ ๊ฐ€๋…์„ฑ์ด ์ข‹์€ ํŽธ์€ ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๊ธฐ๋Šฅ์ ์œผ๋กœ๋Š” ๋ชจ์ž๋žŒ์ด ์—†์„ ์ˆœ ์žˆ์œผ๋‚˜, ์ฝ์„๋•Œ๋„ ๊ณ ํ†ต์Šค๋Ÿฌ์šด๋ฐ ์ด๊ฑธ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์งœ๋ผ๋ฉด ์–ด์ง€๊ฐ„ํ•˜๋ฉด ํ”ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.
12-
* ๋ฐ˜๋ฉด. lua๋Š” vimscript์— ๋น„ํ•˜๋ฉด ๊ฐ€๋…์„ฑ์ด ์ ๋‹นํžˆ ๋‚˜์œ ํŽธ์€ ์•„๋‹ˆ๋‹ค. ์–ธ์–ด ์ž์ฒด์˜ ๊ธฐ๋Šฅ์œผ๋กœ ๋ณด์ž๋ฉด Python/Ruby/Javascript ๋“ฑ์˜ ์–ธ์–ด์™€ ๋น„๊ตํ–ˆ์„๋•Œ ๊ต‰์žฅํžˆ ์ข€ ๋‚œํ•ดํ•˜๊ฒŒ ๋А๊ปด์งˆ ์ˆ˜๋Š” ์žˆ๋‹ค.[^1] ๋‹ค๋งŒ, lua๋Š” macOS์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ž๋™ํ™” ํˆด์ธ [hammerspoon](https://www.hammerspoon.org/)์ด๋ผ๋˜๊ฐ€, ํ„ฐ๋ฏธ๋„ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์ธ [wezterm](https://wezfurlong.org/wezterm/index.html)์ด๋ผ๋˜๊ฐ€ **Unix ๊ณ„์—ด์˜ CLI ํ”„๋กœ๊ทธ๋žจ์˜ configuration์„ ์ž‘์„ฑํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ ์‚ฌ์‹ค์ƒ De facto์˜ ์—ญํ• **์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์–ธ์–ด ์ž์ฒด๊ฐ€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š๋Š” ๋ถ€๋ถ„์€ ์–ด๋А ์ •๋„ ์žˆ๊ธด ํ•˜์ง€๋งŒ, ๊ฐ€๋…์„ฑ์ด๋‚˜ ๊ฐœ๋ฐœํŽธ์˜์„ฑ์ด ์—„์ฒญ ๋‚˜์œ ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ๋ถ€ํ•  ์ด์œ ๋Š” ๋”ฑํžˆ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์“ฐ๊ณ  ์žˆ๋‹ค.
13-
* Neovim์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ• ๋•Œ ํ™œ์šฉํ•˜๋Š” lua๋Š” luarocks๋ผ๋Š” ํŒจํ‚ค์ง€๋งค๋‹ˆ์ €๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ•„์š”ํ•˜๋‹ค๋ฉด ์–ผ๋งˆ๋“ ์ง€ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ๋‹ค.
14-
* luarocks๋ฅผ ์ด์šฉํ•˜๋Š” Neovim ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๊ทธ๋ ‡๊ฒŒ ๋งŽ์ง€๋Š” ์•Š์ง€๋งŒ, (์‹ค์งˆ์ ์ธ ์“ธ๋ชจ์˜ ์œ ๋ฌด๋ฅผ ๋– ๋‚˜์„œ) luarocks๋ฅผ ํ™œ์šฉํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๋„ ์ข…์ข… ๋ณด์ด๊ธด ํ•œ๋‹ค. ํ™•์‹คํ•œ๊ฑด, lua ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ๋˜์–ด ์˜จ ecosystem์„ ๋“ฑ์— ์—…๊ณ  ์–ธ์ œ๋“ ์ง€ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
15-
* ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒํƒœ๊ณ„๋„ ์ œ๋ฒ• ๊ดœ์ฐฎ์€ ํŽธ์ด๋‹ค.
16-
* telescope / nvim-cmp / treesitter ๊ฐ™์€ ํ‚ค์›Œ๋“œ ์œ„์ฃผ๋กœ๋งŒ ์ฐพ์•„๋ด๋„ ์ด๊ฑธ ์‘์šฉํ•œ ๊ดœ์ฐฎ์€ ๊ธฐ๋Šฅ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์„ ๋งŽ์ด ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค.
17-
* **telescope** - Neovim์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒ€์ƒ‰์—”์ง„์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด๋ด๋„ ๋  ๊ฒƒ ๊ฐ™๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ `:help telescope` ๋งŒ ๋ด๋„ ์•Œ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ํŒŒ์ผ ๊ฒ€์ƒ‰/ํŒจํ„ด ๊ฒ€์ƒ‰ ๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ **query๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋ผ๋ฉด ๋ชจ๋“  ๊ฒƒ์ด๋“  ๋‹ค ํ•ด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์š”์ˆ ๋ด‰**์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค.
18-
* ์˜ˆ๋ฅผ ๋“ค๋ฉด, **git log**๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค๋˜๊ฐ€, ํ˜„์žฌ ์—ด์–ด๋†“์€ ํŒŒ์ผ์˜ **git history๋ฅผ ์—ด๋žŒ**ํ•œ๋‹ค๋˜๊ฐ€, **๊ฐ๊ฐ์˜ ๋ธŒ๋žœ์น˜**์— ๋Œ€ํ•œ git history๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋“ฑ์˜ git๊ณผ ๊ด€๋ จ๋œ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์€ ์ด๋ฏธ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค.
19-
* ์—ฌ๊ธฐ์„œ ์ข€ ๋” ์‘์šฉํ•œ๋‹ค๋ฉด, ์•„๋ž˜์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์ด ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
20-
* ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์†Œ์Šค์ฝ”๋“œ์˜ **ํด๋ž˜์Šค/๋ชจ๋“ˆ/ํ•จ์ˆ˜/์ƒ์ˆ˜ ๊ฒ€์ƒ‰**
21-
* formatter/linter ์˜ค๋ฅ˜ ๊ฒ€์ƒ‰ **(diagnostics)**
22-
* GitHub ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ **issue/PR ๊ฒ€์ƒ‰** -- [pwntester/octo.nvim](https://github.com/pwntester/octo.nvim) ์ฐธ๊ณ 
23-
* throttling๋งŒ ์ž˜ํ•œ๋‹ค๋ฉด **์›น ์š”์ฒญ**์ด๋ž‘๋„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋ก  [์•Œ๋ผ๋”˜ ๊ฒ€์ƒ‰ API์™€ ์—ฐ๋™ํ•˜๋Š” ์‹คํ—˜](https://github.com/malkoG/aladin.nvim)์„ ํ•˜๊ณ  ์žˆ๋‹ค.
24-
* **nvim-cmp** - ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด, ๋ง ๊ทธ๋Œ€๋กœ **์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ**์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ํ”Œ๋Ÿฌ๊ทธ์ธ ecosystem์ด๋‹ค.
25-
* Neovim์—์„œ ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ๋ฐ”๋กœ ์ด ์นœ๊ตฌ๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด ์•„์ฃผ ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.
26-
* pwd ๊ธฐ์ค€์˜ ๊ฒฝ๋กœ ์ž๋™ ์™„์„ฑ / emoji / ๋ฒ„ํผ ๋‚ด์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋‹จ์–ด ์œ„์ฃผ์˜ ์ž๋™์™„์„ฑ ๊ฐ™์€ ์‚ฌ์†Œํ•œ ๊ฒƒ๋ถ€ํ„ฐ **Code Snippet** / **git commit sha1 ํ•ด์‰ฌ** / **GitHub author ์ž๋™ ์™„์„ฑ** / **Language Server์™€ ์—ฐ๋™๋œ auto import** ๊นŒ์ง€ ์ž…๋ง›๋Œ€๋กœ ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„์—์„œ ์„ค๋ช…ํ–ˆ๋˜ telescope์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋ผ๋ฉด ์–ด๋–ป๊ฒŒ๋“  ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅ์„ฑ์€ ๋ฌด๊ถ๋ฌด์ง„ํ•˜๋‹ค.
27-
* **treesitter** - ์‚ฌ์‹ค ์ด๊ฒŒ ์™œ ์ข‹๋ƒ๊ณ  ํ•˜๋ƒ๋ฉด ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์„ค๋“ํ•˜๋Š”๊ฒŒ ์•ฝ๊ฐ„ ์–ด๋ ค์šด ๋‚œ์ œ์ด๊ธฐ๋„ ํ•˜๋‹ค. "๊ตณ์ด?" ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
28-
* [treesitter](https://tree-sitter.github.io/tree-sitter/) ์ž์ฒด๋Š” ํŒŒ์„œ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์ œ๋„ค๋ ˆ์ดํ„ฐ์ผ ๋ฟ์ด์ง€๋งŒ, ํŠธ๋ฆฌ์‹œํ„ฐ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ํŒŒ์„œ๊ฐ€ ํ™œ์šฉ๋„๊ฐ€ ๋†’๊ธฐ ๋•Œ๋ฌธ์— ์œ ์šฉํ•จ์„ ์•Œ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์€ ์ž˜ ์“ฐ๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.
29-
* ์˜ˆ๋ฅผ ๋“ค๋ฉด, ์ปค์Šคํ…€ ๋ฃฐ์„ ์ง€์ •ํ•ด์ฃผ๋ฉด ๋‚ด๊ฐ€ ํƒํ—˜ํ•˜๊ณ ์ž ํ•˜๋Š” ์†Œ์Šค์ฝ”๋“œ์˜ ๋ฒ”์œ„๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ„๋‹จํ•ด์ง„๋‹ค. ์™œ๋ƒ๋ฉด, scheme์œผ๋กœ ์ปค์Šคํ…€ ๋ฃฐ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ์ผ์ข…์˜ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ์ฟผ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
30-
* ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ๋ฐฐ๊ฒฝ์ง€์‹์ด ์žˆ๋Š” ์‚ฌ๋žŒ๋“คํ•œํ…Œ๋Š” ์ข€ ๋” ๋‹จ์ˆœํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ธฐ๋„ ํ•˜๋Š”๋ฐ, **"treesitter๋Š” 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๋ฐ”๋ผ๋ด์•ผ ํ•˜๋Š” ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํŠธ๋ฆฌ๋กœ ๋ฐ”๊ฟ”์„œ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค."** ์ด๋Ÿฐ ํ‘œํ˜„์„ ์ฆ๊ฒจ์“ฐ๋Š” ํŽธ์ด๋‹ค.
31-
* ์ด์— ๋Œ€ํ•ด ์ข€ ๋” ์ง๊ด€์ ์œผ๋กœ ์™€๋‹ฟ์„ ์ˆ˜ ์žˆ๋Š” ์˜ˆ์‹œ๋Š” [ziontee113/syntax-tree-surfer](https://github.com/ziontee113/syntax-tree-surfer)์ธ๋ฐ, ํ•จ์ˆ˜๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋Š” ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š” demo ์˜์ƒ์„ ์‚ดํŽด๋ณด์ž. Syntax tree๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‘ ํ•จ์ˆ˜์˜ ์œ„์น˜๋Š” Tree์˜ ๊ด€์ ์—์„œ ๋ณด๋ฉด sibling์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. **๋‘ ํ•จ์ˆ˜๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋Š” ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š”๊ฒƒ์€ ์‚ฌ์‹ค์ƒ ํŠธ๋ฆฌ ๋…ธ๋“œ์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ**๋กœ ํ™˜์›์ด ๋œ๋‹ค.
32-
33-
* ๊ทธ ์™ธ์—๋„ language server ์ง€์›๋„ ๋‚˜๋ฆ„ ๋‚˜์˜์ง€๋Š” ์•Š์€ ํŽธ์ธ๋ฐ, ์ œ๋Œ€๋กœ ์„ธํŒ…ํ•˜๋ ค๋ฉด ๊ฐ๊ฐ language server๋งˆ๋‹ค ๊ฑธ๋งž๋Š” configuration์„ ํ•ด์ค˜์•ผ ํ•˜๋Š” ์ˆ˜๊ณ ๋กœ์›€์ด ์ƒ๊ธธ ์ˆœ ์žˆ์ง€๋งŒ, [coc-nvim](https://github.com/neoclide/coc.nvim) ์„ธํŒ…ํ•ด๋†”๋„ ๊ฐœ์ธ์ ์œผ๋ก  ํฌ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ๋‹ค.
10+
## ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด๋ถ€ํ„ฐ ๋‹ค๋ฅด๋‹ค (VimScript / Lua)
3411

12+
Vim์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ• ๋•Œ๋Š” **VimScript**๋ฅผ ์“ฐ์ง€๋งŒ, Neovim์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ• ๋•Œ๋Š” **lua**๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
3513

14+
๊ฐœ์ธ์ ์œผ๋ก  VimScript๋ฅผ ์„ ํ˜ธํ•˜์ง„ ์•Š๋Š”๋ฐ, vimscript ๊ธฐ๋ฐ˜์œผ๋กœ ์งœ์—ฌ์ ธ ์žˆ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ๊ณ ํ†ต์Šค๋Ÿฌ์› ๋˜ ๊ฒฝํ—˜์ด๊ธฐ๋„ ํ–ˆ๊ณ , vimscript๋ผ๋Š” ์–ธ์–ด ์ž์ฒด๊ฐ€ ๊ทธ๋‹ฅ ๊ฐ€๋…์„ฑ์ด ์ข‹์€ ํŽธ์€ ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๊ธฐ๋Šฅ์ ์œผ๋กœ๋Š” ๋ชจ์ž๋žŒ์ด ์—†์„ ์ˆœ ์žˆ์œผ๋‚˜, ์ฝ์„๋•Œ๋„ ๊ณ ํ†ต์Šค๋Ÿฌ์šด๋ฐ ์ด๊ฑธ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์งœ๋ผ๋ฉด ์–ด์ง€๊ฐ„ํ•˜๋ฉด ํ”ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.
15+
16+
๋ฐ˜๋ฉด. lua๋Š” vimscript์— ๋น„ํ•˜๋ฉด ๊ฐ€๋…์„ฑ์ด ์ ๋‹นํžˆ ๋‚˜์œ ํŽธ์€ ์•„๋‹ˆ๋‹ค. ์–ธ์–ด ์ž์ฒด์˜ ๊ธฐ๋Šฅ์œผ๋กœ ๋ณด์ž๋ฉด Python/Ruby/Javascript ๋“ฑ์˜ ์–ธ์–ด์™€ ๋น„๊ตํ–ˆ์„๋•Œ ๊ต‰์žฅํžˆ ์ข€ ๋‚œํ•ดํ•˜๊ฒŒ ๋А๊ปด์งˆ ์ˆ˜๋Š” ์žˆ๋‹ค.[^1] ๋‹ค๋งŒ, lua๋Š” macOS์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ž๋™ํ™” ํˆด์ธ [hammerspoon](https://www.hammerspoon.org/)์ด๋ผ๋˜๊ฐ€, ํ„ฐ๋ฏธ๋„ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์ธ [wezterm](https://wezfurlong.org/wezterm/index.html)์ด๋ผ๋˜๊ฐ€ **Unix ๊ณ„์—ด์˜ CLI ํ”„๋กœ๊ทธ๋žจ์˜ configuration์„ ์ž‘์„ฑํ•˜๋Š”๋ฐ ์žˆ์–ด์„œ ์‚ฌ์‹ค์ƒ De facto์˜ ์—ญํ• **์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์–ธ์–ด ์ž์ฒด๊ฐ€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š๋Š” ๋ถ€๋ถ„์€ ์–ด๋А ์ •๋„ ์žˆ๊ธด ํ•˜์ง€๋งŒ, ๊ฐ€๋…์„ฑ์ด๋‚˜ ๊ฐœ๋ฐœํŽธ์˜์„ฑ์ด ์—„์ฒญ ๋‚˜์œ ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ๋ถ€ํ•  ์ด์œ ๋Š” ๋”ฑํžˆ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์“ฐ๊ณ  ์žˆ๋‹ค.
17+
18+
## luarocks ํŒจํ‚ค์ง€์™€ ํ˜ธํ™˜์ด ๋œ๋‹ค
19+
Neovim์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ• ๋•Œ ํ™œ์šฉํ•˜๋Š” lua๋Š” luarocks๋ผ๋Š” ํŒจํ‚ค์ง€๋งค๋‹ˆ์ €๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ•„์š”ํ•˜๋‹ค๋ฉด ์–ผ๋งˆ๋“ ์ง€ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ๋‹ค.
20+
21+
luarocks๋ฅผ ์ด์šฉํ•˜๋Š” Neovim ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ๊ทธ๋ ‡๊ฒŒ ๋งŽ์ง€๋Š” ์•Š์ง€๋งŒ, (์‹ค์งˆ์ ์ธ ์“ธ๋ชจ์˜ ์œ ๋ฌด๋ฅผ ๋– ๋‚˜์„œ) luarocks๋ฅผ ํ™œ์šฉํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๋„ ์ข…์ข… ๋ณด์ด๊ธด ํ•œ๋‹ค. ํ™•์‹คํ•œ๊ฑด, lua ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ๋˜์–ด ์˜จ ecosystem์„ ๋“ฑ์— ์—…๊ณ  ์–ธ์ œ๋“ ์ง€ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
22+
23+
24+
## ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒํƒœ๊ณ„๋„ ์ œ๋ฒ• ๊ดœ์ฐฎ์€ ํŽธ์ด๋‹ค.
25+
**telescope** / **nvim-cmp** / **treesitter** ๊ฐ™์€ ํ‚ค์›Œ๋“œ ์œ„์ฃผ๋กœ๋งŒ ์ฐพ์•„๋ด๋„ ์ด๊ฑธ ์‘์šฉํ•œ ๊ดœ์ฐฎ์€ ๊ธฐ๋Šฅ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์„ ๋งŽ์ด ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค.
26+
27+
### telescope
28+
29+
Neovim์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒ€์ƒ‰์—”์ง„์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด๋ด๋„ ๋  ๊ฒƒ ๊ฐ™๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ `:help telescope` ๋งŒ ๋ด๋„ ์•Œ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ํŒŒ์ผ ๊ฒ€์ƒ‰/ํŒจํ„ด ๊ฒ€์ƒ‰ ๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ **query๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋ผ๋ฉด ์–ด๋–ค ๊ฒƒ์ด๋“  ๋‹ค ํ•ด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์š”์ˆ ๋ด‰**์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค.
30+
31+
์˜ˆ๋ฅผ ๋“ค๋ฉด, **git log**๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค๋˜๊ฐ€, ํ˜„์žฌ ์—ด์–ด๋†“์€ ํŒŒ์ผ์˜ **git history๋ฅผ ์—ด๋žŒ**ํ•œ๋‹ค๋˜๊ฐ€, **๊ฐ๊ฐ์˜ ๋ธŒ๋žœ์น˜**์— ๋Œ€ํ•œ git history๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋“ฑ์˜ git๊ณผ ๊ด€๋ จ๋œ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์€ ์ด๋ฏธ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค.
32+
33+
์—ฌ๊ธฐ์„œ ์ข€ ๋” ์‘์šฉํ•œ๋‹ค๋ฉด, ์•„๋ž˜์˜ ์˜ˆ์‹œ์™€ ๊ฐ™์ด ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
34+
* ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์†Œ์Šค์ฝ”๋“œ์˜ **ํด๋ž˜์Šค/๋ชจ๋“ˆ/ํ•จ์ˆ˜/์ƒ์ˆ˜ ๊ฒ€์ƒ‰**
35+
* formatter/linter ์˜ค๋ฅ˜ ๊ฒ€์ƒ‰ **(diagnostics)**
36+
* GitHub ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ **issue/PR ๊ฒ€์ƒ‰** -- [pwntester/octo.nvim](https://github.com/pwntester/octo.nvim) ์ฐธ๊ณ 
37+
* throttling๋งŒ ์ž˜ํ•œ๋‹ค๋ฉด **์›น ์š”์ฒญ**์ด๋ž‘๋„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋ก  [์•Œ๋ผ๋”˜ ๊ฒ€์ƒ‰ API์™€ ์—ฐ๋™ํ•˜๋Š” ์‹คํ—˜](https://github.com/malkoG/aladin.nvim)์„ ํ•˜๊ณ  ์žˆ๋‹ค.
38+
39+
### nvim-cmp
40+
41+
์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด, ๋ง ๊ทธ๋Œ€๋กœ **์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ**์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ํ”Œ๋Ÿฌ๊ทธ์ธ ecosystem์ด๋‹ค. Neovim์—์„œ ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ๋ฐ”๋กœ ์ด ์นœ๊ตฌ๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด ์•„์ฃผ ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.
42+
43+
pwd ๊ธฐ์ค€์˜ ๊ฒฝ๋กœ ์ž๋™ ์™„์„ฑ / emoji / ๋ฒ„ํผ ๋‚ด์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋‹จ์–ด ์œ„์ฃผ์˜ ์ž๋™์™„์„ฑ ๊ฐ™์€ ์‚ฌ์†Œํ•œ ๊ฒƒ๋ถ€ํ„ฐ **Code Snippet** / **git commit sha1 ํ•ด์‰ฌ** / **GitHub author ์ž๋™ ์™„์„ฑ** / **Language Server์™€ ์—ฐ๋™๋œ auto import** ๊นŒ์ง€ ์ž…๋ง›๋Œ€๋กœ ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„์—์„œ ์„ค๋ช…ํ–ˆ๋˜ telescope์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ฟผ๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋ผ๋ฉด ์–ด๋–ป๊ฒŒ๋“  ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅ์„ฑ์€ ๋ฌด๊ถ๋ฌด์ง„ํ•˜๋‹ค.
44+
45+
### treesitter
46+
47+
์‚ฌ์‹ค ์ด๊ฒŒ ์™œ ์ข‹๋ƒ๊ณ  ํ•˜๋ƒ๋ฉด ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์„ค๋“ํ•˜๋Š”๊ฒŒ ์•ฝ๊ฐ„ ์–ด๋ ค์šด ๋‚œ์ œ์ด๊ธฐ๋„ ํ•˜๋‹ค. "๊ตณ์ด?" ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
48+
49+
[treesitter](https://tree-sitter.github.io/tree-sitter/) ์ž์ฒด๋Š” ํŒŒ์„œ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์ œ๋„ค๋ ˆ์ดํ„ฐ์ผ ๋ฟ์ด์ง€๋งŒ, ํŠธ๋ฆฌ์‹œํ„ฐ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ํŒŒ์„œ๊ฐ€ ํ™œ์šฉ๋„๊ฐ€ ๋†’๊ธฐ ๋•Œ๋ฌธ์— ์œ ์šฉํ•จ์„ ์•Œ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์€ ์ž˜ ์“ฐ๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.
50+
51+
์˜ˆ๋ฅผ ๋“ค๋ฉด, ์ปค์Šคํ…€ ๋ฃฐ์„ ์ง€์ •ํ•ด์ฃผ๋ฉด ๋‚ด๊ฐ€ ํƒํ—˜ํ•˜๊ณ ์ž ํ•˜๋Š” ์†Œ์Šค์ฝ”๋“œ์˜ ๋ฒ”์œ„๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ„๋‹จํ•ด์ง„๋‹ค. ์™œ๋ƒ๋ฉด, scheme์œผ๋กœ ์ปค์Šคํ…€ ๋ฃฐ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ์ผ์ข…์˜ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ์ฟผ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
52+
53+
**์•Œ๊ณ ๋ฆฌ์ฆ˜**์— ๋Œ€ํ•œ ๋ฐฐ๊ฒฝ์ง€์‹์ด ์žˆ๋Š” ์‚ฌ๋žŒ๋“คํ•œํ…Œ๋Š” ์ข€ ๋” ๋‹จ์ˆœํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ธฐ๋„ ํ•˜๋Š”๋ฐ, **"treesitter๋Š” 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๋ฐ”๋ผ๋ด์•ผ ํ•˜๋Š” ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํŠธ๋ฆฌ๋กœ ๋ฐ”๊ฟ”์„œ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค."** ์ด๋Ÿฐ ํ‘œํ˜„์„ ์ฆ๊ฒจ์“ฐ๋Š” ํŽธ์ด๋‹ค.
54+
55+
์ด์— ๋Œ€ํ•ด ์ข€ ๋” ์ง๊ด€์ ์œผ๋กœ ์™€๋‹ฟ์„ ์ˆ˜ ์žˆ๋Š” ์˜ˆ์‹œ๋Š” [ziontee113/syntax-tree-surfer](https://github.com/ziontee113/syntax-tree-surfer)์ธ๋ฐ, ํ•จ์ˆ˜๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋Š” ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š” demo ์˜์ƒ์„ ์‚ดํŽด๋ณด์ž. Syntax tree๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‘ ํ•จ์ˆ˜์˜ ์œ„์น˜๋Š” Tree์˜ ๊ด€์ ์—์„œ ๋ณด๋ฉด sibling์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. **๋‘ ํ•จ์ˆ˜๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋Š” ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š”๊ฒƒ์€ ์‚ฌ์‹ค์ƒ ํŠธ๋ฆฌ ๋…ธ๋“œ์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ**๋กœ ํ™˜์›์ด ๋œ๋‹ค.
56+
57+
## ๊ทธ ์™ธ์—๋„ ๋‘๋“œ๋Ÿฌ์ง€๋Š” ์ ๋“ค
58+
59+
language server ์ง€์›๋„ ๋‚˜๋ฆ„ ๋‚˜์˜์ง€๋Š” ์•Š์€ ํŽธ์ธ๋ฐ, ์ œ๋Œ€๋กœ ์„ธํŒ…ํ•˜๋ ค๋ฉด ๊ฐ๊ฐ language server๋งˆ๋‹ค ๊ฑธ๋งž๋Š” configuration์„ ํ•ด์ค˜์•ผ ํ•˜๋Š” ์ˆ˜๊ณ ๋กœ์›€์ด ์ƒ๊ธธ ์ˆœ ์žˆ์ง€๋งŒ, [coc-nvim](https://github.com/neoclide/coc.nvim) ์„ธํŒ…ํ•ด๋†”๋„ ๊ฐœ์ธ์ ์œผ๋ก  ํฌ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ๋‹ค.
3660

3761
Helix๋ผ๋Š” ์‹ ํฅ๊ฐ•์ž๋„ ์ƒ๊ธฐ๊ณ  ์žˆ๋Š” ๋ชจ์–‘์ด์ง€๋งŒ, 2023๋…„ 11์›” ๊ธฐ์ค€์œผ๋กœ๋Š” ํฌ๊ฒŒ ํ™• ์™€๋‹ฟ์„ ์ •๋„๋กœ ์‚ถ์— ํ˜์‹ ์„ ๊ฐ€์ ธ๋‹ค ์ค„ ๋งŒํ•œ ๋ณ€ํ™”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‹น๋ฌธ๊ฐ„ ๊ด€์‹ฌ์„ ๊ฐ€์ง€๋Š” ๊ฑด ๋ณด๋ฅ˜
3862

3963

40-
[^1]: lua๋ผ๋Š” ์–ธ์–ด์˜ ๋ถˆํŽธํ•จ์— ๋Œ€ํ•ด์„œ๋Š” ๋”ฐ๋กœ ๊ธ€๋กœ ์ž‘์„ฑํ•˜๊ฒŒ ๋  ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ์•„์˜ˆ ๋ชป ์“ฐ๊ฒ ๋‹ค๋ผ๊ณ  ๋А๋‚„ ์ˆ˜์ค€์€ ์•„๋‹ˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฉด์—์„œ ์ธ์ง€ ๋ถ€์กฐํ™”๋ฅผ ๋А๋ผ๊ฒŒ ํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๋ถ€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
64+
[^1]: lua๋ผ๋Š” ์–ธ์–ด์˜ ๋ถˆํŽธํ•จ์— ๋Œ€ํ•ด์„œ๋Š” ๋”ฐ๋กœ ๊ธ€๋กœ ์ž‘์„ฑํ•˜๊ฒŒ ๋  ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ์•„์˜ˆ ๋ชป ์“ฐ๊ฒ ๋‹ค๋ผ๊ณ  ๋А๋‚„ ์ˆ˜์ค€์€ ์•„๋‹ˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฉด์—์„œ ์ธ์ง€ ๋ถ€์กฐํ™”๋ฅผ ๋А๋ผ๊ฒŒ ํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๋ถ€์ •ํ•  ์—ฌ์ง€๊ฐ€ ์—†๋‹ค.

0 commit comments

Comments
ย (0)