Paglabas ng Neovim 0.6.0, isang modernized na bersyon ng Vim editor

Ang Neovim 0.6.0 ay inilabas, isang tinidor ng Vim editor na nakatuon sa pagpapalawak at kakayahang umangkop. Ang proyekto ay muling gumagawa ng Vim code base sa loob ng higit sa pitong taon, bilang isang resulta kung saan ang mga pagbabago ay ginawa na nagpapasimple sa pagpapanatili ng code, nagbibigay ng isang paraan ng paghahati ng paggawa sa pagitan ng ilang mga maintainer, paghiwalayin ang interface mula sa base na bahagi (ang interface ay maaaring maging nagbago nang hindi hinahawakan ang mga panloob) at magpatupad ng bagong napapalawak na arkitektura batay sa mga plugin. Ang mga orihinal na pagpapaunlad ng proyekto ay ipinamamahagi sa ilalim ng lisensya ng Apache 2.0, at ang pangunahing bahagi ay ipinamamahagi sa ilalim ng lisensya ng Vim. Inihanda ang mga handa na asembliya para sa Linux (appimage), Windows at macOS.

Ang isa sa mga problema sa Vim na nag-udyok sa paglikha ng Neovim ay ang namamaga, monolithic code base nito, na binubuo ng higit sa 300 libong linya ng C (C89) code. Iilan lamang sa mga tao ang nakakaunawa sa lahat ng mga nuances ng Vim codebase, at lahat ng mga pagbabago ay kinokontrol ng isang maintainer, na nagpapahirap sa pagpapanatili at pagpapabuti ng editor. Sa halip na ang code na binuo sa Vim core upang suportahan ang GUI, ang Neovim ay nagmumungkahi ng paggamit ng isang unibersal na layer na nagbibigay-daan sa iyo upang lumikha ng mga interface gamit ang iba't ibang mga toolkit.

Ang mga Plugin para sa Neovim ay inilunsad bilang hiwalay na mga proseso, para sa pakikipag-ugnayan kung saan ginagamit ang format ng MessagePack. Ang pakikipag-ugnayan sa mga plugin ay isinasagawa nang asynchronous, nang hindi hinaharangan ang mga pangunahing bahagi ng editor. Upang ma-access ang plugin, maaaring gumamit ng TCP socket, i.e. ang plugin ay maaaring patakbuhin sa isang panlabas na sistema. Kasabay nito, ang Neovim ay nananatiling backward compatible sa Vim, patuloy na sumusuporta sa Vimscript (Inaalok ang Lua bilang alternatibo) at sumusuporta sa mga koneksyon para sa karamihan ng mga karaniwang Vim plugin. Maaaring gamitin ang mga advanced na feature ng Neovim sa mga plugin na binuo gamit ang mga API na partikular sa Neovim.

Sa kasalukuyan, humigit-kumulang 130 partikular na plugin ang naihanda na, magagamit ang mga binding para sa paglikha ng mga plugin at pagpapatupad ng mga interface gamit ang iba't ibang mga programming language (C++, Clojure, Perl, Python, Go, Java, Lisp, Lua, Ruby) at mga frameworks (Qt, ncurses, Node .js, Electron, GTK). Maraming mga pagpipilian sa interface ng gumagamit ay binuo. Ang mga add-on ng GUI ay halos katulad ng mga plugin, ngunit hindi tulad ng mga plugin, sinimulan nila ang mga tawag sa mga function ng Neovim, habang ang mga plugin ay tinatawag mula sa loob ng Neovim.

Ilan sa mga pagbabago sa bagong bersyon:

  • Ang suporta para sa mga lokal na variable ay idinagdag sa mga vim script, na ang saklaw ay limitado lamang ng kasalukuyang script.
  • Malaking pinahusay na suporta sa wika ng Lua para sa pagbuo ng plugin at pamamahala ng configuration. Sa mga vim script, ang kakayahang tumawag sa mga function ng Lua bilang mga pamamaraan ay idinagdag sa pamamagitan ng pagtukoy sa v:lua prefix (halimbawa, β€œarg1->v:lua.somemod.func(arg2)”).
  • Ang mga kakayahan ng built-in na LSP client (Language Server Protocol) ay pinalawak, na maaaring magamit upang ilipat ang logic ng pagsusuri at pagkumpleto ng code sa mga panlabas na server. Ang paggamit ng LSP ay nagpapahintulot sa iyo na gumamit ng higit sa 150 handa na mga tagapangasiwa para sa iba't ibang mga programming language na inihanda para sa editor ng Visual Studio Code.
  • Mga pinahusay na tool para sa pag-diagnose ng mga problema sa code. Nagdagdag ng kakayahang ipakita ang teksto ng mga diagnostic na mensahe at mga lumulutang na window na may code na nauugnay sa mga naturang mensahe. Ang pagproseso ng mga diagnostic na mensahe na ipinadala ng LSP server ay ibinigay.
  • Nagdagdag ng suporta para sa mga virtual na string, na maaaring magamit, halimbawa, upang ipakita ang mga bloke na may impormasyon ng serbisyo.
  • Nagawa na ang iba't ibang pag-optimize ng performance, halimbawa, pinagana ang hash table para sa mga naka-highlight na pangalan ng grupo.
  • Ang suporta para sa Windows 7 at 32-bit na mga build ng Windows ay hindi na ipinagpatuloy.

Pinagmulan: opennet.ru

Magdagdag ng komento