{"id":342806,"date":"2022-12-17T15:00:46","date_gmt":"2022-12-17T15:00:46","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=342806"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2022-12-17T15:00:46","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=342806","title":{"rendered":"<span>\u041a\u043e\u043b\u0434\u043e\u0432\u0441\u043a\u043e\u0439 NeoVIM. \u0427\u0430\u0441\u0442\u044c \u0432\u0442\u043e\u0440\u0430\u044f. \u201c\u041a\u043e\u043d\u0444\u0438\u0433 \u0412\u0441\u0435\u0432\u043b\u0430\u0441\u0442\u044c\u044f\u201d<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b60\/712\/66b\/b6071266b7a81e8551d95cf64097ac5c.png\" alt=\"\" title=\"\" width=\"604\" height=\"467\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b60\/712\/66b\/b6071266b7a81e8551d95cf64097ac5c.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u043b\u044e\u0431\u0438\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0438 (\u044f \u0443\u0436 \u0442\u043e\u0447\u043d\u043e). \u041e\u043d\u0438 \u0441\u043a\u0443\u0447\u043d\u044b\u0435 \u0438 \u043d\u0435\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u043d\u044b\u0435.<\/p>\n<p>\u041d\u043e \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u043c Nvim\u2019\u0430 \u044f \u043d\u043e\u0448\u0443\u0441\u044c, \u043a\u0430\u043a \u0413\u043e\u043b\u043b\u0443\u043c \u0441 \u043a\u043e\u043b\u044c\u0446\u043e\u043c \u0412\u0441\u0435\u0432\u043b\u0430\u0441\u0442\u044c\u044f. <em>\u041c\u043e\u044f \u043f\u0440\u0435\u043b\u0435\u0441\u0441\u0441\u0441\u0441\u0442\u044c<\/em>. \u042f \u0431\u043e\u044e\u0441\u044c \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433, \u0431\u043e\u044e\u0441\u044c, \u0447\u0442\u043e \u0441 \u043d\u0438\u043c \u0447\u0442\u043e-\u0442\u043e \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f. <em>\u0414\u0440\u0443\u0433\u0438\u0435 \u0445\u043e\u0442\u044f\u0442 \u0437\u0430\u0431\u0440\u0430\u0442\u044c \u0442\u0435\u0431\u044f, \u043c\u043e\u044f \u043f\u0440\u0435\u043b\u0435\u0441\u0441\u0441\u0441\u0442\u044c. \u0421\u0430\u0448\u0430 \u0442\u0435\u0431\u044f \u0438\u043c \u043d\u0435 \u043e\u0442\u0434\u0430\u0441\u0442, \u043d\u0435\u0442-\u043d\u0435\u0442&#8230;<\/em> <\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u043e\u0442\u043d\u0438\u043c\u0435\u0442 \u043c\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 &#8212; \u044f \u0431\u0443\u0434\u0443 \u0433\u043d\u0430\u0442\u044c\u0441\u044f \u0437\u0430 \u043d\u0438\u043c \u0434\u043e \u0420\u043e\u043a\u043e\u0432\u043e\u0439 \u0413\u043e\u0440\u044b \u0438 \u0434\u0430\u0436\u0435 \u043f\u0440\u044b\u0433\u043d\u0443 \u0432 \u0436\u0435\u0440\u043b\u043e \u0432\u0443\u043b\u043a\u0430\u043d\u0430.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 <em>\u041a\u043e\u043d\u0444\u0438\u0433 \u0412\u0441\u0435\u0432\u043b\u0430\u0441\u0442\u044c\u044f <\/em><s>\u0438 \u043a\u0430\u043a \u0437\u0430\u0432\u043e\u0435\u0432\u0430\u0442\u044c \u0413\u043e\u043d\u0434\u043e\u0440<\/s>.<\/p>\n<h2>\u0417\u0430\u0447\u0435\u043c \u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f \u0441 \u0444\u0430\u0439\u043b\u043e\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438?<\/h2>\n<p>\u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e, \u043a\u0440\u043e\u043c\u0435 \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/39f\/992\/144\/39f992144cd16c9ef8f6fdb5f9a1dc2f.png\" alt=\"\u041c\u043e\u044f \u043f\u0440\u0435\u043b\u0435\u0441\u0441\u0441\u0442\u044c\" title=\"\u041c\u043e\u044f \u043f\u0440\u0435\u043b\u0435\u0441\u0441\u0441\u0442\u044c\" width=\"903\" height=\"483\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/39f\/992\/144\/39f992144cd16c9ef8f6fdb5f9a1dc2f.png\"\/><figcaption>\u041c\u043e\u044f \u043f\u0440\u0435\u043b\u0435\u0441\u0441\u0441\u0442\u044c<\/figcaption><\/figure>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u044b\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c \u0432\u0441\u0435\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u0433\u043e\u0440\u044f\u0447\u0438\u0445 \u043a\u043b\u0430\u0432\u0438\u0448, \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432. \u042d\u0442\u043e \u0441\u0435\u0440\u0434\u0446\u0435 \u043a\u043e\u043b\u0434\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430.<\/p>\n<p><strong>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Neovim \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/strong><\/p>\n<ol>\n<li>\n<p>\u041e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c Neovim.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0441\u0432\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 \u0432 \u043f\u0430\u043f\u043a\u0443 \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0430\u043c\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 (\u043e\u0434\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430)<\/p>\n<\/li>\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u044b (\u043e\u0434\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430)<\/p>\n<\/li>\n<li>\n<p>\u041e\u041f\u0426\u0418\u041e\u041d\u0410\u041b\u042c\u041d\u041e: \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c <abbr class=\"habraabbr\" title=\"Language Server Protocol\" data-title=\"&lt;p>Language Server Protocol&lt;\/p>&#187; data-abbr=&#187;LSP&#187;>LSP<\/abbr>-\u0441\u0435\u0440\u0432\u0435\u0440. \u041e\u0434\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u0451<\/p>\n<\/li>\n<\/ol>\n<p>\u0421\u043f\u0443\u0441\u0442\u044f \u043f\u0430\u0440\u0443 \u043c\u0438\u043d\u0443\u0442 \u0432\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u0440\u0430\u0431\u043e\u0442\u0435. \u0418 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u043e\u0442\u043e\u0432\u044b! \u0412\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u0442\u043e\u0447\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u0442\u043e\u0439 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0441\u0440\u0435\u0434\u044b, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438. \u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0432\u0441\u0451, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0442\u0435\u043c\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f \u0433\u043e\u0440\u044f\u0447\u0438\u043c\u0438 \u043a\u043b\u0430\u0432\u0438\u0448\u0430\u043c\u0438 \u0438 \u043d\u044e\u0430\u043d\u0441\u0430\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0432\u0441\u0435 \u0432\u0430\u0448\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 Nvim\u2019\u044b. \u0420\u0430\u0439 \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439 \u0441 \u043e\u0431\u0441\u0435\u0441\u0441\u0438\u0432\u043d\u043e-\u043a\u043e\u043c\u043f\u0443\u043b\u044c\u0441\u0438\u0432\u043d\u044b\u043c \u0440\u0430\u0441\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432\u2026<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/27f\/8ca\/6d2\/27f8ca6d2272194b1df6fd9316511a0e.jpeg\" width=\"900\" height=\"600\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/27f\/8ca\/6d2\/27f8ca6d2272194b1df6fd9316511a0e.jpeg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u0441\u0435 \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0438 \u043a\u043e\u043b\u0434\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0434\u0440\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u0435\u043b\u0438 \u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0438, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 Lua. \u0410 \u0447\u0435\u043c \u043c\u044b \u0445\u0443\u0436\u0435?<\/p>\n<h2>\u0427\u0443\u0442\u044c-\u0447\u0443\u0442\u044c \u043f\u0440\u043e Lua<\/h2>\n<p><a href=\"https:\/\/www.lua.org\/\" rel=\"noopener noreferrer nofollow\">Lua<\/a> &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0439 \u044f\u0437\u044b\u043a. \u041e\u043d \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430\u043c\u0438. \u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0443\u0434\u0435\u043b\u0435\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0435 \u0434\u0438\u0437\u0430\u0439\u043d\u0430 \u0438 \u043b\u0451\u0433\u043a\u043e\u0441\u0442\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/968\/f2e\/ab7\/968f2eab7472cb24c9810eea2b150100.png\" width=\"1540\" height=\"540\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/968\/f2e\/ab7\/968f2eab7472cb24c9810eea2b150100.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043f\u0438\u0448\u0443\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0434\u043b\u044f \u0438\u0433\u0440, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b, \u0430 \u0435\u0449\u0435 \u043f\u0438\u0448\u0443\u0442 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0435 \u0438 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u043a\u043e\u043b\u0434\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430. <\/p>\n<p>\u041d\u0430 \u0425\u0430\u0431\u0440\u0435 \u043f\u0440\u043e <strong>Lua<\/strong> \u0435\u0441\u0442\u044c \u0434\u0430\u0436\u0435 <a href=\"https:\/\/habr.com\/ru\/hub\/lua\/\" rel=\"noopener noreferrer nofollow\">\u0446\u0435\u043b\u044b\u0439 \u043a\u0430\u043d\u0430\u043b<\/a>. <\/p>\n<h2>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c Nvim  <\/h2>\n<p>\u042f \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e Neovim \u043d\u0430 <strong>Ubuntu 22.04 LTS<\/strong>, \u0430 \u043a\u043e\u043d\u0444\u0438\u0433 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0442\u043e\u0447\u0435\u043d \u043f\u043e\u0434 Python. \u041d\u043e \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043b\u0435\u0433\u043a\u043e \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u043b\u044e\u0431\u0438\u043c\u044b\u0435 \u044f\u0437\u044b\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p><strong>\u041e\u041f\u0426\u0418\u041e\u041d\u0410\u041b\u042c\u041d\u041e:<\/strong> \u0414\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f Neovim \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c 8\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u0435 \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/github.com\/neovim\/neovim\/wiki\/Installing-Neovim\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a> (\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e Nvim 9\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u044e \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 PPA).<\/p>\n<p>\u0421\u0442\u0430\u0440\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0449\u0435:<\/p>\n<pre><code class=\"bash\">$ sudo apt install neovim<\/code><\/pre>\n<p> \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438? \u0422\u0435\u043f\u0435\u0440\u044c \u0443\u0431\u0435\u0434\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u043a\u043e\u043b\u0434\u043e\u0432\u0441\u043a\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043f\u043e\u043f\u0430\u043b \u0432 <strong>$PATH<\/strong>:<\/p>\n<pre><code class=\"bash\">$ nvim --version<\/code><\/pre>\n<p> \u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043b\u044e\u0431\u043e\u0439 \u0444\u0430\u0439\u043b \u0447\u0435\u0440\u0435\u0437: <\/p>\n<pre><code class=\"bash\">$ nvim &lt;file><\/code><\/pre>\n<p> \u0412\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a: <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/20b\/743\/c0c\/20b743c0c4658285f587050a2903dc73.png\" width=\"707\" height=\"45\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/20b\/743\/c0c\/20b743c0c4658285f587050a2903dc73.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0435 \u043f\u0443\u0433\u0430\u0439\u0442\u0435\u0441\u044c. \u042d\u0442\u043e \u0447\u0438\u0441\u0442\u044b\u0439 Nvim. \u041e\u043d \u0443\u0434\u043e\u0431\u0435\u043d, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0431\u044b\u0441\u0442\u0440\u043e \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0435\u0435. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0439\u0442\u0438 \u0438\u0437 \u043a\u043e\u043b\u0434\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430, \u043d\u0430\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>ZQ <\/code>(\u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043f\u0440\u043e\u043f\u0438\u0441\u043d\u044b\u043c\u0438 \u0431\u0443\u043a\u0432\u0430\u043c\u0438).<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>~\/.config\/nvim\/<\/code> . \u0410 \u0432 \u043d\u0435\u043c \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0444\u0430\u0439\u043b\u043e\u0432:<\/p>\n<p> nvim\/<br \/>\u251c\u2500\u2500 init.lua <br \/>\u251c\u2500\u2500 lua\/ <br \/>\u2502\u00a0\u00a0 \u251c\u2500\u2500 keymaps.lua <br \/>\u2502\u00a0\u00a0 \u251c\u2500\u2500 plugins.lua <br \/>\u2502\u00a0\u00a0 \u251c\u2500\u2500 settings.lua <br \/>\u2502\u00a0\u00a0 \u2514\u2500\u2500 treesitter.lua<\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <code>nvim\/<\/code> \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b <code>init.lua<\/code> \u0438 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <code>lua\/<\/code> \u0441 4\u043c\u044f \u0444\u0430\u0439\u043b\u0430\u043c\u0438-\u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438.<\/p>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b:<\/p>\n<details class=\"spoiler\">\n<summary>init.lua \u0422\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430. \u041e\u0442\u0441\u044e\u0434\u0430 Nvim \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lua\">----------------------------------------------------------- -- \u0418\u043c\u043f\u043e\u0440\u0442 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 Lua ----------------------------------------------------------- require('plugins') require('settings')  require('keymaps') require('treesitter')<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>plugins.lua \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lua\">vim.cmd [[packadd packer.nvim]]  return require('packer').startup(function(use)   -- \u0410\u0432\u0442\u043e\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430   use 'wbthomason\/packer.nvim'   ---------------------------------------------------------   -- \u041f\u041b\u0410\u0413\u0418\u041d\u042b \u0412\u041d\u0415\u0428\u041d\u0415\u0413\u041e \u0412\u0418\u0414\u0410   ---------------------------------------------------------   -- \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u043d\u0438\u0437\u0443   use \"kyazdani42\/nvim-web-devicons\"   use { 'nvim-lualine\/lualine.nvim',       requires = {'kyazdani42\/nvim-web-devicons', opt = true},       config = function()       require('lualine').setup()   end, }   -- \u0422\u0435\u043c\u0430 \u0432 \u0441\u0442\u0438\u043b\u0435 Rose Pine   use({     'rose-pine\/neovim',     as = 'rose-pine',     config = function()       vim.cmd('colorscheme rose-pine')     end   })   ---------------------------------------------------------   -- \u041c\u041e\u0414\u0423\u041b\u0418 \u0420\u0415\u0414\u0410\u041a\u0422\u041e\u0420\u0410   ---------------------------------------------------------   -- \u0422\u0430\u0431\u044b \u0441 \u0432\u043a\u043b\u0430\u0434\u043a\u0430\u043c\u0438 \u0441\u0432\u0435\u0440\u0445\u0443   use {'akinsho\/bufferline.nvim',       requires = 'kyazdani42\/nvim-web-devicons',       config = function()       require(\"bufferline\").setup{}   end, }   -- \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u0444\u0430\u0439\u043b\u0435   use 'majutsushi\/tagbar'   -- \u0424\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440   use { 'kyazdani42\/nvim-tree.lua',       requires = 'kyazdani42\/nvim-web-devicons',       config = function()        require'nvim-tree'.setup {}   end, }   --- popup \u043e\u043a\u043e\u0448\u043a\u0438   use 'nvim-lua\/popup.nvim'   ---------------------------------------------------------   -- \u041f\u041e\u0418\u0421\u041a   ---------------------------------------------------------   -- \u041d\u0430\u0448 FuzzySearch   use { 'nvim-telescope\/telescope.nvim',       requires = { {'nvim-lua\/plenary.nvim'} },       config = function()        require'telescope'.setup {}   end, }        ---------------------------------------------------------   -- \u041a\u041e\u0414   ---------------------------------------------------------   -- \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441\u043a\u043e\u0431\u043a\u0438   use { 'windwp\/nvim-autopairs',       config = function()       require(\"nvim-autopairs\").setup()   end}   -- \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u043e &lt;gc> \u0432\u0441\u0435, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f   use { 'numToStr\/Comment.nvim',       config = function()        require('Comment').setup()    end }    ---------------------------------------------------------   -- LSP \u0418 \u0410\u0412\u0422\u041e\u0414\u041e\u041f\u041e\u041b\u041d\u042f\u041b\u041a\u0418   ---------------------------------------------------------   -- Collection of configurations for built-in LSP client   use 'neovim\/nvim-lspconfig'   use 'williamboman\/nvim-lsp-installer'    -- \u0410\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u044f\u043b\u043a\u0430   use 'hrsh7th\/nvim-cmp'   use 'hrsh7th\/cmp-nvim-lsp'   use 'hrsh7th\/cmp-buffer'   use 'saadparwaiz1\/cmp_luasnip'    --- \u0410\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u043b\u044f\u043b\u043a\u0430 \u043a \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435   use 'hrsh7th\/cmp-path'    -- Snippets plugin   use 'L3MON4D3\/LuaSnip'    -- Highlight, edit, and navigate code using a fast incremental parsing library   use 'nvim-treesitter\/nvim-treesitter'    -- \u041b\u0438\u043d\u0442\u0435\u0440, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u044f\u0437\u044b\u043a\u043e\u0432   use 'dense-analysis\/ale'   ---------------------------------------------------------   -- \u0420\u0410\u0417\u041d\u041e\u0415   ---------------------------------------------------------   -- \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0430\u044f \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0430, \u0442\u043e nvim-\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c   use 'powerman\/vim-plugin-ruscmd' end)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>settings.lua \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lua\">local opt = vim.opt  ----------------------------------------------------------- -- \u041e\u0411\u0429\u0418\u0415 \u041e\u041f\u0426\u0418\u0418 ----------------------------------------------------------- opt.mouse = 'a'              --\u0412\u043a\u043b\u044e\u0447\u0438\u0442 \u043c\u044b\u0448\u044c opt.encoding = 'utf-8'       --\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 opt.showcmd = true           --\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 vim.cmd([[ filetype indent plugin on syntax enable ]]) opt.swapfile = false         --\u041d\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0432\u0430\u043f \u0444\u0430\u0439\u043b\u044b  ----------------------------------------------------------- -- \u0412\u0418\u0417\u0423\u0410\u041b\u042c\u041d\u042b\u0415 \u041e\u041f\u0426\u0418\u0418 ----------------------------------------------------------- opt.number = true            --\u041d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a \u0441\u0431\u043e\u043a\u0443 opt.wrap = true              --\u0414\u043b\u0438\u043d\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0434\u043d\u043e opt.expandtab = true         --??? opt.tabstop = 4              --1 tab = 4 \u043f\u0440\u043e\u0431\u0435\u043b\u0430 opt.smartindent = true opt.shiftwidth = 4           --\u0421\u043c\u0435\u0449\u0430\u0435\u043c \u043d\u0430 4 \u043f\u0440\u043e\u0431\u0435\u043b\u0430  -- 2 spaces for selected filetypes vim.cmd [[ autocmd FileType xml,html,xhtml,css,scss,javascript,lua,yaml,htmljinja setlocal shiftwidth=2 tabstop=2 ]]  opt.so = 5                   --\u041e\u0442\u0441\u0442\u0443\u043f \u043a\u0443\u0440\u0441\u043e\u0440\u0430 \u043e\u0442 \u043a\u0440\u0430\u044f \u044d\u043a\u0440\u0430\u043d\u0430 opt.foldcolumn = '2'         --\u0428\u0438\u0440\u0438\u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0434\u043b\u044f \u0444\u043e\u043b\u0434\u043e\u0432 opt.colorcolumn =  '119'     --\u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u043d\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0438  -- remove line lenght marker for selected filetypes vim.cmd [[autocmd FileType text,markdown,html,xhtml,javascript setlocal cc=0]]  opt.cursorline = true        -- \u041f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u043c opt.termguicolors = true  -- \u041a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439 \u0432\u0438\u0434 \u0443 \u0442\u0430\u0433\u0431\u0430\u0440\u0430 \u0438 \u041e\u0442\u043a. \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u0443 \u0442\u0430\u0433\u0431\u0430\u0440\u0430 vim.g.tagbar_compact = 1 vim.g.tagbar_sort = 0  ----------------------------------------------------------- -- \u041d\u0410\u0421\u0422\u0420\u041e\u0419\u041a\u0418 \u041f\u041e\u0418\u0421\u041a\u0410 ----------------------------------------------------------- -- \u0411\u0443\u0434\u0435\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u043a\u0432 \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 opt.ignorecase = true        --\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u043a\u0432 opt.smartcase = true         --\u0418\u0433\u043d\u043e\u0440 \u043f\u0440\u043e\u043f\u0438\u0441\u043d\u044b\u0445 \u0431\u0443\u043a\u0432j  ----------------------------------------------------------- -- \u041f\u041e\u041b\u0415\u0417\u041d\u042b\u0415 \u0424\u0418\u0428\u041a\u0418 ----------------------------------------------------------- -- \u041f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043d\u0430 \u0434\u043e\u043b\u0438 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0430 vim.api.nvim_exec([[ augroup YankHighlight autocmd! autocmd TextYankPost * silent! lua vim.highlight.on_yank{higroup=\"IncSearch\", timeout=300} augroup end ]], false)  ----------------------------------------------------------- -- \u041d\u0410\u0421\u0422\u0420\u041e\u0419\u041a\u0418 \u041f\u041b\u0410\u0413\u0418\u041d\u041e\u0412 ----------------------------------------------------------- -- LSP settings local lsp_installer = require(\"nvim-lsp-installer\") lsp_installer.on_server_ready(function(server)     local opts = {}     if server.name == \"sumneko_lua\" then         -- only apply these settings for the \"sumneko_lua\" server         opts.settings = {             Lua = {                 diagnostics = {                     -- Get the language server to recognize the 'vim', 'use' global                     globals = {'vim', 'use'},                 },                 workspace = {                     -- Make the server aware of Neovim runtime files                     library = vim.api.nvim_get_runtime_file(\"\", true),                 },                 -- Do not send telemetry data containing a randomized but unique identifier                 telemetry = {                     enable = false,                 },             },         }     end     server:setup(opts) end)   -- nvim-cmp supports additional completion capabilities local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) vim.o.completeopt = 'menuone,noselect' -- luasnip setup local luasnip = require 'luasnip' -- nvim-cmp setup local cmp = require 'cmp' cmp.setup {     snippet = {         expand = function(args)             luasnip.lsp_expand(args.body)         end,     },     sources = {         { name = 'nvim_lsp' },         { name = 'luasnip' },         { name = 'path' },         { name = 'buffer', option = {             get_bufnrs = function()                 return vim.api.nvim_list_bufs()             end         },     }, }, }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>keymaps.lua \u041f\u0435\u0440\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lua\">local map = vim.api.nvim_set_keymap local default_opts = {noremap = true, silent = true} ----------------------------------------------------------- -- \u041d\u0410\u0412\u0418\u0413\u0410\u0426\u0418\u042f ----------------------------------------------------------- -- \u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u0438 \u0432 \u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u043c \u0420\u0435\u0436\u0438\u043c\u0435. \u0425\u0430\u0440\u0434\u043a\u043e\u0440! map('', '&lt;up>', ':echoe \"Use hjkl, bro\"&lt;CR>', {noremap = true, silent = false}) map('', '&lt;down>', ':echoe \"Use hjkl, bro\"&lt;CR>', {noremap = true, silent = false}) map('', '&lt;left>', ':echoe \"Use hjkl, bro\"&lt;CR>', {noremap = true, silent = false}) map('', '&lt;right>', ':echoe \"Use hjkl, bro\"&lt;CR>', {noremap = true, silent = false}) -- \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u043a\u043b\u0430\u0434\u043e\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e TAB \u0438\u043b\u0438 shift-tab (akinsho\/bufferline.nvim) map('n', '&lt;Tab>', ':BufferLineCycleNext&lt;CR>', default_opts) map('n', '&lt;S-Tab>', ':BufferLineCyclePrev&lt;CR>', default_opts) -- &lt;F5> \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0438 \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u0439 \u0441\u0442\u0440\u043e\u043a, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0445\u043e\u0434\u0443 map('n', '&lt;F5>', ':exec &amp;nu==&amp;rnu? \"se nu!\" : \"se rnu!\"&lt;CR>', default_opts)  ----------------------------------------------------------- -- \u0420\u0415\u0416\u0418\u041c\u042b ----------------------------------------------------------- -- \u0412\u044b\u0445\u043e\u0434\u0438\u043c \u0432 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0447\u0435\u0440\u0435\u0437 &lt;jk>, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0442\u044f\u043d\u0443\u0442\u044c\u0441\u044f map('i', 'jk', '&lt;Esc>', {noremap = true}) ----------------------------------------------------------- -- \u041f\u041e\u0418\u0421\u041a ----------------------------------------------------------- -- \u0412\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0443 \u043f\u043e\u0438\u0441\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044e ,+&lt;space> map('n', ',&lt;space>', ':nohlsearch&lt;CR>', {noremap = true}) -- Fuzzy Search. CTRL+a \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0444\u0430\u0439\u043b\u0430\u043c, CTRL+p \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0431\u0443\u0444\u0444\u0435\u0440\u0430\u043c map('n', '&lt;C-a>', [[ &lt;cmd>lua require('telescope.builtin').find_files()&lt;cr> ]], default_opts) map('n', '&lt;C-p>', [[ &lt;cmd>lua require('telescope.builtin').buffers()&lt;cr> ]], default_opts) -- &lt;S-F5> \u0413\u0440\u0435\u043f\u043e\u0432\u0441\u043a\u0438\u0439 \u043f\u043e\u0438\u0441\u043a \u0441\u043b\u043e\u0432\u0430 \u043f\u043e\u0434 \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u043c map('n', '&lt;S-F5>', [[&lt;cmd>lua require('telescope.builtin').grep_string()&lt;cr>]], default_opts) -- &lt;S-F4> \u0413\u0440\u0435\u043f\u043e\u0432\u0441\u043a\u0438\u0439 \u043f\u043e\u0438\u0441\u043a \u0441\u043b\u043e\u0432\u0430 \u0432 \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u043c \u043e\u043a\u043e\u0448\u043a\u0435 map('n', '&lt;S-F4>', [[&lt;cmd>lua require('telescope.builtin').live_grep()&lt;cr>]], default_opts) ----------------------------------------------------------- -- \u0424\u0410\u0419\u041b\u042b ----------------------------------------------------------- -- &lt;F8>  \u041f\u043e\u043a\u0430\u0437 \u0434\u0435\u0440\u0435\u0432\u0430 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043f\u043b\u0430\u0433\u0438\u043d majutsushi\/tagbar map('n', '&lt;F8>', ':TagbarToggle&lt;CR>', default_opts) -- &lt;F4> \u0414\u0435\u0440\u0435\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432. \u0414\u043b\u044f \u0438\u043a\u043e\u043d\u043e\u043a \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c Nerd Font map('n', '&lt;F4>', ':NvimTreeRefresh&lt;CR>:NvimTreeToggle&lt;CR>', default_opts)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>treesitter.lua \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 Treesitter<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lua\">require'nvim-treesitter.configs'.setup {   -- \u041f\u0430\u0440\u0441\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c   ensure_installed = { \"lua\", \"python\", \"javascript\", \"typescript\"},    sync_install = false,    -- Automatically install missing parsers when entering buffer   -- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally   auto_install = true,     highlight = {     -- `false` will disable the whole extension     enable = true,      -- Setting this to true will run `:h syntax` and tree-sitter at the same time.     -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation).     -- Using this option may slow down your editor, and you may see some duplicate highlights.     -- Instead of true it can also be a list of languages     additional_vim_regex_highlighting = false,   }, }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0438 \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u044b\u0439, \u0430 \u0435\u0449\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430! \u0421\u043e\u0432\u0435\u0442\u0443\u044e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 Lua, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0435 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<h2>\u041f\u0430\u043a\u0435\u0442\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440  <\/h2>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e76\/a0d\/90b\/e76a0d90b8f687067dc4c83fef01c6b5.png\" width=\"700\" height=\"700\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e76\/a0d\/90b\/e76a0d90b8f687067dc4c83fef01c6b5.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0418 \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f, \u0432\u0435\u0434\u044c \u043c\u044b \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u044b! \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432\/\u043f\u0430\u043a\u0435\u0442\u043e\u0432 <a href=\"https:\/\/github.com\/wbthomason\/packer.nvim\" rel=\"noopener noreferrer nofollow\">\u201cPacker\u201d<\/a>.<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c (\u0434\u043b\u044f Ubuntu): <\/p>\n<pre><code class=\"bash\">$ git clone --depth 1 https:\/\/github.com\/wbthomason\/packer.nvim\\  ~\/.local\/share\/nvim\/site\/pack\/packer\/start\/packer.nvim<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043e\u0442\u043a\u0440\u043e\u0435\u043c \u0432 nvim \u0444\u0430\u0439\u043b <code>plugins.lua<\/code> \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>:PackerSync<\/code><\/p>\n<p>\u0414\u0430, \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0431\u0440\u0430\u0442\u044c \u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u0435 \u0438 \u201cPackerSync\u201d \u0432\u043c\u0435\u0441\u0442\u0435. \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 Nvim \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u043d\u0430\u0431\u0438\u0440\u0430\u0435\u043c\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432 \u043b\u0435\u0432\u043e\u043c-\u043d\u0438\u0436\u043d\u0435\u043c \u0443\u0433\u043b\u0443. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/03a\/68f\/16a\/03a68f16a1adf19c7d8023312450ef4a.png\" width=\"867\" height=\"370\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/03a\/68f\/16a\/03a68f16a1adf19c7d8023312450ef4a.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0432 \u043a\u043e\u043b\u0434\u043e\u0432\u0441\u043a\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0440\u0435\u0436\u0438\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043d\u0430\u0431\u043e\u0440\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b Packer \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u043f\u043b\u0430\u0433\u0438\u043d\u044b. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f90\/dec\/826\/f90dec826d6976851e330c854350833c.png\" width=\"902\" height=\"340\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f90\/dec\/826\/f90dec826d6976851e330c854350833c.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0417\u0430\u0442\u0435\u043c \u0432\u044b\u0439\u0434\u0435\u043c \u0438\u0437 nvim, \u0437\u0430\u0439\u0434\u0435\u043c \u0437\u0430\u043d\u043e\u0432\u043e \u0438 \u043f\u043e\u043b\u044e\u0431\u0443\u0435\u043c\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c. \u0414\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/091\/60f\/e66\/09160fe66c21821ce55eb23c9b647643.png\" width=\"897\" height=\"750\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/091\/60f\/e66\/09160fe66c21821ce55eb23c9b647643.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0439 \u0442\u0435\u043c\u043d\u044b\u0439 \u0444\u043e\u043d, \u043d\u0435\u0442 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u0435\u0441\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430.<\/p>\n<p><strong>\u0415\u0441\u043b\u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0412\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a. \u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u043d\u0438 \u043f\u0440\u044f\u043c\u043e \u0443\u043a\u0430\u0436\u0443\u0442 \u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443. <\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0447\u0442\u043e \u0432 \u0432\u0430\u0448\u0435\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043e\u0434\u0438\u043d \u0438\u0437 <a href=\"https:\/\/www.nerdfonts.com\/\" rel=\"noopener noreferrer nofollow\">Nerd Fonts<\/a>. \u041a\u043e\u043d\u0444\u0438\u0433 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0431\u0435\u0437 \u043d\u0438\u0445 (\u0445\u043e\u0442\u044f \u0438\u043a\u043e\u043d\u043a\u0438 \u043d\u0435 \u0441\u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f), \u043d\u043e \u0432\u044b \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>:checkhealth<\/code> . \u041e\u043d\u0430 \u0434\u0430\u0441\u0442 \u0438\u0441\u0447\u0435\u0440\u043f\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0438\u0434\u0438\u0442 Nvim. \u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043e\u043d \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0443 \u043c\u0435\u043d\u044f \u0441\u0442\u043e\u044f\u043b \u0436\u0443\u0442\u043a\u043e \u0441\u0442\u0430\u0440\u044b\u0439 node, \u0438 Nvim \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u043b \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f).<\/p>\n<\/li>\n<\/ul>\n<h2>LSP  <\/h2>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9bf\/765\/73b\/9bf76573beac6793565f2e53c28b6c7e.png\" width=\"1720\" height=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9bf\/765\/73b\/9bf76573beac6793565f2e53c28b6c7e.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0434\u043d\u0430 \u0438\u0437 \u0432\u0430\u0436\u043d\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u043a \u043a\u043e\u043b\u0434\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 (\u0434\u0430 \u0438 \u043f\u043e\u0447\u0442\u0438 \u043b\u044e\u0431\u043e\u0439 IDE) &#8212; \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 <strong>LSP<\/strong>.<\/p>\n<p><strong>Language Server Protocol &#8212;<\/strong> \u044d\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u0442 \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0421\u0435\u0440\u0432\u0435\u0440-\u041a\u043b\u0438\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f <strong>LSP<\/strong> \u043d\u0430\u0448 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 (\u043d\u043e \u0433\u043e\u0440\u0434\u044b\u0439) Nvim \u043d\u0430\u0443\u0447\u0438\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439\/\u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435.<\/p>\n<p>\u0412 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 LSP-\u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<blockquote>\n<p><strong>\u041a\u043b\u0438\u0435\u043d\u0442 \u2192 JavaScriptLanguageServer:<\/strong> <em>&#171;\u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0438, \u0430 \u0432\u043e\u0442 \u0432 JavaScript \u043c\u044b \u0431\u043b\u043e\u043a\u0438 \u043a\u043e\u0434\u0430 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0438\u043d\u0434\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439?&#187;<\/em><\/p>\n<p><strong>JavaScriptLanguageServer \u2192 \u041a\u043b\u0438\u0435\u043d\u0442:<\/strong> <em>&#171;\u041d\u0435\u0442, \u0443 \u043d\u0430\u0441 \u0432 JS \u0444\u0438\u0433\u0443\u0440\u043d\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438.&#187;<\/em><\/p>\n<p><strong>\u041a\u043b\u0438\u0435\u043d\u0442 \u2192 JavaScriptLanguageServer:<\/strong> <em>&#171;\u0410 \u044d\u0442\u043e \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435?&#187;<\/em><\/p>\n<p><strong>JavaScriptLanguageServer \u2192 \u041a\u043b\u0438\u0435\u043d\u0442:<\/strong> <em>&#171;\u042d\u0442\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f.&#187;<\/em> <\/p>\n<\/blockquote>\n<p><strong>LSP<\/strong> \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043d\u0430\u0448\u0435\u043c\u0443 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043b\u044e\u0431\u044b\u043c\u0438 \u044f\u0437\u044b\u043a\u0430\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u043d\u0430\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443  <code>:LspInstall<\/code>  \u0438 \u0441\u043b\u0435\u0434\u0443\u0439\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c. \u0421\u043e\u0432\u0435\u0442\u0443\u044e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Python \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440 Pyright.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0434\u043b\u044f <code>.lua<\/code> \u0438 <code>.py<\/code> \u0444\u0430\u0439\u043b\u043e\u0432. <\/p>\n<h2>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0430<\/h2>\n<ul>\n<li>\n<p>\u0427\u0435\u0440\u0435\u0437 <code>&lt;F4><\/code> \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u043c\u0443 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0443, \u0430 \u0447\u0435\u0440\u0435\u0437 <code>&lt;F8><\/code> \u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430.<\/p>\n<\/li>\n<li>\n<p><code>&lt;CTRL+a><\/code> \u0414\u0430\u0441\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a fuzzy search, \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043b\u0438\u043d\u0442\u0438\u043d\u0433.<\/p>\n<\/li>\n<li>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>&lt;F5><\/code> \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442 \u043d\u0443\u043c\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0442\u0440\u043e\u043a \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435.<\/p>\n<\/li>\n<li>\n<p><code>&lt;tab><\/code> \u0438 <code>&lt;shift-tab><\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0442\u0430\u0431\u0430\u043c\u0438. \u0418 \u0443 \u043d\u0430\u0441 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u043e\u044f\u0432\u044f\u0442\u0441\u044f \u0442\u0430\u0431\u044b!<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b84\/8dc\/737\/b848dc7376c684b1be9ea166595d3f19.png\" width=\"788\" height=\"89\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b84\/8dc\/737\/b848dc7376c684b1be9ea166595d3f19.png\"\/><figcaption><\/figcaption><\/figure>\n<ul>\n<li>\n<p>\u0418 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435<\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u043b\u0434\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 &#8212; \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043e\u0431\u044a\u0435\u043c\u043d\u0430\u044f \u0442\u0435\u043c\u0430. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043c\u043e\u0447\u044c \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Nvim \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0441 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0439 IDE \u0447\u0443\u0442\u044c \u043b\u0435\u0433\u0447\u0435!<\/p>\n<p>\u0418 \u0445\u043e\u0447\u0443 \u043f\u043e\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u0442\u044c \u043b\u044e\u0434\u0435\u0439, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0441\u0432\u043e\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Nvim:<\/p>\n<ul>\n<li>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0425\u0430\u0431\u0440\u0430 \u0441 \u043d\u0438\u043a\u043e\u043c <a href=\"https:\/\/habr.com\/ru\/users\/Rilkener\/\" rel=\"noopener noreferrer nofollow\">Rilkener<\/a><\/p>\n<\/li>\n<li>\n<p>\u0421\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 Nvim&#8217;\u0438\u0441\u0442 \u043d\u0430 \u0441\u0432\u0435\u0442\u0435 <a href=\"https:\/\/www.youtube.com\/@ThePrimeagen\" rel=\"noopener noreferrer nofollow\">Primeagen<\/a><\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0410 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u0420\u0435\u0436\u0438\u043c\u0430\u043c\u0438 \u0432 Nvim!<\/strong>    <\/p>\n<\/div>\n<\/div>\n<\/div>\n<p> <!----> <!----><\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/706110\/\"> https:\/\/habr.com\/ru\/post\/706110\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u043b\u044e\u0431\u0438\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0438 (\u044f \u0443\u0436 \u0442\u043e\u0447\u043d\u043e). \u041e\u043d\u0438 \u0441\u043a\u0443\u0447\u043d\u044b\u0435 \u0438 \u043d\u0435\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u043d\u044b\u0435.<\/p>\n<p>\u041d\u043e \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u043c Nvim\u2019\u0430 \u044f \u043d\u043e\u0448\u0443\u0441\u044c, \u043a\u0430\u043a \u0413\u043e\u043b\u043b\u0443\u043c \u0441 \u043a\u043e\u043b\u044c\u0446\u043e\u043c \u0412\u0441\u0435\u0432\u043b\u0430\u0441\u0442\u044c\u044f. <em>\u041c\u043e\u044f \u043f\u0440\u0435\u043b\u0435\u0441\u0441\u0441\u0441\u0441\u0442\u044c<\/em>. \u042f \u0431\u043e\u044e\u0441\u044c \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0441\u0432\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433, \u0431\u043e\u044e\u0441\u044c, \u0447\u0442\u043e \u0441 \u043d\u0438\u043c \u0447\u0442\u043e-\u0442\u043e \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f. <em>\u0414\u0440\u0443\u0433\u0438\u0435 \u0445\u043e\u0442\u044f\u0442 \u0437\u0430\u0431\u0440\u0430\u0442\u044c \u0442\u0435\u0431\u044f, \u043c\u043e\u044f \u043f\u0440\u0435\u043b\u0435\u0441\u0441\u0441\u0441\u0442\u044c. \u0421\u0430\u0448\u0430 \u0442\u0435\u0431\u044f \u0438\u043c \u043d\u0435 \u043e\u0442\u0434\u0430\u0441\u0442, \u043d\u0435\u0442-\u043d\u0435\u0442&#8230;<\/em> <\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u043e\u0442\u043d\u0438\u043c\u0435\u0442 \u043c\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 &#8212; \u044f \u0431\u0443\u0434\u0443 \u0433\u043d\u0430\u0442\u044c\u0441\u044f \u0437\u0430 \u043d\u0438\u043c \u0434\u043e \u0420\u043e\u043a\u043e\u0432\u043e\u0439 \u0413\u043e\u0440\u044b \u0438 \u0434\u0430\u0436\u0435 \u043f\u0440\u044b\u0433\u043d\u0443 \u0432 \u0436\u0435\u0440\u043b\u043e \u0432\u0443\u043b\u043a\u0430\u043d\u0430.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 <em>\u041a\u043e\u043d\u0444\u0438\u0433 \u0412\u0441\u0435\u0432\u043b\u0430\u0441\u0442\u044c\u044f <\/em><s>\u0438 \u043a\u0430\u043a \u0437\u0430\u0432\u043e\u0435\u0432\u0430\u0442\u044c \u0413\u043e\u043d\u0434\u043e\u0440<\/s>.<\/p>\n<h2>\u0417\u0430\u0447\u0435\u043c \u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f \u0441 \u0444\u0430\u0439\u043b\u043e\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438?<\/h2>\n<p>\u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e, \u043a\u0440\u043e\u043c\u0435 \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<figure class=\"full-width\"><figcaption>\u041c\u043e\u044f \u043f\u0440\u0435\u043b\u0435\u0441\u0441\u0441\u0442\u044c<\/figcaption><\/figure>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u044b\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c \u0432\u0441\u0435\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u0433\u043e\u0440\u044f\u0447\u0438\u0445 \u043a\u043b\u0430\u0432\u0438\u0448, \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432. \u042d\u0442\u043e \u0441\u0435\u0440\u0434\u0446\u0435 \u043a\u043e\u043b\u0434\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430.<\/p>\n<p><strong>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Neovim \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/strong><\/p>\n<ol>\n<li>\n<p>\u041e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c Neovim.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0441\u0432\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 \u0432 \u043f\u0430\u043f\u043a\u0443 \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0430\u043c\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 (\u043e\u0434\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430)<\/p>\n<\/li>\n<li>\n<p>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u044b (\u043e\u0434\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430)<\/p>\n<\/li>\n<li>\n<p>\u041e\u041f\u0426\u0418\u041e\u041d\u0410\u041b\u042c\u041d\u041e: \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c <abbr class=\"habraabbr\" title=\"Language Server Protocol\" data-title=\"&lt;p>Language Server Protocol&lt;\/p>&#187; data-abbr=&#187;LSP&#187;>LSP<\/abbr>-\u0441\u0435\u0440\u0432\u0435\u0440. \u041e\u0434\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u0451<\/p>\n<\/li>\n<\/ol>\n<p>\u0421\u043f\u0443\u0441\u0442\u044f \u043f\u0430\u0440\u0443 \u043c\u0438\u043d\u0443\u0442 \u0432\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u0440\u0430\u0431\u043e\u0442\u0435. \u0418 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u043e\u0442\u043e\u0432\u044b! \u0412\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u0442\u043e\u0447\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u0442\u043e\u0439 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0441\u0440\u0435\u0434\u044b, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438. \u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0432\u0441\u0451, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0442\u0435\u043c\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f \u0433\u043e\u0440\u044f\u0447\u0438\u043c\u0438 \u043a\u043b\u0430\u0432\u0438\u0448\u0430\u043c\u0438 \u0438 \u043d\u044e\u0430\u043d\u0441\u0430\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0432\u0441\u0435 \u0432\u0430\u0448\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 Nvim\u2019\u044b. \u0420\u0430\u0439 \u0434\u043b\u044f \u043b\u044e\u0434\u0435\u0439 \u0441 \u043e\u0431\u0441\u0435\u0441\u0441\u0438\u0432\u043d\u043e-\u043a\u043e\u043c\u043f\u0443\u043b\u044c\u0441\u0438\u0432\u043d\u044b\u043c \u0440\u0430\u0441\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432\u2026<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0421 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u0441\u0435 \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0438 \u043a\u043e\u043b\u0434\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0434\u0440\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u0435\u043b\u0438 \u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0438, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 Lua. \u0410 \u0447\u0435\u043c \u043c\u044b \u0445\u0443\u0436\u0435?<\/p>\n<h2>\u0427\u0443\u0442\u044c-\u0447\u0443\u0442\u044c \u043f\u0440\u043e Lua<\/h2>\n<p><a href=\"https:\/\/www.lua.org\/\" rel=\"noopener noreferrer nofollow\">Lua<\/a> &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0439 \u044f\u0437\u044b\u043a. \u041e\u043d \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430\u043c\u0438. \u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0443\u0434\u0435\u043b\u0435\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0435 \u0434\u0438\u0437\u0430\u0439\u043d\u0430 \u0438 \u043b\u0451\u0433\u043a\u043e\u0441\u0442\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043f\u0438\u0448\u0443\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0434\u043b\u044f \u0438\u0433\u0440, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b, \u0430 \u0435\u0449\u0435 \u043f\u0438\u0448\u0443\u0442 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0435 \u0438 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0438 \u043a\u043e\u043b\u0434\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430. <\/p>\n<p>\u041d\u0430 \u0425\u0430\u0431\u0440\u0435 \u043f\u0440\u043e <strong>Lua<\/strong> \u0435\u0441\u0442\u044c \u0434\u0430\u0436\u0435 <a href=\"https:\/\/habr.com\/ru\/hub\/lua\/\" rel=\"noopener noreferrer nofollow\">\u0446\u0435\u043b\u044b\u0439 \u043a\u0430\u043d\u0430\u043b<\/a>. <\/p>\n<h2>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c Nvim  <\/h2>\n<p>\u042f \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e Neovim \u043d\u0430 <strong>Ubuntu 22.04 LTS<\/strong>, \u0430 \u043a\u043e\u043d\u0444\u0438\u0433 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0442\u043e\u0447\u0435\u043d \u043f\u043e\u0434 Python. \u041d\u043e \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043b\u0435\u0433\u043a\u043e \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u043b\u044e\u0431\u0438\u043c\u044b\u0435 \u044f\u0437\u044b\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p><strong>\u041e\u041f\u0426\u0418\u041e\u041d\u0410\u041b\u042c\u041d\u041e:<\/strong> \u0414\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f Neovim \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c 8\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u0435 \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/github.com\/neovim\/neovim\/wiki\/Installing-Neovim\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a> (\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e Nvim 9\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u044e \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 PPA).<\/p>\n<p>\u0421\u0442\u0430\u0440\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0449\u0435:<\/p>\n<pre><code class=\"bash\">$ sudo apt install neovim<\/code><\/pre>\n<p> \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438? \u0422\u0435\u043f\u0435\u0440\u044c \u0443\u0431\u0435\u0434\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u043a\u043e\u043b\u0434\u043e\u0432\u0441\u043a\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043f\u043e\u043f\u0430\u043b \u0432 <strong>$PATH<\/strong>:<\/p>\n<pre><code class=\"bash\">$ nvim --version<\/code><\/pre>\n<p> \u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043b\u044e\u0431\u043e\u0439 \u0444\u0430\u0439\u043b \u0447\u0435\u0440\u0435\u0437: <\/p>\n<pre><code class=\"bash\">$ nvim &lt;file><\/code><\/pre>\n<p> \u0412\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a: <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0435 \u043f\u0443\u0433\u0430\u0439\u0442\u0435\u0441\u044c. \u042d\u0442\u043e \u0447\u0438\u0441\u0442\u044b\u0439 Nvim. \u041e\u043d \u0443\u0434\u043e\u0431\u0435\u043d, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0431\u044b\u0441\u0442\u0440\u043e \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0435\u0435. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0439\u0442\u0438 \u0438\u0437 \u043a\u043e\u043b\u0434\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430, \u043d\u0430\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>ZQ <\/code>(\u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043f\u0440\u043e\u043f\u0438\u0441\u043d\u044b\u043c\u0438 \u0431\u0443\u043a\u0432\u0430\u043c\u0438).<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>~\/.config\/nvim\/<\/code> . \u0410 \u0432 \u043d\u0435\u043c \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0444\u0430\u0439\u043b\u043e\u0432:<\/p>\n<p> nvim\/<br \/>\u251c\u2500\u2500 init.lua <br \/>\u251c\u2500\u2500 lua\/ <br \/>\u2502\u00a0\u00a0 \u251c\u2500\u2500 keymaps.lua <br \/>\u2502\u00a0\u00a0 \u251c\u2500\u2500 plugins.lua <br \/>\u2502\u00a0\u00a0 \u251c\u2500\u2500 settings.lua <br \/>\u2502\u00a0\u00a0 \u2514\u2500\u2500 treesitter.lua<\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <code>nvim\/<\/code> \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b <code>init.lua<\/code> \u0438 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <code>lua\/<\/code> \u0441 4\u043c\u044f \u0444\u0430\u0439\u043b\u0430\u043c\u0438-\u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438.<\/p>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b:<\/p>\n<details class=\"spoiler\">\n<summary>init.lua \u0422\u043e\u0447\u043a\u0430 \u0432\u0445\u043e\u0434\u0430. \u041e\u0442\u0441\u044e\u0434\u0430 Nvim \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e.<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lua\">----------------------------------------------------------- -- \u0418\u043c\u043f\u043e\u0440\u0442 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 Lua ----------------------------------------------------------- require('plugins') require('settings')  require('keymaps') require('treesitter')<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>plugins.lua \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lua\">vim.cmd [[packadd packer.nvim]]  return require('packer').startup(function(use)   -- \u0410\u0432\u0442\u043e\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430   use 'wbthomason\/packer.nvim'   ---------------------------------------------------------   -- \u041f\u041b\u0410\u0413\u0418\u041d\u042b \u0412\u041d\u0415\u0428\u041d\u0415\u0413\u041e \u0412\u0418\u0414\u0410   ---------------------------------------------------------   -- \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u043d\u0438\u0437\u0443   use \"kyazdani42\/nvim-web-devicons\"   use { 'nvim-lualine\/lualine.nvim',       requires = {'kyazdani42\/nvim-web-devicons', opt = true},       config = function()       require('lualine').setup()   end, }   -- \u0422\u0435\u043c\u0430 \u0432 \u0441\u0442\u0438\u043b\u0435 Rose Pine   use({     'rose-pine\/neovim',     as = 'rose-pine',     config = function()       vim.cmd('colorscheme rose-pine')     end   })   ---------------------------------------------------------   -- \u041c\u041e\u0414\u0423\u041b\u0418 \u0420\u0415\u0414\u0410\u041a\u0422\u041e\u0420\u0410   ---------------------------------------------------------   -- \u0422\u0430\u0431\u044b \u0441 \u0432\u043a\u043b\u0430\u0434\u043a\u0430\u043c\u0438 \u0441\u0432\u0435\u0440\u0445\u0443   use {'akinsho\/bufferline.nvim',       requires = 'kyazdani42\/nvim-web-devicons',       config = function()       require(\"bufferline\").setup{}   end, }   -- \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u0444\u0430\u0439\u043b\u0435   use 'majutsushi\/tagbar'   -- \u0424\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440   use { 'kyazdani42\/nvim-tree.lua',       requires = 'kyazdani42\/nvim-web-devicons',       config = function()        require'nvim-tree'.setup {}   end, }   --- popup \u043e\u043a\u043e\u0448\u043a\u0438   use 'nvim-lua\/popup.nvim'   ---------------------------------------------------------   -- \u041f\u041e\u0418\u0421\u041a   ---------------------------------------------------------   -- \u041d\u0430\u0448 FuzzySearch   use { 'nvim-telescope\/telescope.nvim',       requires = { {'nvim-lua\/plenary.nvim'} },       config = function()        require'telescope'.setup {}   end, }        ---------------------------------------------------------   -- \u041a\u041e\u0414   ---------------------------------------------------------   -- \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441\u043a\u043e\u0431\u043a\u0438   use { 'windwp\/nvim-autopairs',       config = function()       require(\"nvim-autopairs\").setup()   end}   -- \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u043e &lt;gc> \u0432\u0441\u0435, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f   use { 'numToStr\/Comment.nvim',       config = function()        require('Comment').setup()    end }    ---------------------------------------------------------   -- LSP \u0418 \u0410\u0412\u0422\u041e\u0414\u041e\u041f\u041e\u041b\u041d\u042f\u041b\u041a\u0418   ---------------------------------------------------------   -- Collection of configurations for built-in LSP client   use 'neovim\/nvim-lspconfig'   use 'williamboman\/nvim-lsp-installer'    -- \u0410\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u044f\u043b\u043a\u0430   use 'hrsh7th\/nvim-cmp'   use 'hrsh7th\/cmp-nvim-lsp'   use 'hrsh7th\/cmp-buffer'   use 'saadparwaiz1\/cmp_luasnip'    --- \u0410\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u043b\u044f\u043b\u043a\u0430 \u043a \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435   use 'hrsh7th\/cmp-path'    -- Snippets plugin   use 'L3MON4D3\/LuaSnip'    -- Highlight, edit, and navigate code using a fast incremental parsing library   use 'nvim-treesitter\/nvim-treesitter'    -- \u041b\u0438\u043d\u0442\u0435\u0440, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u044f\u0437\u044b\u043a\u043e\u0432   use 'dense-analysis\/ale'   ---------------------------------------------------------   -- \u0420\u0410\u0417\u041d\u041e\u0415   ---------------------------------------------------------   -- \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0430\u044f \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0430, \u0442\u043e nvim-\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c   use 'powerman\/vim-plugin-ruscmd' end)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>settings.lua \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lua\">local opt = vim.opt  ----------------------------------------------------------- -- \u041e\u0411\u0429\u0418\u0415 \u041e\u041f\u0426\u0418\u0418 ----------------------------------------------------------- opt.mouse = 'a'              --\u0412\u043a\u043b\u044e\u0447\u0438\u0442 \u043c\u044b\u0448\u044c opt.encoding = 'utf-8'       --\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 opt.showcmd = true           --\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 vim.cmd([[ filetype indent plugin on syntax enable ]]) opt.swapfile = false         --\u041d\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0432\u0430\u043f \u0444\u0430\u0439\u043b\u044b  ----------------------------------------------------------- -- \u0412\u0418\u0417\u0423\u0410\u041b\u042c\u041d\u042b\u0415 \u041e\u041f\u0426\u0418\u0418 ----------------------------------------------------------- opt.number = true            --\u041d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a \u0441\u0431\u043e\u043a\u0443 opt.wrap = true              --\u0414\u043b\u0438\u043d\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0434\u043d\u043e opt.expandtab = true         --??? opt.tabstop = 4              --1 tab = 4 \u043f\u0440\u043e\u0431\u0435\u043b\u0430 opt.smartindent = true opt.shiftwidth = 4           --\u0421\u043c\u0435\u0449\u0430\u0435\u043c \u043d\u0430 4 \u043f\u0440\u043e\u0431\u0435\u043b\u0430  -- 2 spaces for selected filetypes vim.cmd [[ autocmd FileType xml,html,xhtml,css,scss,javascript,lua,yaml,htmljinja setlocal shiftwidth=2 tabstop=2 ]]  opt.so = 5                   --\u041e\u0442\u0441\u0442\u0443\u043f \u043a\u0443\u0440\u0441\u043e\u0440\u0430 \u043e\u0442 \u043a\u0440\u0430\u044f \u044d\u043a\u0440\u0430\u043d\u0430 opt.foldcolumn = '2'         --\u0428\u0438\u0440\u0438\u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0434\u043b\u044f \u0444\u043e\u043b\u0434\u043e\u0432 opt.colorcolumn =  '119'     --\u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u043d\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0438  -- remove line lenght marker for selected filetypes vim.cmd [[autocmd FileType text,markdown,html,xhtml,javascript setlocal cc=0]]  opt.cursorline = true        -- \u041f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u043c opt.termguicolors = true  -- \u041a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439 \u0432\u0438\u0434 \u0443 \u0442\u0430\u0433\u0431\u0430\u0440\u0430 \u0438 \u041e\u0442\u043a. \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u0443 \u0442\u0430\u0433\u0431\u0430\u0440\u0430 vim.g.tagbar_compact = 1 vim.g.tagbar_sort = 0  ----------------------------------------------------------- -- \u041d\u0410\u0421\u0422\u0420\u041e\u0419\u041a\u0418 \u041f\u041e\u0418\u0421\u041a\u0410 ----------------------------------------------------------- -- \u0411\u0443\u0434\u0435\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u043a\u0432 \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 opt.ignorecase = true        --\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u043a\u0432 opt.smartcase = true         --\u0418\u0433\u043d\u043e\u0440 \u043f\u0440\u043e\u043f\u0438\u0441\u043d\u044b\u0445 \u0431\u0443\u043a\u0432j  ----------------------------------------------------------- -- \u041f\u041e\u041b\u0415\u0417\u041d\u042b\u0415 \u0424\u0418\u0428\u041a\u0418 ----------------------------------------------------------- -- \u041f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043d\u0430 \u0434\u043e\u043b\u0438 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0430 vim.api.nvim_exec([[ augroup YankHighlight autocmd! autocmd TextYankPost * silent! lua vim.highlight.on_yank{higroup=\"IncSearch\", timeout=300} augroup end ]], false)  ----------------------------------------------------------- -- \u041d\u0410\u0421\u0422\u0420\u041e\u0419\u041a\u0418 \u041f\u041b\u0410\u0413\u0418\u041d\u041e\u0412 ----------------------------------------------------------- -- LSP settings local lsp_installer = require(\"nvim-lsp-installer\") lsp_installer.on_server_ready(function(server)     local opts = {}     if server.name == \"sumneko_lua\" then         -- only apply these settings for the \"sumneko_lua\" server         opts.settings = {             Lua = {                 diagnostics = {                     -- Get the language server to recognize the 'vim', 'use' global                     globals = {'vim', 'use'},                 },                 workspace = {                     -- Make the server aware of Neovim runtime files                     library = vim.api.nvim_get_runtime_file(\"\", true),                 },                 -- Do not send telemetry data containing a randomized but unique identifier                 telemetry = {<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-342806","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/342806","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=342806"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/342806\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=342806"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=342806"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=342806"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}