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

๊ฒŒ์‹œ ๋จ ์„๋ฐฉํ•˜๋‹ค ๋„ค์˜ค๋น” 0.4, Vim ํŽธ์ง‘๊ธฐ์˜ ํฌํฌ, ์ง‘์ค‘๋œ ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์„ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์„ธ์š”. ํ”„๋กœ์ ํŠธ์˜ ์›๋ž˜ ๊ฐœ๋ฐœ ํ™•์‚ฐ Apache 2.0 ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๊ธฐ๋ณธ ๋ถ€๋ถ„์€ Vim ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

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

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

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

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

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

  • ์ƒˆ๋กœ์šด API ๊ธฐ๋Šฅ๊ณผ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฒคํŠธ๊ฐ€ ๋งŽ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Lua ์–ธ์–ด๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ์ƒˆ๋กœ์šด ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Nvim-Lua๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ํ”„๋กœํ† ์ฝœ์˜ ๊ฐœ๋ฐœ์€ ๊ณ„์†๋˜์–ด ๊ฐœ๋ณ„ ๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ๋ผ์ธ ์ˆ˜์ค€์—์„œ ํ™”๋ฉด ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์œ„์น˜์— ๋ฐฐ์น˜ํ•˜๊ณ , ๊ฐœ๋ณ„ ํŽธ์ง‘ ๋ฒ„ํผ์— ์—ฐ๊ฒฐํ•˜๊ณ , ๋ฉ€ํ‹ฐ๊ทธ๋ฆฌ๋“œ ๋ชจ๋“œ๋กœ ๊ทธ๋ฃนํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ณธ๊ฒฉ์ ์ธ ๋ถ€๋™ ์ฐฝ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ˜ํˆฌ๋ช… ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์— 'pumblend' ์˜ต์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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