Vim ํŽธ์ง‘๊ธฐ์˜ ํ˜„๋Œ€ํ™”๋œ ๋ฒ„์ „์ธ Neovim 0.5๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ฝ 0.5๋…„๊ฐ„์˜ ๊ฐœ๋ฐœ ๋์— ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ ํ–ฅ์ƒ์— ์ดˆ์ ์„ ๋งž์ถ˜ Vim ํŽธ์ง‘๊ธฐ์˜ ํฌํฌ์ธ Neovim 2.0๊ฐ€ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” XNUMX๋…„ ๋„˜๊ฒŒ Vim ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ์žฌ์ž‘์—…ํ•ด ์™”์œผ๋ฉฐ ๊ทธ ๊ฒฐ๊ณผ ์ฝ”๋“œ ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ , ์—ฌ๋Ÿฌ ์œ ์ง€ ๊ด€๋ฆฌ์ž ๊ฐ„์— ์ž‘์—…์„ ๋ถ„๋ฐฐํ•˜๋Š” ์ˆ˜๋‹จ์„ ์ œ๊ณตํ•˜๊ณ , ๊ธฐ๋ณธ ๋ถ€๋ถ„์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๋ณ€๊ฒฝ์ด ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค(์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‚ด๋ถ€๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ๋ณ€๊ฒฝ) ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ๋กœ์šด ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ์›๋ž˜ ๊ฐœ๋ฐœ์€ Apache XNUMX ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋˜๋ฉฐ ๊ธฐ๋ณธ ๋ถ€๋ถ„์€ Vim ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

Neovim์„ ๋งŒ๋“ค๊ฒŒ ๋œ Vim์˜ ๋ฌธ์ œ์  ์ค‘ ํ•˜๋‚˜๋Š” 300๋งŒ ์ค„์ด ๋„˜๋Š” C(C89) ์ฝ”๋“œ๋กœ ๊ตฌ์„ฑ๋œ ๋น„๋Œ€ํ•˜๊ณ  ๋ชจ๋†€๋ฆฌ์‹ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์†Œ์ˆ˜์˜ ์‚ฌ๋žŒ๋“ค๋งŒ์ด Vim ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๋ชจ๋“  ๋‰˜์•™์Šค๋ฅผ ์ดํ•ดํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ํ•œ ๋ช…์˜ ๊ด€๋ฆฌ์ž์— ์˜ํ•ด ์ œ์–ด๋˜๋ฏ€๋กœ ํŽธ์ง‘๊ธฐ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ณ  ๊ฐœ์„ ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. GUI๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด Vim ์ฝ”์–ด์— ๋‚ด์žฅ๋œ ์ฝ”๋“œ ๋Œ€์‹  Neovim์€ ๋‹ค์–‘ํ•œ ํˆดํ‚ท์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์šฉ ๋ ˆ์ด์–ด ์‚ฌ์šฉ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

Neovim์šฉ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ MessagePack ํ˜•์‹์ด ์‚ฌ์šฉ๋˜๋Š” ์ƒํ˜ธ ์ž‘์šฉ์„ ์œ„ํ•ด ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ์˜ ์ƒํ˜ธ ์ž‘์šฉ์€ ํŽธ์ง‘๊ธฐ์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ๋น„๋™๊ธฐ์‹์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด TCP ์†Œ์ผ“์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์™ธ๋ถ€ ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— Neovim์€ Vim๊ณผ์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  Vimscript(Lua๊ฐ€ ๋Œ€์•ˆ์œผ๋กœ ์ œ๊ณต๋จ)๋ฅผ ๊ณ„์† ์ง€์›ํ•˜๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ํ‘œ์ค€ Vim ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Neovim์˜ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์€ Neovim ์ „์šฉ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ถ•๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์•ฝ 130์—ฌ๊ฐœ์˜ ํŠน์ • ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์ด๋ฏธ ์ค€๋น„๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด(C++, Clojure, Perl, Python, Go, Java, Lisp, Lua, Ruby)์™€ ํ”„๋ ˆ์ž„์›Œํฌ(Qt, ncurses, Node .js, Electron, GTK). ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์˜ต์…˜์ด ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค. GUI ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•˜์ง€๋งŒ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ๋‹ฌ๋ฆฌ Neovim ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ˜๋ฉด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ Neovim ๋‚ด์—์„œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

์ƒˆ ๋ฒ„์ „์˜ ์ผ๋ถ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ถ„์„ ๋ฐ ์ฝ”๋“œ ์™„์„ฑ์„ ์œ„ํ•ด ์™ธ๋ถ€ ์„œ๋น„์Šค์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด์žฅ LSP ํด๋ผ์ด์–ธํŠธ(์–ธ์–ด ์„œ๋ฒ„ ํ”„๋กœํ† ์ฝœ)๊ฐ€ Lua์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ• ๋‹น ๋ฒ„ํผ์˜ ๋””์ž์ธ์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹API๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ™•์žฅ ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ”์ดํŠธ ์ˆ˜์ค€์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๋Š” API๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฐœ๋ฐœ ๋ฐ ๊ตฌ์„ฑ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์–ธ์–ด๋กœ Lua์— ๋Œ€ํ•œ ์ง€์›์ด ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • tree-sitter ๊ตฌ๋ฌธ ๋ถ„์„ ์—”์ง„์— ๋Œ€ํ•œ ์‹คํ—˜์  ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€