{"id":354549,"date":"2024-05-20T22:50:31","date_gmt":"2024-05-20T22:50:31","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=354549"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=354549","title":{"rendered":"<span>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Neovim \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 IDE \u0434\u043b\u044f Java<\/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<p>\u0412\u043f\u0435\u0440\u0432\u044b\u0435 \u044f \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0441\u044f \u0441 Vim \u0432 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0435, \u0438 \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440 \u043e\u043d \u0431\u044b\u043b \u0436\u0435\u043b\u0430\u043d\u043d\u044b\u043c \u0441\u043f\u0443\u0442\u043d\u0438\u043a\u043e\u043c \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u043e\u0435\u0439 \u043a\u0430\u0440\u044c\u0435\u0440\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430. \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438 \u043d\u0430 Python \u0438 Go \u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043c\u043d\u0435 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441 Vim, \u0438 \u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0441\u0435\u0431\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u044b\u043c. \u0410 \u0432\u043e\u0442 Java \u0431\u044b\u043b\u0430 \u0434\u0440\u0443\u0433\u0438\u043c \u0437\u0432\u0435\u0440\u0435\u043c. \u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u044f\u0432\u043b\u044f\u043b\u0430\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 Java, \u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b Vim, \u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u043a IntelliJ \u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0443 <a href=\"https:\/\/lp.jetbrains.com\/ideavim\/\" rel=\"noopener noreferrer nofollow\">IdeaVim<\/a>, \u0447\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u043e\u0433\u0430\u0442\u044b\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u044f\u0437\u044b\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0430\u044f IDE.<\/p>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0443 IntelliJ \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u0412 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435, \u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 \u0432 \u043d\u0435\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u043e\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0432\u0441\u0435 \u043a\u044d\u0448\u0438, \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u043e \u043f\u043e\u043b\u0434\u043d\u044f \u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u0430 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u043f\u043e \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044e \u0435\u0451 \u043d\u0435\u043f\u043e\u043b\u0430\u0434\u043e\u043a. \u041f\u0440\u043e\u0439\u0434\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u044e \u044d\u0442\u0443 \u043f\u0435\u0441\u043d\u044e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043d\u0430\u0437\u0430\u0434, \u0438 \u0433\u043b\u044f\u0434\u044f \u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0432 Vim, Neovim, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 <a href=\"https:\/\/microsoft.github.io\/language-server-protocol\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (Language Server Protocol, LSP)<\/a> \u0438 \u0438\u0445 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439, \u044f \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0435\u0449\u0451 \u0440\u0430\u0437 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <a href=\"https:\/\/neovim.io\/\" rel=\"noopener noreferrer nofollow\">Neovim<\/a> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 Java IDE.<\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u044d\u0442\u043e? \u0414\u0430. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043b\u0438 \u044f \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c? \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u0421\u043e\u0448\u0435\u043b \u043b\u0438 \u044f \u0441 \u0443\u043c\u0430? \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e.<\/p>\n<p>\u041f\u043e\u0435\u0445\u0430\u043b\u0438.<\/p>\n<blockquote>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u043e\u043b\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043e\u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043d\u0430 <a href=\"https:\/\/github.com\/soofaloofa\/dotfiles\/tree\/master\/.config\/nvim\" rel=\"noopener noreferrer nofollow\">Github<\/a>.<\/p>\n<\/blockquote>\n<h3>\u041b\u0430\u043d\u0434\u0448\u0430\u0444\u0442<\/h3>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c Neovim \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0432 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0443\u044e IDE, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0438\u0436\u0443\u0449\u0438\u0445\u0441\u044f \u0447\u0430\u0441\u0442\u0435\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u0437\u0430\u0443\u043c\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438, \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0438 \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u043e\u043d\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c.<\/p>\n<p>\u0414\u043b\u044f \u043c\u0435\u043d\u044f \u0432\u0430\u0436\u043d\u044b \u0442\u0430\u043a\u0438\u0435 \u0444\u0438\u0447\u0438 IDE, \u043a\u0430\u043a \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u043f\u043e \u043a\u043e\u0434\u0443 (\u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e, \u043d\u0430\u0439\u0442\u0438 \u0441\u0441\u044b\u043b\u043a\u0438, \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438), \u0430\u0432\u0442\u043e-\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430, \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u043f\u043e \u0442\u0438\u043f\u0430\u043c \u0438 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430\u043c, \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0430. \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439, \u0430 \u0431\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442-\u043a\u043e\u043c\u043f\u0430\u043d\u044c\u043e\u043d &#8212; \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430 &#8212; \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u043e\u0442\u043b\u0430\u0434\u043a\u0438.<\/p>\n<p>\u0412\u0441\u0435 \u0432\u043c\u0435\u0441\u0442\u0435: \u0441\u0435\u0440\u0432\u0435\u0440 \u044f\u0437\u044b\u043a\u0430, \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0438 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0441 \u043a\u043e\u0434\u043e\u043c, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0445\u0435\u043c\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/863\/db5\/a34\/863db5a3442e87f83d253578b9755dcc.png\" alt=\"\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b IDE \u043d\u0430 \u0431\u0430\u0437\u0435 Neovim\" title=\"\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b IDE \u043d\u0430 \u0431\u0430\u0437\u0435 Neovim\" width=\"916\" height=\"546\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/863\/db5\/a34\/863db5a3442e87f83d253578b9755dcc.png\"\/><\/p>\n<div><figcaption>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b IDE \u043d\u0430 \u0431\u0430\u0437\u0435 Neovim<\/figcaption><\/div>\n<\/figure>\n<p>\u042d\u0442\u0430 \u0441\u0445\u0435\u043c\u0430 \u0445\u043e\u0440\u043e\u0448\u0430 \u0442\u0435\u043c, \u0447\u0442\u043e \u043e\u043d\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u043e\u0439 \u0434\u043b\u044f Java. \u0420\u0430\u0437\u043e\u0431\u0440\u0430\u0432\u0448\u0438\u0441\u044c \u0441 \u0442\u0435\u043c, \u043a\u0430\u043a \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430. \u0414\u043b\u044f Java \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <a href=\"https:\/\/github.com\/eclipse\/eclipse.jdt.ls\" rel=\"noopener noreferrer nofollow\">Eclipse JDT LS<\/a> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 <a href=\"https:\/\/github.com\/microsoft\/vscode-java-debug\" rel=\"noopener noreferrer nofollow\">vscode-java-debug<\/a> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430 (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <a href=\"https:\/\/github.com\/microsoft\/java-debug\" rel=\"noopener noreferrer nofollow\">java-debug<\/a>).<\/p>\n<h3>\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c<\/h3>\n<p>Neovim \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a Lua 5.1 \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 LuaJIT \u0432 \u0441\u0430\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432\u0430\u043c \u0432 \u043b\u044e\u0431\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u042d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432. \u042f \u0445\u043e\u0442\u0435\u043b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 Neovim, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u044f \u0441\u0434\u0435\u043b\u0430\u043b, &#8212; \u044d\u0442\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0442\u0435\u0445 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e:<\/p>\n<pre><code class=\"lua\">-- \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 (\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 Lua \u0438\/\u0438\u043b\u0438 Vimscript) vim.g.loaded_perl_provider = 0 vim.g.loaded_ruby_provider = 0 vim.g.loaded_node_provider = 0 vim.g.loaded_python_provider = 0 vim.g.loaded_python3_provider = 0 <\/code><\/pre>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0432\u044b\u0431\u0438\u0440\u0430\u044e, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0434\u043b\u044f Neovim \u044f\u0437\u044b\u043a\u0430\u043c\u0438: Vimscript \u0438 Lua. \u041f\u043e\u043a\u0430 \u0447\u0442\u043e \u044f \u043d\u0435 \u043d\u0430\u0445\u043e\u0436\u0443 \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u043c, \u043d\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043a\u0430\u0436\u0435\u0442. \u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Lua \u0432 Neovim \u043f\u0440\u0438\u0432\u0435\u043b\u0430 \u043a \u0440\u0435\u0437\u043a\u043e\u043c\u0443 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u043a\u0430\u043a \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430, \u0442\u0430\u043a \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c.<\/p>\n<blockquote>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 Neovim, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0430\u0447\u0435, \u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0435\u0441\u0442\u044c \u0438\u0445 \u043c\u043e\u0438\u043c. \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 <a href=\"https:\/\/github.com\/rockerBOO\/awesome-neovim\" rel=\"noopener noreferrer nofollow\">Awesome Neovim<\/a> \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u043b\u0443\u0447\u0448\u0438\u0445 \u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0437\u0440\u0435\u043b\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432.<\/p>\n<\/blockquote>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 LSP-\u043a\u043b\u0438\u0435\u043d\u0442 Neovim, \u0447\u0442\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u0432\u0430\u0441 \u043b\u0451\u0433\u043a\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0442\u0434\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0435 <a href=\"https:\/\/github.com\/neoclide\/coc.nvim\" rel=\"noopener noreferrer nofollow\">coc.nvim<\/a>.<\/p>\n<h3>\u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432<\/h3>\n<p>\u041f\u0440\u0435\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 Neovim \u0432 \u043f\u043e\u043b\u043d\u043e\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0443\u044e IDE \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c Lua \u044f \u0432\u044b\u0431\u0440\u0430\u043b <a href=\"https:\/\/github.com\/wbthomason\/packer.nvim\" rel=\"noopener noreferrer nofollow\">packer.nvim<\/a>. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c packer \u0432 \u0441\u0432\u043e\u0439 <code>packpath<\/code> &#8212; \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0430\u0448 Neovim \u0438\u0449\u0435\u0442 \u043f\u043b\u0430\u0433\u0438\u043d\u044b. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e\u0442 \u0448\u0430\u0433 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d, <code>packer.nvim<\/code> \u0431\u0443\u0434\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0430\u043c \u0441\u043e\u0431\u043e\u0439, \u0438 \u0441 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f \u043e <code>packpath<\/code>. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0430 macOS (<em>\u0438 \u043d\u0430 Linux, \u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434.<\/em>) \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/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>\u0417\u0430\u0442\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Lua. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u0444\u0430\u0439\u043b <code>~\/.config\/nvim\/lua\/plugins.lua<\/code>, \u0430 \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0435\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>require('plugins')<\/code> \u0432 \u0444\u0430\u0439\u043b\u0435 <code>init.lua<\/code>.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043c\u043e\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430 <code>plugins.lua<\/code>:<\/p>\n<pre><code class=\"lua\">return require('packer').startup(function(use)   -- Packer can manage itself   use 'wbthomason\/packer.nvim'    use 'mfussenegger\/nvim-dap'   use 'mfussenegger\/nvim-jdtls'   use 'nvim-lua\/plenary.nvim' end) <\/code><\/pre>\n<p><code>packer.nvim<\/code> \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u043d\u043e \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b, \u0447\u0442\u043e \u043f\u0440\u043e\u0449\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c Packer \u043b\u0438\u0448\u044c \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0438\u0445 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439. \u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0432\u044b\u0431\u043e\u0440 \u0437\u0430 \u0441\u0430\u043c\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0435 \u0441\u0442\u0435\u0441\u043d\u044f\u0439\u0442\u0435\u0441\u044c \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f <code>packer.nvim<\/code>, \u0432 <code>~\/.config\/nvim\/init.lua<\/code> \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>require('plugins')<\/code>. \u041e\u0442\u0442\u0443\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>:PackerInstall<\/code> \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432\u0441\u0435\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p>\u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0443 \u0437\u0430 \u0440\u0430\u0437, \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c, \u043a\u0430\u043a \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u043a\u0430\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u043d \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u044b \u0442\u043e\u0447\u043d\u0435\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0435 \u0441\u0435\u0431\u044f \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0438.<\/p>\n<h3>\u042f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u2014 eclipse.jdt.ls<\/h3>\n<p>\u041e\u0441\u043d\u043e\u0432\u0443 \u0440\u0430\u0431\u043e\u0442\u044b Neovim, \u043a\u0430\u043a IDE, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 <a href=\"https:\/\/microsoft.github.io\/language-server-protocol\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (LSP)<\/a>. \u0414\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u044f\u0437\u044b\u043a\u0430 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 IDE \u043d\u0443\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440. \u0414\u043b\u044f Java \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c \u0434\u0435-\u0444\u0430\u043a\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <a href=\"https:\/\/github.com\/eclipse\/eclipse.jdt.ls\" rel=\"noopener noreferrer nofollow\">eclipse.jdt.ls<\/a> \u2014 Eclipse JDT Language Server.<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 macOS \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Homebrew, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0432 \u043c\u0435\u0441\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 (\u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043d\u043e\u043c\u0435\u0440 \u0432\u0435\u0440\u0441\u0438\u0438):<\/p>\n<pre><code class=\"bash\">$ > brew install jdtls  ...  ==> Pouring jdtls--1.18.0.all.bottle.tar.gz ?  \/opt\/homebrew\/Cellar\/jdtls\/1.18.0: 99 files, 42.8MB <\/code><\/pre>\n<p>\u041d\u0430 \u043c\u043e\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u043c\u0435\u0441\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u2014 <code>\/opt\/homebrew\/Cellar\/jdtls\/1.18.0<\/code>. \u041f\u0443\u0442\u044c \u0434\u043e \u043d\u0435\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043f\u043e\u0437\u0436\u0435 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 LSP-\u043a\u043b\u0438\u0435\u043d\u0442\u0430.<\/p>\n<p><strong><em>\u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434.:<\/em><\/strong><\/p>\n<h4>Linux<\/h4>\n<p>\u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0430 Linux \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u044b \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u2014 \u0438\u0449\u0438\u0442\u0435 \u043f\u043e \u043a\u043b\u044e\u0447\u0430\u043c <code>jdtls<\/code> \u0438 <code>eclipse.jdt.ls<\/code>.<\/p>\n<p>\u0418\u043b\u0438 \u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0430\u0447\u0430\u0439\u0442\u0435 <a href=\"https:\/\/www.eclipse.org\/downloads\/download.php?file=\/jdtls\/milestones\/1.26.0\/jdt-language-server-1.26.0-202307271613.tar.gz\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 (1.26.0 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u0445\u043e\u0434\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430)<\/a>, \u0440\u0430\u0437\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u0443\u0439\u0442\u0435, \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435, \u0433\u0434\u0435 \u0443\u0434\u043e\u0431\u043d\u043e \u2014 \u0432 <code>PATH<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u0422\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 macOS, \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043f\u0443\u0442\u044c \u0434\u043e \u0435\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438.<\/p>\n<h4>Windows<\/h4>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0430 \u0432\u0441\u044e \u044d\u0442\u0443 \u0430\u0432\u0430\u043d\u0442\u044e\u0440\u0443 \u0438\u0437 \u043f\u043e\u0434 Windows, \u0442\u043e \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0443\u0442\u0438 \u0434\u043e \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u0435 \u0432 \u044d\u0442\u043e\u043c \u0433\u0430\u0439\u0434\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0433\u043e\u0442\u043e\u0432\u044c\u0442\u0435\u0441\u044c \u0447\u0438\u043d\u0438\u0442\u044c \u0438\u0437 \u043d\u0438\u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0430 \u0440\u043e\u0432\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e Windows.<\/p>\n<p>\u0410 \u0447\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f Eclipse JDT LS, \u0442\u043e \u043f\u0440\u0438 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0438 \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0435 \u0432\u0441\u0451 \u0442\u043e\u0433\u043e \u0436\u0435 <a href=\"https:\/\/www.eclipse.org\/downloads\/download.php?file=\/jdtls\/milestones\/1.26.0\/jdt-language-server-1.26.0-202307271613.tar.gz\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u0430<\/a>, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u044b \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0435 \u0435\u0433\u043e \u043f\u043e \u043f\u0443\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432. \u00af_(\u30c4)_\/\u00af<\/p>\n<h3>\u041a\u043b\u0438\u0435\u043d\u0442 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u2014 Neovim \u0438 nvim-jdtls<\/h3>\n<p>Neovim \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (LSP) \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438, \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 LSP \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Lua \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <code>vim.lsp<\/code> \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0445 LSP-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/github.com\/neovim\/nvim-lspconfig\" rel=\"noopener noreferrer nofollow\">nvim-lspconfig<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <a href=\"https:\/\/github.com\/neovim\/nvim-lspconfig\/blob\/master\/doc\/server_configurations.md\" rel=\"noopener noreferrer nofollow\">\u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432<\/a>.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u043b\u0430\u0433\u0438\u043d\u044b, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u0431\u043e\u0433\u0430\u0442\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0447\u0435\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 LSP. \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u043d\u0438\u0445 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f Java. <a href=\"https:\/\/github.com\/mfussenegger\/nvim-jdtls\" rel=\"noopener noreferrer nofollow\">nvim-jdtls<\/a> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u0434\u0430. \u0418 <code>nvim-lspconfig<\/code>, \u0438 <code>nvim-jdtls<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 Neovim \u043a\u043b\u0438\u0435\u043d\u0442, \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e <code>nvim-jdtls<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e. \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <code>nvim-jdtls<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u0435\u0433\u043e, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435 \u0436\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448 Neovim \u0438 \u0444\u0438\u0447\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432, \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u043b\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f.<\/p>\n<p>\u041d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0445\u0435\u043c\u0435 \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e <code>nvim-jdtls<\/code> \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0435\u043c \u043e\u043d \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 <code>nvim-lspconfig<\/code>. \u041e\u0431\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0443\u0436\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0432 Neovim \u0441\u0432\u044f\u0437\u043a\u0438 Lua, \u043d\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443:<\/p>\n<pre><code class=\"bash\">\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510           \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 nvim-jdtls \u2502           \u2502 nvim-lspconfig \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518           \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518      |                         |     start_or_attach           nvim_lsp.jdtls.setup      \u2502                              |      \u2502                             \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0445\u0443\u043a\u0430 \u0434\u043b\u044f java filetype                          \u2502      \u2502    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                  \u2502      \u2514\u2500\u2500\u2500\u25ba\u2502 vim.lsp \u2502\u25c4\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518           \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 <\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 <code>nvim-jdtls<\/code> \u043c\u043e\u0436\u0435\u0442 \u043f\u0443\u0433\u0430\u0442\u044c. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u044f \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e <code>nvim-jdtls<\/code> \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043e\u043f\u0446\u0438\u0439 \u0432\u0437\u044f\u0442\u044b \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438\u0437 <a href=\"https:\/\/github.com\/eclipse\/eclipse.jdt.ls\/wiki\/Running-the-JAVA-LS-server-from-the-command-line\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Eclipse JDT LS<\/a> \u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b \u0434\u043b\u044f \u043d\u0435\u0433\u043e:<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043d\u0438\u043f\u043f\u0435\u0442 \u043a\u043e\u0434\u0430 \u043d\u0430 164 \u0441\u0442\u0440\u043e\u043a\u0438<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lua\">local home = os.getenv('HOME') local jdtls = require('jdtls')  -- \u0422\u0438\u043f\u044b \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u043a\u043e\u0440\u0435\u043d\u044c Java-\u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f jdtls. local root_markers = {'gradlew', 'mvnw', '.git'} local root_dir = require('jdtls.setup').find_root(root_markers)  -- jdtls \u0445\u0440\u0430\u043d\u0438\u0442 \u0444\u0430\u0439\u043b\u044b, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043f\u043a\u0438 \u0441 \u043e\u043d\u044b\u043c. \u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c -- \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u043f\u043e\u0434 \u0442\u0430\u043a\u0438\u0435 \u0444\u0430\u0439\u043b\u044b. -- \u042d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 jdtls \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043f\u043a\u0438 -- \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f root_marker \u043a\u0430\u043a \u043f\u0430\u043f\u043a\u0443 \u043f\u043e\u0434 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430. local workspace_folder = home .. \"\/.local\/share\/eclipse\/\" .. vim.fn.fnamemodify(root_dir, \":p:h:t\")  -- \u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0439 \u043a\u043b\u0430\u0432\u0438\u0448 function nnoremap(rhs, lhs, bufopts, desc)   bufopts.desc = desc   vim.keymap.set(\"n\", rhs, lhs, bufopts) end  -- \u0424\u0443\u043d\u043a\u0446\u0438\u044f on_attach \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0443\u0442 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0439 \u043a\u043b\u0430\u0432\u0438\u0448 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, -- \u043a\u0430\u043a \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u0431\u0443\u0444\u0435\u0440\u0443 local on_attach = function(client, bufnr)   -- \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u0434\u043b\u044f LSP \u043a\u043b\u0438\u0435\u043d\u0442\u0430 Neovim   local bufopts = { noremap=true, silent=true, buffer=bufnr }   nnoremap('gD', vim.lsp.buf.declaration, bufopts, \"Go to declaration\")   nnoremap('gd', vim.lsp.buf.definition, bufopts, \"Go to definition\")   nnoremap('gi', vim.lsp.buf.implementation, bufopts, \"Go to implementation\")   nnoremap('K', vim.lsp.buf.hover, bufopts, \"Hover text\")   nnoremap('&lt;C-k>', vim.lsp.buf.signature_help, bufopts, \"Show signature\")   nnoremap('&lt;space>wa', vim.lsp.buf.add_workspace_folder, bufopts, \"Add workspace folder\")   nnoremap('&lt;space>wr', vim.lsp.buf.remove_workspace_folder, bufopts, \"Remove workspace folder\")   nnoremap('&lt;space>wl', function()     print(vim.inspect(vim.lsp.buf.list_workspace_folders()))   end, bufopts, \"List workspace folders\")   nnoremap('&lt;space>D', vim.lsp.buf.type_definition, bufopts, \"Go to type definition\")   nnoremap('&lt;space>rn', vim.lsp.buf.rename, bufopts, \"Rename\")   nnoremap('&lt;space>ca', vim.lsp.buf.code_action, bufopts, \"Code actions\")   vim.keymap.set('v', \"&lt;space>ca\", \"&lt;ESC>&lt;CMD>lua vim.lsp.buf.range_code_action()&lt;CR>\",     { noremap=true, silent=true, buffer=bufnr, desc = \"Code actions\" })   nnoremap('&lt;space>f', function() vim.lsp.buf.format { async = true } end, bufopts, \"Format file\")    -- Java \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 jdtls   nnoremap(\"&lt;C-o>\", jdtls.organize_imports, bufopts, \"Organize imports\")   nnoremap(\"&lt;space>ev\", jdtls.extract_variable, bufopts, \"Extract variable\")   nnoremap(\"&lt;space>ec\", jdtls.extract_constant, bufopts, \"Extract constant\")   vim.keymap.set('v', \"&lt;space>em\", [[&lt;ESC>&lt;CMD>lua require('jdtls').extract_method(true)&lt;CR>]],     { noremap=true, silent=true, buffer=bufnr, desc = \"Extract method\" }) end  local config = {   flags = {     debounce_text_changes = 80,   },   on_attach = on_attach,  -- \u041f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u043d\u0430\u0448\u0438 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u0438\u0437 on_attach \u0432 \u043e\u0431\u0449\u0438\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448 \u043a\u043e\u043d\u0444\u0438\u0433\u0430   root_dir = root_dir, -- \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u0440\u043d\u0435\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u0434\u043b\u044f \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e root_marker      -- \u0422\u0443\u0442 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f eclipse.jdt.ls \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f LSP \u043d\u0430 \u0435\u0433\u043e \u0441\u0442\u0430\u0440\u0442\u0435.   -- \u0421\u043c.: https:\/\/github.com\/eclipse\/eclipse.jdt.ls\/wiki\/Running-the-JAVA-LS-server-from-the-command-line#initialize-request   -- \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u043e\u043f\u0446\u0438\u0439   settings = {     java = {       format = {         settings = {           -- \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0433\u0430\u0439\u0434 \u043f\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e Java \u043e\u0442 Google           -- \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b\u0438 \u0444\u0430\u0439\u043b https:\/\/github.com\/google\/styleguide\/blob\/gh-pages\/eclipse-java-google-style.xml           -- \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043b\u0438 \u0435\u0433\u043e \u0432 \u043f\u0430\u043f\u043a\u0443 ~\/.local\/share\/eclipse, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440           url = \"\/.local\/share\/eclipse\/eclipse-java-google-style.xml\",           profile = \"GoogleStyle\",         },       },       signatureHelp = { enabled = true },       contentProvider = { preferred = 'fernflower' },  -- \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0443\u0442\u0438\u043b\u0438\u0442\u0443 fernflower \u0434\u043b\u044f \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a       -- \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043e\u043f\u0446\u0438\u0438 \u0434\u043b\u044f \u0430\u0432\u0442\u043e-\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f       completion = {         favoriteStaticMembers = {           \"org.hamcrest.MatcherAssert.assertThat\",           \"org.hamcrest.Matchers.*\",           \"org.hamcrest.CoreMatchers.*\",           \"org.junit.jupiter.api.Assertions.*\",           \"java.util.Objects.requireNonNull\",           \"java.util.Objects.requireNonNullElse\",           \"org.mockito.Mockito.*\"         },         filteredTypes = {           \"com.sun.*\",           \"io.micrometer.shaded.*\",           \"java.awt.*\",           \"jdk.*\", \"sun.*\",         },       },       -- \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043e\u043f\u0446\u0438\u0438 \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a       sources = {         organizeImports = {           starThreshold = 9999;           staticStarThreshold = 9999;         },       },       -- \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u0434\u043e-\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438       codeGeneration = {         toString = {           template = \"${object.className}{${member.name()}=${member.value}, ${otherMembers}}\"         },         hashCodeEquals = {           useJava7Objects = true,         },         useBlocks = true,       },       -- \u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 Java, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c eclipse.jdt.ls \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u0430\u0448\u0438\u0445 JDK.       -- \u0421\u043c.: https:\/\/github.com\/eclipse\/eclipse.jdt.ls\/wiki\/Running-the-JAVA-LS-server-from-the-command-line#initialize-request       -- \u0418 \u0438\u0449\u0435\u0442\u0435 `interface RuntimeOption`.   -- \u0412\u0410\u0416\u041d\u041e: \u041f\u043e\u043b\u0435 `name` \u041d\u0415 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e, \u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u0437 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 `enum ExecutionEnvironment` \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0432\u044b\u0448\u0435.       configuration = {         runtimes = {           {             name = \"JavaSE-17\",             path = home .. \"\/.asdf\/installs\/java\/corretto-17.0.4.9.1\", -- \u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434.: JDK, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0430\u0432\u0442\u043e\u0440. \u0423 \u0432\u0430\u0441 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u0432\u043e\u0438 :)           },           {             name = \"JavaSE-11\",             path = home .. \"\/.asdf\/installs\/java\/corretto-11.0.16.9.1\",           },           {             name = \"JavaSE-1.8\",             path = home .. \"\/.asdf\/installs\/java\/corretto-8.352.08.1\"           },         }       }     }   },   -- cmd \u044d\u0442\u043e \u0442\u043e\u0442 \u043d\u0430\u0431\u043e\u0440 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0434\u043b\u044f \u0441\u0442\u0430\u0440\u0442\u0430 jdtls   -- \u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u0442\u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Java \u0432\u0435\u0440\u0441\u0438\u0438 17 \u0438\u043b\u0438 \u0432\u044b\u0448\u0435.   -- \u0421\u043c.: https:\/\/github.com\/eclipse\/eclipse.jdt.ls#running-from-the-command-line   -- \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u043e\u043f\u0446\u0438\u0439.   cmd = {     home .. \"\/.asdf\/installs\/java\/corretto-17.0.4.9.1\/bin\/java\",     '-Declipse.application=org.eclipse.jdt.ls.core.id1',     '-Dosgi.bundles.defaultStartLevel=4',     '-Declipse.product=org.eclipse.jdt.ls.core.product',     '-Dlog.protocol=true',     '-Dlog.level=ALL',     '-Xmx4g',     '--add-modules=ALL-SYSTEM',     '--add-opens', 'java.base\/java.util=ALL-UNNAMED',     '--add-opens', 'java.base\/java.lang=ALL-UNNAMED',      -- \u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 lombok, \u0441\u043a\u0430\u0447\u0430\u0439\u0442\u0435 jar \u0441 \u043d\u0438\u043c \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u0435\u0433\u043e \u0432 ~\/.local\/share\/eclipse     '-javaagent:' .. home .. '\/.local\/share\/eclipse\/lombok.jar',      -- \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 jar \u0444\u0430\u0439\u043b \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043f\u043a\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\/\u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043b\u0438 jdtls.     -- \u0412\u0410\u0416\u041d\u041e: \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0443\u0442\u044c \u0434\u043e jdtls \u043d\u0438\u0436\u0435:     '-jar', vim.fn.glob('\/opt\/homebrew\/Cellar\/jdtls\/1.18.0\/libexec\/plugins\/org.eclipse.equinox.launcher_*.jar'),      -- \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0434\u043b\u044f jdtls \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0435\u0433\u043e \u043f\u0430\u043f\u043a\u0438. -- \u0412\u0410\u0416\u041d\u041e: \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u043f\u0443\u0442\u044c \u0434\u043e jdtls, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043e\u043d\u0444\u0438\u0433-\u043f\u0430\u043f\u043a\u0443 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0432\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435: config_win, config_linux \u0438\u043b\u0438 config_mac:     '-configuration', '\/opt\/homebrew\/Cellar\/jdtls\/1.18.0\/libexec\/config_mac',      -- \u041f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c workspace_folder \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435, \u0447\u0442\u043e\u0431\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 jdtls \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430     '-data', workspace_folder,   }, }  -- \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c jdtls. \u042d\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438, -- \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448 \u0438 \u0437\u0430\u043a\u0440\u0435\u043f\u0438\u0442 LSP \u043a\u043b\u0438\u0435\u043d\u0442 \u0437\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u0431\u0443\u0444\u0435\u0440\u043e\u043c: jdtls.start_or_attach(config)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0427\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c <code>jdtls<\/code> \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044d\u0442\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u0444\u0430\u0439\u043b \u0432 \u043f\u0430\u043f\u043a\u0443 <code>~\/.config\/nvim\/ftplugin\/java.lua<\/code>. Neovim \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0431\u0443\u0444\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u0444\u0430\u0439\u043b \u0442\u0438\u043f\u0430 Java. (<code>ftplugin<\/code> \u044d\u0442\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 Neovim \u043e\u0442 filetype plugin).<\/p>\n<p>\u0425\u043e\u0442\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u0435\u0439. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043c\u044b \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448 \u0434\u043b\u044f LSP-\u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u0417\u0430\u0442\u0435\u043c \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043e\u043f\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f <code>jdtls<\/code>, \u0438, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0437\u0430\u0434\u0430\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 <code>jdtls<\/code>. \u041f\u043e\u043b\u0443\u0447\u0438\u0432 \u044d\u0442\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e, \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0435\u0451 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 <code>jdtls.start_or_attach<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438\u043b\u0438 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u0442\u0441\u044f \u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0443, \u0435\u0441\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u0443\u0436\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d.<\/p>\n<p>\u0421 \u0443\u0447\u0451\u0442\u043e\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c <code>jdtls<\/code>, \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0441\u043a\u0440\u0438\u043d\u043a\u0430\u0441\u0442\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u043c\u0435\u0442\u043e\u0434 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>jdtls<\/code>. \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043a\u043e\u0434\u043e\u043c (<em>code actions, \u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434.<\/em>) \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/github.com\/nvim-telescope\/telescope.nvim\" rel=\"noopener noreferrer nofollow\">telescope.nvim<\/a>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/510\/c3d\/d32\/510c3dd32c6142b2efb47b3eedd59b9c.gif\" alt=\"\u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e jdtls\" title=\"\u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e jdtls\" width=\"3840\" height=\"2110\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/510\/c3d\/d32\/510c3dd32c6142b2efb47b3eedd59b9c.gif\"\/><\/p>\n<div><figcaption>\u0418\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>jdtls<\/code><\/figcaption><\/div>\n<\/figure>\n<h3>\u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u2014 nvim-dap<\/h3>\n<p><a href=\"https:\/\/microsoft.github.io\/debug-adapter-protocol\/\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430 (Debug Adapter Protocol, DAP)<\/a> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c-\u043a\u043e\u043c\u043f\u0430\u043d\u044c\u043e\u043d\u043e\u043c \u0434\u043b\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0418\u0434\u0435\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 Debug Adapter Protocol (DAP) \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0432 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430\u043c\u0438 \u0438\u043b\u0438 \u0441\u0440\u0435\u0434\u0430\u043c\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0438 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432, DAP \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043e\u043c, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u0438\u043b\u0438 \u0441\u0440\u0435\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430, \u0430 \u043d\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443.<\/p>\n<p><a href=\"https:\/\/github.com\/mfussenegger\/nvim-dap\" rel=\"noopener noreferrer nofollow\">nvim-dap<\/a> &#8212; \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <em>\u043a\u043b\u0438\u0435\u043d\u0442\u0430<\/em> DAP. \u0420\u0430\u0431\u043e\u0442\u0430\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u0434\u0435\u0431\u0430\u0433-\u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043e\u043c, <code>nvim-dap<\/code> \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430, \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u043e\u0434 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b <code>nvim-dap<\/code> \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0435\u0431\u0430\u0433-\u0430\u0434\u0430\u043f\u0442\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0432 \u0440\u043e\u043b\u0438 \u043f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a\u0430 \u043c\u0435\u0436\u0434\u0443 <code>nvim-dap<\/code> (\u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c) \u0438 \u0434\u0435\u0431\u0430\u0433\u0433\u0435\u0440\u043e\u043c \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u044f\u0437\u044b\u043a. \u041d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0445\u0435\u043c\u0435, \u0432\u0437\u044f\u0442\u043e\u0439 \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e <code>nvim-dap<\/code>, \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u044d\u0442\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432.<\/p>\n<pre><code>\u041a\u043b\u0438\u0435\u043d\u0442 DAP ----- \u0410\u0434\u0430\u043f\u0442\u0435\u0440 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 ------- \u0414\u0435\u0431\u0430\u0433\u0433\u0435\u0440 ------ \u041e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (nvim-dap)   |     (\u043f\u043e\u0434 \u044f\u0437\u044b\u043a)      |    (\u043f\u043e\u0434 \u044f\u0437\u044b\u043a)              |                     |              |         \u041a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f \u0441\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438              |         \u0410\u0434\u0430\u043f\u0442\u0435\u0440 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a (\u0434\u0435\u0431\u0430\u0433\u0433\u0435\u0440) \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0434\u043d\u0438\u043c \u0438 \u0442\u0435\u043c \u0436\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c              |      \u041a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f \u0447\u0435\u0440\u0435\u0437 Debug Adapter Protocol (DAP) <\/code><\/pre>\n<p>\u041f\u043e\u0434\u043e\u0431\u043d\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 LSP, \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b DAP \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0442 \u043d\u0430\u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u0412\u0438\u0434\u0438\u043c\u043e, \u0438\u0437-\u0437\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043d\u0435\u0437\u0440\u0435\u043b\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 DAP, \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u043c, \u0447\u0435\u043c \u0434\u043b\u044f LSP, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e.<\/p>\n<p><a href=\"https:\/\/github.com\/microsoft\/java-debug\" rel=\"noopener noreferrer nofollow\">Java Debug Server<\/a> &#8212; \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430\u044f <a href=\"https:\/\/github.com\/microsoft\/java-debug\" rel=\"noopener noreferrer nofollow\">\u043d\u0430 Github<\/a>. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 Java Debug Interface (JDI). \u041e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c Eclipse JDT \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0434\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044f \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432 \u043f\u043b\u0430\u0433\u0438\u043d\u0435 \u0434\u043b\u044f Eclipse, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u043c \u0441 <code>jdtls<\/code>. \u0414\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 <code>java-debug<\/code> \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u043c\u0443 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 jar-\u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u043f\u0446\u0438\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d, \u0430 \u0437\u0430\u0442\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0435\u0433\u043e.<\/p>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Maven:<\/p>\n<ul>\n<li>\n<p>\u041a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u0442\u0435 <a href=\"https:\/\/github.com\/microsoft\/java-debug\" rel=\"noopener noreferrer nofollow\">java-debug<\/a><\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u0435 \u0432 \u0440\u0435\u043f\u043e (<code>cd java-debug<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 <code>.\/mvnw clean install<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 jar-\u0444\u0430\u0439\u043b\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f <code>jdtls<\/code> \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"lua\">local bundles = {   vim.fn.glob('&lt;path-to-java-debug>\/com.microsoft.java.debug.plugin\/target\/com.microsoft.java.debug.plugin-*.jar'), } local config = {   -- ...   on_attach = on_attach,   init_options = {     bundles = bundles   },   -- ... } <\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u0438\u0442\u044c <code>nvim-jdtls<\/code> \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>on_attach<\/code> \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 <code>require('jdtls').setup_dap()<\/code>, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u043f\u043e\u0434 Java.<\/p>\n<pre><code class=\"lua\">config['on_attach'] = function(client, bufnr)   -- \u0421 `hotcodereplace = 'auto' \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u0434\u0435,   -- \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0432\u043d\u043e\u0441\u0438\u0442\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438. \u042d\u0442\u0443 \u043e\u043f\u0446\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0431\u0440\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430.   require('jdtls').setup_dap({ hotcodereplace = 'auto' }) end <\/code><\/pre>\n<p><code>nvim-dap<\/code> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0444\u0430\u0439\u043b\u0430 <code>launch.json<\/code>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043e\u0432 \u0432 Visual Studio Code. \u0414\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>load_launchjs<\/code> \u0438\u0437 \u043c\u043e\u0434\u0443\u043b\u044f <code>dap.ext.vscode<\/code>. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442 \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435:<\/p>\n<pre><code class=\"lua\">require('dap.ext.vscode').load_launchjs() <\/code><\/pre>\n<p>\u041d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448 \u043f\u043e\u0434 \u043e\u0442\u043b\u0430\u0434\u043a\u0443. \u042d\u0442\u043e \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u044f, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0445 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u043e \u0441\u0432\u043e\u0438\u043c\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044f\u043c\u0438:<\/p>\n<pre><code class=\"lua\">function nnoremap(rhs, lhs, bufopts, desc)   bufopts.desc = desc   vim.keymap.set(\"n\", rhs, lhs, bufopts) end  -- nvim-dap nnoremap(\"&lt;leader>bb\", \"&lt;cmd>lua require'dap'.toggle_breakpoint()&lt;cr>\", \"Set breakpoint\") nnoremap(\"&lt;leader>bc\", \"&lt;cmd>lua require'dap'.set_breakpoint(vim.fn.input('Breakpoint condition: '))&lt;cr>\", \"Set conditional breakpoint\") nnoremap(\"&lt;leader>bl\", \"&lt;cmd>lua require'dap'.set_breakpoint(nil, nil, vim.fn.input('Log point message: '))&lt;cr>\", \"Set log point\") nnoremap('&lt;leader>br', \"&lt;cmd>lua require'dap'.clear_breakpoints()&lt;cr>\", \"Clear breakpoints\") nnoremap('&lt;leader>ba', '&lt;cmd>Telescope dap list_breakpoints&lt;cr>', \"List breakpoints\")  nnoremap(\"&lt;leader>dc\", \"&lt;cmd>lua require'dap'.continue()&lt;cr>\", \"Continue\") nnoremap(\"&lt;leader>dj\", \"&lt;cmd>lua require'dap'.step_over()&lt;cr>\", \"Step over\") nnoremap(\"&lt;leader>dk\", \"&lt;cmd>lua require'dap'.step_into()&lt;cr>\", \"Step into\") nnoremap(\"&lt;leader>do\", \"&lt;cmd>lua require'dap'.step_out()&lt;cr>\", \"Step out\") nnoremap('&lt;leader>dd', \"&lt;cmd>lua require'dap'.disconnect()&lt;cr>\", \"Disconnect\") nnoremap('&lt;leader>dt', \"&lt;cmd>lua require'dap'.terminate()&lt;cr>\", \"Terminate\") nnoremap(\"&lt;leader>dr\", \"&lt;cmd>lua require'dap'.repl.toggle()&lt;cr>\", \"Open REPL\") nnoremap(\"&lt;leader>dl\", \"&lt;cmd>lua require'dap'.run_last()&lt;cr>\", \"Run last\") nnoremap('&lt;leader>di', function() require\"dap.ui.widgets\".hover() end, \"Variables\") nnoremap('&lt;leader>d?', function() local widgets=require\"dap.ui.widgets\";widgets.centered_float(widgets.scopes) end, \"Scopes\") nnoremap('&lt;leader>df', '&lt;cmd>Telescope dap frames&lt;cr>', \"List frames\") nnoremap('&lt;leader>dh', '&lt;cmd>Telescope dap commands&lt;cr>', \"List commands\") <\/code><\/pre>\n<p>\u0423\u0432\u044b, \u043d\u043e \u043f\u0440\u043e\u0435\u043a\u0442 <code>java-debug<\/code> \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432, \u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <em>\u0434\u0440\u0443\u0433\u043e\u0439<\/em> \u043f\u043b\u0430\u0433\u0438\u043d. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0439 \u0441\u0445\u0435\u043c\u0435. \u0427\u0442\u043e\u0431\u044b \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u044b, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u044b \u0438\u0437 <a href=\"https:\/\/github.com\/microsoft\/vscode-java-test\" rel=\"noopener noreferrer nofollow\">vscode-java-test<\/a> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u043e\u0439 \u0436\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0434\u043b\u044f <code>java-debug<\/code>:<\/p>\n<p>\u0421\u043f\u0435\u0440\u0432\u0430 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0439\u0442\u0435 jar-\u0444\u0430\u0439\u043b\u044b \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n<ul>\n<li>\n<p>\u041a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u0442\u0435 <a href=\"https:\/\/github.com\/microsoft\/vscode-java-test\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/a><\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u0435 \u0432 \u0440\u0435\u043f\u043e (<code>cd vscode-java-test<\/code>)<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 <code>npm install<\/code> (<em>\u0441 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c Node.js, \u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434.<\/em>)<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 <code>npm run build-plugin<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u0417\u0430\u0442\u0435\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e <code>nvim-jdtls<\/code> \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438 \u0438\u0437 <code>vs-code-java-test<\/code>:<\/p>\n<pre><code class=\"lua\">-- \u0422\u0443\u0442 \u0432\u0441\u0451 \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438 \u043f\u0440\u043e DAP: local bundles = {   vim.fn.glob(\"&lt;path-to-java-debug>\/com.microsoft.java.debug.plugin\/target\/com.microsoft.java.debug.plugin-*.jar\", 1), };  -- \u042d\u0442\u043e \u2014 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0442\u0435\u0441\u0442\u043e\u0432 vim.list_extend(bundles, vim.split(vim.fn.glob(\"&lt;path-to-vscode-java-test>\/server\/*.jar\", 1), \"\\n\"))  local config = {   -- ...   on_attach = on_attach,   init_options = {     bundles = bundles   },   -- ... } <\/code><\/pre>\n<p>\u042d\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u0432\u0443\u043c \u043d\u043e\u0432\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c <code>nvim-jdtls<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f\u043c\u0438 \u043a\u043b\u0430\u0432\u0438\u0448:<\/p>\n<pre><code class=\"lua\">nnoremap(\"&lt;leader>vc\", jdtls.test_class, bufopts, \"Test class (DAP)\") nnoremap(\"&lt;leader>vm\", jdtls.test_nearest_method, bufopts, \"Test method (DAP)\") <\/code><\/pre>\n<p>\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0441\u043a\u0440\u0438\u043d\u043a\u0430\u0441\u0442\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u0437\u0430\u043f\u0443\u0441\u043a \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0442\u0435\u0441\u0442\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>nvim-dap<\/code>. \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0442\u043e\u0447\u043a\u0430 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u0431\u044b\u043b\u0430 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u0430, \u044f \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e \u043e\u043a\u043d\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0442\u0435\u043a\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f17\/fa6\/72f\/f17fa672fe8a7ad2c3c237433a8c7ee5.gif\" alt=\"\u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e nvim-dap\" title=\"\u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e nvim-dap\" width=\"3840\" height=\"2110\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f17\/fa6\/72f\/f17fa672fe8a7ad2c3c237433a8c7ee5.gif\"\/><\/p>\n<div><figcaption>\u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>nvim-dap<\/code><\/figcaption><\/div>\n<\/figure>\n<h3>\u0410\u0432\u0442\u043e-\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u2014 nvim-cmp<\/h3>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e-\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f \u043e\u0431\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u043a \u043f\u043b\u0430\u0433\u0438\u043d\u0443 \u0434\u043b\u044f Neovim \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/github.com\/hrsh7th\/nvim-cmp\" rel=\"noopener noreferrer nofollow\">nvim-cmp<\/a>. <code>nvim-cmp<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u043c\u0438 \u0430\u0432\u0442\u043e-\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439. \u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u043c\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0434\u0430 (\u0441\u043d\u0438\u043f\u043f\u0435\u0442\u044b), \u0441\u0438\u043c\u0432\u043e\u043b\u044b LSP \u0438\u043b\u0438 \u0441\u043b\u043e\u0432\u0430 \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 <code>nvim-cmp<\/code> \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u043c\u0438 \u0430\u0432\u0442\u043e-\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439. \u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0438\u0436\u0435 \u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b <code>nvim-cmp<\/code> \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043c\u043d\u043e\u044e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u043e\u0432 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439 \u043e\u0442 LSP:<\/p>\n<pre><code class=\"lua\">return require('packer').startup(function(use)   -- ...   use 'hrsh7th\/nvim-cmp'   use 'hrsh7th\/cmp-nvim-lsp'   use 'hrsh7th\/cmp-vsnip'   use 'hrsh7th\/vim-vsnip'   -- ... end) <\/code><\/pre>\n<p>\u042f\u0437\u044b\u043a\u043e\u0432\u044b\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043a\u043b\u0438\u0435\u043d\u0442\u0430. <code>nvim-cmp<\/code> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0438\u043f\u043e\u0432 \u0430\u0432\u0442\u043e-\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439, \u0447\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0434\u043b\u044f Neovim <code>omnifunc<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u044f\u0432\u043b\u044f\u0442\u044c \u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 LSP \u0441\u0435\u0440\u0432\u0435\u0440\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043c\u043e\u0433 \u0438\u0445 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u0430\u0432\u0442\u043e-\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435. \u042d\u0442\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>require('cmp_nvim_lsp').default_capabilities<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u043d\u0430\u0448\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e <code>jdtls<\/code>:<\/p>\n<pre><code>-- nvim-cmp \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0430\u0432\u0442\u043e-\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439 \u043e\u0442 LSP, -- \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0434\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e \u043d\u0438\u0445 LSP-\u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)  local config = {   -- ...   capabilities = capabilities,   on_attach = on_attach,   -- ... } <\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0430\u043c <code>nvim-cmp<\/code>. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0442\u0435 \u0430\u0432\u0442\u043e-\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u043f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f \u0441\u043d\u0438\u043f\u043f\u0435\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u043a\u043b\u0430\u0432\u0438\u0448\u0443 Tab \u0434\u043b\u044f \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0430\u0432\u0442\u043e-\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439 \u0438 \u043a\u043b\u0430\u0432\u0438\u0448\u0443 Enter \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e:<\/p>\n<pre><code class=\"lua\">local cmp = require('cmp') cmp.setup {   sources = {     { name = 'nvim_lsp' },     { name = 'nvim_lsp_signature_help' },     { name = 'vsnip' },   },   snippet = {     expand = function(args)       vim.fn[\"vsnip#anonymous\"](args.body) -- \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u043b\u0430\u0433\u0438\u043d vsnip cmp     end,   },   mapping = cmp.mapping.preset.insert({     ['&lt;C-d>'] = cmp.mapping.scroll_docs(-4),     ['&lt;C-f>'] = cmp.mapping.scroll_docs(4),     ['&lt;C-Space>'] = cmp.mapping.complete(),     ['&lt;CR>'] = cmp.mapping.confirm {       behavior = cmp.ConfirmBehavior.Replace,       select = true,     },     ['&lt;Tab>'] = cmp.mapping(function(fallback)       if cmp.visible() then         cmp.select_next_item()       else         fallback()       end     end, { 'i', 's' }),     ['&lt;S-Tab>'] = cmp.mapping(function(fallback)       if cmp.visible() then         cmp.select_prev_item()       else         fallback()       end     end, { 'i', 's' }),   }), } <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u0438\u043a\u043e\u043d\u043a\u0438 \u0440\u044f\u0434\u043e\u043c \u0441 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u043c\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043f\u043b\u0430\u0433\u0438\u043d <code>onsails\/lspkind.nvim<\/code> \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0435\u0433\u043e, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0431\u043b\u043e\u043a <code>formatting<\/code> \u0432 \u043d\u0430\u0448\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e <code>cmp<\/code>:<\/p>\n<pre><code class=\"lua\">local lspkind = require('lspkind')  cmp.setup {   -- ...   formatting = {     format = lspkind.cmp_format({       mode = 'symbol_text',       maxwidth = 50,       ellipsis_char = '...',       before = function (_, vim_item)         return vim_item       end     })   }   -- ... } <\/code><\/pre>\n<p>\u0412 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u043c \u043d\u0438\u0436\u0435 \u0441\u043a\u0440\u0438\u043d\u043a\u0430\u0441\u0442\u0435 \u044f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e, \u043a\u0430\u043a <code>nvim-cmp<\/code> \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0430\u0432\u0442\u043e-\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c LSP. \u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u0438\u043a\u043e\u043d\u043a\u0438 \u0440\u044f\u0434\u043e\u043c \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u0442\u0438\u043f\u043e\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439 \u0432\u0437\u044f\u0442\u044b \u0438\u0437 <code>lspkind<\/code>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b6a\/59d\/22b\/b6a59d22b4a4df48eaaa4fbad3cec0e0.gif\" alt=\"\u0410\u0432\u0442\u043e-\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441 nvim-cmp\" title=\"\u0410\u0432\u0442\u043e-\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441 nvim-cmp\" width=\"3840\" height=\"2110\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b6a\/59d\/22b\/b6a59d22b4a4df48eaaa4fbad3cec0e0.gif\"\/><\/p>\n<div><figcaption>\u0410\u0432\u0442\u043e-\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441 <code>nvim-cmp<\/code><\/figcaption><\/div>\n<\/figure>\n<h3>\u041f\u043e\u0438\u0441\u043a \u2014 telescope-nvim<\/h3>\n<p><span>telescope.nvim<\/span> &#8212; \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u044b\u0439 fuzzy-\u043f\u043e\u0438\u0441\u043a \u043f\u043e \u043b\u044e\u0431\u044b\u043c \u0441\u043f\u0438\u0441\u043a\u0430\u043c. <code>telescope<\/code> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0438 \u0432\u044b\u0431\u043e\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u041a\u0430\u043a \u0438 <code>nvim-cmp<\/code>, <code>telescope<\/code> \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u0451\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 <code>telescope<\/code> \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>\u041c\u043e\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f <code>telescope<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>fzf<\/code> \u0434\u043b\u044f \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0438\u0441\u043a\u0430, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <code>telescope-fzf-native<\/code>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e:<\/p>\n<pre><code class=\"lua\">use {'nvim-telescope\/telescope-fzf-native.nvim', run = 'make' } <\/code><\/pre>\n<p>\u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 Java-\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0434\u043b\u0438\u043d\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0430\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432. \u0427\u0442\u043e\u0431\u044b \u0443\u0441\u0435\u0447\u044c \u0438\u043c\u0435\u043d\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>fzf<\/code> \u0434\u043b\u044f \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e:<\/p>\n<pre><code class=\"lua\">require('telescope').setup({   defaults = {     path_display = {       shorten = {         len = 3, exclude = {1, -1}       },       truncate = true     },     dynamic_preview_title = true,   },   extensions = {     fzf = {       fuzzy = true,                    -- false \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0447\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a       override_generic_sorter = true,       override_file_sorter = true,       case_mode = \"smart_case\",        -- \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b: \"ignore_case\", \"respect_case\".                                        --  \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u044d\u0442\u043e \"smart_case\", \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0438\u0441\u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e-\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c    --  \u043f\u0440\u0438 \u0432\u0432\u043e\u0434\u0435 \u0431\u0443\u043a\u0432 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043d\u0438\u0436\u043d\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435, \u043d\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e-\u0437\u0430\u0432\u0438\u0441\u0438\u043c, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u0430    --  \u0431\u0443\u043a\u0432\u0430 \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c.     }   } }) require('telescope').load_extension('fzf') <\/code><\/pre>\n<p>\u042f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c <code>telescope<\/code>, \u0438 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448 \u0441 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c <code>&lt;leader>f<\/code>:<\/p>\n<pre><code class=\"lua\">-- telescope nnoremap(\"&lt;leader>ff\", \"&lt;cmd>Telescope find_files&lt;cr>\", \"Find file\") nnoremap(\"&lt;leader>fg\", \"&lt;cmd>Telescope live_grep&lt;cr>\", \"Grep\") nnoremap(\"&lt;leader>fb\", \"&lt;cmd>Telescope buffers&lt;cr>\", \"Find buffer\") nnoremap(\"&lt;leader>fm\", \"&lt;cmd>Telescope marks&lt;cr>\", \"Find mark\") nnoremap(\"&lt;leader>fr\", \"&lt;cmd>Telescope lsp_references&lt;cr>\", \"Find references (LSP)\") nnoremap(\"&lt;leader>fs\", \"&lt;cmd>Telescope lsp_document_symbols&lt;cr>\", \"Find symbols (LSP)\") nnoremap(\"&lt;leader>fc\", \"&lt;cmd>Telescope lsp_incoming_calls&lt;cr>\", \"Find incoming calls (LSP)\") nnoremap(\"&lt;leader>fo\", \"&lt;cmd>Telescope lsp_outgoing_calls&lt;cr>\", \"Find outgoing calls (LSP)\") nnoremap(\"&lt;leader>fi\", \"&lt;cmd>Telescope lsp_implementations&lt;cr>\", \"Find implementations (LSP)\") nnoremap(\"&lt;leader>fx\", \"&lt;cmd>Telescope diagnostics bufnr=0&lt;cr>\", \"Find errors (LSP)\") <\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0441\u043a\u0440\u0438\u043d\u043a\u0430\u0441\u0442\u0435 \u044f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e, \u043a\u0430\u043a <code>telescope<\/code> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0444\u0430\u0439\u043b\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d72\/6f2\/9c9\/d726f29c941c326eea5ff9588dee4c9b.gif\" alt=\"\u041f\u043e\u0438\u0441\u043a \u0444\u0430\u0439\u043b\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e telescope\" title=\"\u041f\u043e\u0438\u0441\u043a \u0444\u0430\u0439\u043b\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e telescope\" width=\"3840\" height=\"2110\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d72\/6f2\/9c9\/d726f29c941c326eea5ff9588dee4c9b.gif\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0438\u0441\u043a \u0444\u0430\u0439\u043b\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>telescope<\/code><\/figcaption><\/div>\n<\/figure>\n<h3>\u041f\u0430\u043d\u0435\u043b\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u2014 symbols-outline<\/h3>\n<p>\u0415\u0449\u0451 \u043e\u0434\u043d\u043e\u0439 \u0444\u0438\u0447\u0435\u0439 IDE, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0430\u043d\u0435\u043b\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u043e\u0435, \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0444\u0430\u0439\u043b\u0435 \u0438 \u0438\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0438 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u043b\u0430\u0433\u0438\u043d <a href=\"https:\/\/github.com\/simrat39\/symbols-outline.nvim\" rel=\"noopener noreferrer nofollow\">symbols-outline<\/a>. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0434\u043b\u044f \u043c\u043e\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f, \u043d\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435: \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u0430\u043d\u0435\u043b\u0438 \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e:<\/p>\n<pre><code class=\"lua\">require(\"symbols-outline\").setup {   auto_close = true, } <\/code><\/pre>\n<p>\u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043f\u0430\u043d\u0435\u043b\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u0430\u0432\u0438\u0448 <code>Ctrl-Shift-\u0421\u0442\u0440\u0435\u043b\u043a\u0430 \u0432\u043f\u0440\u0430\u0432\u043e<\/code> \u0438 <code>Ctrl-Shift-\u0421\u0442\u0440\u0435\u043b\u043a\u0430 \u0432\u043b\u0435\u0432\u043e<\/code>:<\/p>\n<pre><code class=\"lua\">-- \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043d\u0435\u043b\u044c\u044e nnoremap(\"&lt;C-S-Right>\", \"&lt;cmd>:vertical resize -1&lt;cr>\", \"Minimize window\") nnoremap(\"&lt;C-S-Left>\", \"&lt;cmd>:vertical resize +1&lt;cr>\", \"Maximize window\") <\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0441\u043a\u0440\u0438\u043d\u043a\u0430\u0441\u0442\u0435 \u044f \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e \u0444\u0430\u0439\u043b, \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044e\u0441\u044c \u043f\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 <code>symbols-outline<\/code> \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u044e \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043a \u043d\u0435\u043c\u0443:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9e0\/4ed\/7dd\/9e04ed7dd3abe080849474c575ebe47a.gif\" alt=\"\u041f\u0430\u043d\u0435\u043b\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432\" title=\"\u041f\u0430\u043d\u0435\u043b\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432\" width=\"3840\" height=\"2110\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9e0\/4ed\/7dd\/9e04ed7dd3abe080849474c575ebe47a.gif\"\/><\/p>\n<div><figcaption>\u041f\u0430\u043d\u0435\u043b\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432<\/figcaption><\/div>\n<\/figure>\n<h3>\u041f\u0440\u043e\u0432\u043e\u0434\u043d\u0438\u043a \u2014 nvim-tree<\/h3>\n<p>\u041f\u043b\u0430\u0433\u0438\u043d <a href=\"https:\/\/github.com\/nvim-tree\/nvim-tree.lua\" rel=\"noopener noreferrer nofollow\">nvim-tree<\/a> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u043e\u0431\u043e\u0437\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044c, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Lua. \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448 \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u0434\u0440\u0435\u0432\u0430:<\/p>\n<pre><code class=\"lua\">-- nvim-tree nnoremap(\"&lt;leader>nn\", \"&lt;cmd>NvimTreeToggle&lt;cr>\", \"Open file browser\") nnoremap(\"&lt;leader>nf\", \"&lt;cmd>NvimTreeFindFile&lt;cr>\", \"Find in file browser\") <\/code><\/pre>\n<p>\u042f \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 <code>netrw<\/code>, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0435\u0433\u043e \u0438 \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432\u0430\u0442\u044c \u0441 <code>nvim-tree<\/code>. \u042f \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b \u043f\u0430\u043d\u0435\u043b\u044c \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0434\u043e \u043d\u0443\u0436\u043d\u043e\u0439 \u0448\u0438\u0440\u0438\u043d\u044b:<\/p>\n<pre><code class=\"lua\">require(\"nvim-tree\").setup({   disable_netrw = true,   view = {     adaptive_size = true,     float = {       enable = true,     },   },   actions = {     open_file = {       quit_on_open = true,     }   } }) <\/code><\/pre>\n<p>\u0412 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u043d\u0438\u0436\u0435 \u0441\u043a\u0440\u0438\u043d\u043a\u0430\u0441\u0442\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>nvim-tree<\/code>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5d0\/c30\/507\/5d0c30507dc08e95c477aa682aec6437.gif\" alt=\"\u0424\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0441 nvim-tree\" title=\"\u0424\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0441 nvim-tree\" width=\"3840\" height=\"2110\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5d0\/c30\/507\/5d0c30507dc08e95c477aa682aec6437.gif\"\/><\/p>\n<div><figcaption>\u0424\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0441 <code>nvim-tree<\/code><\/figcaption><\/div>\n<\/figure>\n<h3>\u0421\u0442\u0430\u0442\u0443\u0441\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u2014 lualine<\/h3>\n<p><a href=\"https:\/\/github.com\/nvim-lualine\/lualine.nvim\" rel=\"noopener noreferrer nofollow\">lualine<\/a> \u2014 \u044d\u0442\u043e \u043f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f <code>statusline<\/code> (<em>\u0441\u0442\u0430\u0442\u0443\u0441\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 Vim\/Neovim, \u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434.<\/em>), \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Lua. \u041f\u043b\u0430\u0433\u0438\u043d \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0444\u0430\u0439\u043b\u0435, \u0442\u0430\u043a\u0443\u044e \u043a\u0430\u043a \u0442\u0438\u043f \u0444\u0430\u0439\u043b\u0430, \u0432\u0435\u0442\u0432\u044c \u0432 git \u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f \u0432\u043d\u043e\u0448\u0443 \u0432 <code>lualine<\/code>, &#8212; \u044d\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0442\u0435\u043c\u044b \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u0433\u0430\u043c\u043c\u043e\u0439 \u043c\u043e\u0435\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430:<\/p>\n<pre><code class=\"lua\">require('lualine').setup {   options = { theme = 'onedark' }, } <\/code><\/pre>\n<h3>\u0418\u0442\u043e\u0433<\/h3>\n<p>\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b LSP \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u043c \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f IDE \u0438\u0437 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430. \u041a\u0430\u0440\u0442\u0438\u043d\u0443 \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 LSP-\u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0432 Neovim, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430. \u041f\u043e\u0442\u0440\u0430\u0442\u0438\u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u044f \u0441\u043c\u043e\u0433 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c Neovim \u0432 IDE \u043f\u043e\u0434 Java, \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0435\u0451 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u0441\u0440\u0435\u0434\u0443.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a IDE \u043d\u0430 \u0431\u0430\u0437\u0435 Neovim, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043c\u043e\u044e \u043f\u043e\u043b\u043d\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043d\u0430 <a href=\"https:\/\/github.com\/soofaloofa\/dotfiles\/tree\/master\/.config\/nvim\" rel=\"noopener noreferrer nofollow\">Github<\/a>.<\/p>\n<p><strong><em>\u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434.<\/em>:<\/strong> \u0421 \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445 \u043f\u043e\u0440 (\u0441 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 2023) <a href=\"https:\/\/github.com\/wbthomason\/packer.nvim\" rel=\"noopener noreferrer nofollow\">\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432<\/a> (Packer), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435, \u0431\u043e\u043b\u0435\u0435 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438, \u0430 \u0441\u0430\u043c \u0430\u0432\u0442\u043e\u0440 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 \u0441\u0442\u0430\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u2014 <a href=\"https:\/\/github.com\/folke\/lazy.nvim\" rel=\"noopener noreferrer nofollow\">lazy.nvim<\/a>. \u041a\u043b\u0430\u0441\u0441\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0438 \u0432\u044b \ud83d\ude42<\/p>\n<hr\/>\n<p>\u0418\u041c\u0425\u041e: \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 Java, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Vim \u0438\u043b\u0438 NeoVim \u044d\u0442\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u043e\u0442\u0433\u043e\u0432\u043e\u0440\u043a\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u043e\u0432\u044b\u0440\u044f\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0430\u0445, \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u0445 \u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u0445, \u0447\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430 \u043d\u0430\u0434 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u0438\u0440\u043e\u0441\u0442\u043e\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c. \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f Intellij IDEA Ultimate \u0438\u043b\u0438 Community, \u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d <a href=\"https:\/\/lp.jetbrains.com\/ideavim\" rel=\"noopener noreferrer nofollow\">IdeaVim<\/a> \u043f\u043e\u0434 \u043e\u0431\u0435. \u041d\u0443 \u0434\u0430 \u043b\u0430\u0434\u043d\u043e, \u0432\u0435\u0434\u044c \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0447\u0451\u0442\u0435 \u0432 Vim \u0435\u0441\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0438\u0432\u0430\u044f \u0432\u0445\u043e\u0434\u0430, \u043d\u043e \u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043a\u0440\u0443\u0442\u0430\u044f \u043a\u0440\u0438\u0432\u0430\u044f \u0432\u044b\u0445\u043e\u0434\u0430:)<\/p>\n<p>\u0411\u0443\u0434\u0435\u0442 \u0435\u0449\u0451 \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043f\u043e Java \u0438\/\u0438\u043b\u0438 CLI: \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432, \u0442\u0430\u043a \u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u0435\u0439. \u041f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c <a href=\"https:\/\/habr.com\/ru\/users\/novusnota\/publications\/articles\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442 \u043d\u0430 \u0425\u0430\u0431\u0440\u0435<\/a> \u0438 <a href=\"https:\/\/t.me\/novusnota\" rel=\"noopener noreferrer nofollow\">\u0432 \u0422\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u0435<\/a>, \u0435\u0441\u043b\u0438 \u0435\u0449\u0451 \u043d\u0435.<\/p>\n<\/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\/articles\/760234\/\"> https:\/\/habr.com\/ru\/articles\/760234\/<\/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<p>\u0412\u043f\u0435\u0440\u0432\u044b\u0435 \u044f \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0441\u044f \u0441 Vim \u0432 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0435, \u0438 \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440 \u043e\u043d \u0431\u044b\u043b \u0436\u0435\u043b\u0430\u043d\u043d\u044b\u043c \u0441\u043f\u0443\u0442\u043d\u0438\u043a\u043e\u043c \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u043e\u0435\u0439 \u043a\u0430\u0440\u044c\u0435\u0440\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430. \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438 \u043d\u0430 Python \u0438 Go \u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043c\u043d\u0435 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441 Vim, \u0438 \u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0441\u0435\u0431\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u044b\u043c. \u0410 \u0432\u043e\u0442 Java \u0431\u044b\u043b\u0430 \u0434\u0440\u0443\u0433\u0438\u043c \u0437\u0432\u0435\u0440\u0435\u043c. \u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u044f\u0432\u043b\u044f\u043b\u0430\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 Java, \u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b Vim, \u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u043a IntelliJ \u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0443 <a href=\"https:\/\/lp.jetbrains.com\/ideavim\/\" rel=\"noopener noreferrer nofollow\">IdeaVim<\/a>, \u0447\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u043e\u0433\u0430\u0442\u044b\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u044f\u0437\u044b\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0430\u044f IDE.<\/p>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0443 IntelliJ \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u0412 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435, \u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 \u0432 \u043d\u0435\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u043e\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0432\u0441\u0435 \u043a\u044d\u0448\u0438, \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u043e \u043f\u043e\u043b\u0434\u043d\u044f \u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u0430 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u043f\u043e \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044e \u0435\u0451 \u043d\u0435\u043f\u043e\u043b\u0430\u0434\u043e\u043a. \u041f\u0440\u043e\u0439\u0434\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u044e \u044d\u0442\u0443 \u043f\u0435\u0441\u043d\u044e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043d\u0430\u0437\u0430\u0434, \u0438 \u0433\u043b\u044f\u0434\u044f \u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0432 Vim, Neovim, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 <a href=\"https:\/\/microsoft.github.io\/language-server-protocol\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (Language Server Protocol, LSP)<\/a> \u0438 \u0438\u0445 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439, \u044f \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0435\u0449\u0451 \u0440\u0430\u0437 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <a href=\"https:\/\/neovim.io\/\" rel=\"noopener noreferrer nofollow\">Neovim<\/a> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 Java IDE.<\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u044d\u0442\u043e? \u0414\u0430. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043b\u0438 \u044f \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c? \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u0421\u043e\u0448\u0435\u043b \u043b\u0438 \u044f \u0441 \u0443\u043c\u0430? \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e.<\/p>\n<p>\u041f\u043e\u0435\u0445\u0430\u043b\u0438.<\/p>\n<blockquote>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u043e\u043b\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043e\u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043d\u0430 <a href=\"https:\/\/github.com\/soofaloofa\/dotfiles\/tree\/master\/.config\/nvim\" rel=\"noopener noreferrer nofollow\">Github<\/a>.<\/p>\n<\/blockquote>\n<h3>\u041b\u0430\u043d\u0434\u0448\u0430\u0444\u0442<\/h3>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c Neovim \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0432 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0443\u044e IDE, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0438\u0436\u0443\u0449\u0438\u0445\u0441\u044f \u0447\u0430\u0441\u0442\u0435\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u0437\u0430\u0443\u043c\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438, \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0438 \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u043e\u043d\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c.<\/p>\n<p>\u0414\u043b\u044f \u043c\u0435\u043d\u044f \u0432\u0430\u0436\u043d\u044b \u0442\u0430\u043a\u0438\u0435 \u0444\u0438\u0447\u0438 IDE, \u043a\u0430\u043a \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u043f\u043e \u043a\u043e\u0434\u0443 (\u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e, \u043d\u0430\u0439\u0442\u0438 \u0441\u0441\u044b\u043b\u043a\u0438, \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438), \u0430\u0432\u0442\u043e-\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430, \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u043f\u043e \u0442\u0438\u043f\u0430\u043c \u0438 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430\u043c, \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0430. \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439, \u0430 \u0431\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442-\u043a\u043e\u043c\u043f\u0430\u043d\u044c\u043e\u043d &#8212; \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430 &#8212; \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u043e\u0442\u043b\u0430\u0434\u043a\u0438.<\/p>\n<p>\u0412\u0441\u0435 \u0432\u043c\u0435\u0441\u0442\u0435: \u0441\u0435\u0440\u0432\u0435\u0440 \u044f\u0437\u044b\u043a\u0430, \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0438 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0441 \u043a\u043e\u0434\u043e\u043c, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0445\u0435\u043c\u0435:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b IDE \u043d\u0430 \u0431\u0430\u0437\u0435 Neovim<\/figcaption><\/div>\n<\/figure>\n<p>\u042d\u0442\u0430 \u0441\u0445\u0435\u043c\u0430 \u0445\u043e\u0440\u043e\u0448\u0430 \u0442\u0435\u043c, \u0447\u0442\u043e \u043e\u043d\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u043e\u0439 \u0434\u043b\u044f Java. \u0420\u0430\u0437\u043e\u0431\u0440\u0430\u0432\u0448\u0438\u0441\u044c \u0441 \u0442\u0435\u043c, \u043a\u0430\u043a \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430. \u0414\u043b\u044f Java \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <a href=\"https:\/\/github.com\/eclipse\/eclipse.jdt.ls\" rel=\"noopener noreferrer nofollow\">Eclipse JDT LS<\/a> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 <a href=\"https:\/\/github.com\/microsoft\/vscode-java-debug\" rel=\"noopener noreferrer nofollow\">vscode-java-debug<\/a> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0433\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u0430 (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <a href=\"https:\/\/github.com\/microsoft\/java-debug\" rel=\"noopener noreferrer nofollow\">java-debug<\/a>).<\/p>\n<h3>\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c<\/h3>\n<p>Neovim \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a Lua 5.1 \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 LuaJIT \u0432 \u0441\u0430\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u044f\u0437\u044b\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432\u0430\u043c \u0432 \u043b\u044e\u0431\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u042d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432. \u042f \u0445\u043e\u0442\u0435\u043b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 Neovim, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u044f \u0441\u0434\u0435\u043b\u0430\u043b, &#8212; \u044d\u0442\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0442\u0435\u0445 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e:<\/p>\n<pre><code class=\"lua\">-- \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 (\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 Lua \u0438\/\u0438\u043b\u0438 Vimscript) vim.g.loaded_perl_provider = 0 vim.g.loaded_ruby_provider = 0 vim.g.loaded_node_provider = 0 vim.g.loaded_python_provider = 0 vim.g.loaded_python3_provider = 0 <\/code><\/pre>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u044d\u0444\u0444\u0435\u043a\u0442 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0432\u044b\u0431\u0438\u0440\u0430\u044e, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0434\u043b\u044f Neovim \u044f\u0437\u044b\u043a\u0430\u043c\u0438: Vimscript \u0438 Lua. \u041f\u043e\u043a\u0430 \u0447\u0442\u043e \u044f \u043d\u0435 \u043d\u0430\u0445\u043e\u0436\u0443 \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u043c, \u043d\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043a\u0430\u0436\u0435\u0442. \u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Lua \u0432 Neovim \u043f\u0440\u0438\u0432\u0435\u043b\u0430 \u043a \u0440\u0435\u0437\u043a\u043e\u043c\u0443 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u043a\u0430\u043a \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430, \u0442\u0430\u043a \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c.<\/p>\n<blockquote>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 Neovim, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0430\u0447\u0435, \u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0435\u0441\u0442\u044c \u0438\u0445 \u043c\u043e\u0438\u043c. \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 <a href=\"https:\/\/github.com\/rockerBOO\/awesome-neovim\" rel=\"noopener noreferrer nofollow\">Awesome Neovim<\/a> \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u043b\u0443\u0447\u0448\u0438\u0445 \u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0437\u0440\u0435\u043b\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432.<\/p>\n<\/blockquote>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 LSP-\u043a\u043b\u0438\u0435\u043d\u0442 Neovim, \u0447\u0442\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u0432\u0430\u0441 \u043b\u0451\u0433\u043a\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0442\u0434\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0435 <a href=\"https:\/\/github.com\/neoclide\/coc.nvim\" rel=\"noopener noreferrer nofollow\">coc.nvim<\/a>.<\/p>\n<h3>\u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432<\/h3>\n<p>\u041f\u0440\u0435\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 Neovim \u0432 \u043f\u043e\u043b\u043d\u043e\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0443\u044e IDE \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c\u0438. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c Lua \u044f \u0432\u044b\u0431\u0440\u0430\u043b <a href=\"https:\/\/github.com\/wbthomason\/packer.nvim\" rel=\"noopener noreferrer nofollow\">packer.nvim<\/a>. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c packer \u0432 \u0441\u0432\u043e\u0439 <code>packpath<\/code> &#8212; \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0430\u0448 Neovim \u0438\u0449\u0435\u0442 \u043f\u043b\u0430\u0433\u0438\u043d\u044b. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e\u0442 \u0448\u0430\u0433 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d, <code>packer.nvim<\/code> \u0431\u0443\u0434\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0430\u043c \u0441\u043e\u0431\u043e\u0439, \u0438 \u0441 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0432\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f \u043e <code>packpath<\/code>. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0430 macOS (<em>\u0438 \u043d\u0430 Linux, \u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434.<\/em>) \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/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>\u0417\u0430\u0442\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Lua. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u0444\u0430\u0439\u043b <code>~\/.config\/nvim\/lua\/plugins.lua<\/code>, \u0430 \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0435\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>require('plugins')<\/code> \u0432 \u0444\u0430\u0439\u043b\u0435 <code>init.lua<\/code>.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043c\u043e\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430 <code>plugins.lua<\/code>:<\/p>\n<pre><code class=\"lua\">return require('packer').startup(function(use)   -- Packer can manage itself   use 'wbthomason\/packer.nvim'    use 'mfussenegger\/nvim-dap'   use 'mfussenegger\/nvim-jdtls'   use 'nvim-lua\/plenary.nvim' end) <\/code><\/pre>\n<p><code>packer.nvim<\/code> \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u043d\u043e \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b, \u0447\u0442\u043e \u043f\u0440\u043e\u0449\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c Packer \u043b\u0438\u0448\u044c \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0438\u0445 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439. \u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u0432\u044b\u0431\u043e\u0440 \u0437\u0430 \u0441\u0430\u043c\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0435 \u0441\u0442\u0435\u0441\u043d\u044f\u0439\u0442\u0435\u0441\u044c \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f <code>packer.nvim<\/code>, \u0432 <code>~\/.config\/nvim\/init.lua<\/code> \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>require('plugins')<\/code>. \u041e\u0442\u0442\u0443\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>:PackerInstall<\/code> \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432\u0441\u0435\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p>\u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0443 \u0437\u0430 \u0440\u0430\u0437, \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c, \u043a\u0430\u043a \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u043a\u0430\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u043d \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u044b \u0442\u043e\u0447\u043d\u0435\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0435 \u0441\u0435\u0431\u044f \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0438.<\/p>\n<h3>\u042f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u2014 eclipse.jdt.ls<\/h3>\n<p>\u041e\u0441\u043d\u043e\u0432\u0443 \u0440\u0430\u0431\u043e\u0442\u044b Neovim, \u043a\u0430\u043a IDE, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 <a href=\"https:\/\/microsoft.github.io\/language-server-protocol\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (LSP)<\/a>. \u0414\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u044f\u0437\u044b\u043a\u0430 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 IDE \u043d\u0443\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440. \u0414\u043b\u044f Java \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c \u0434\u0435-\u0444\u0430\u043a\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <a href=\"https:\/\/github.com\/eclipse\/eclipse.jdt.ls\" rel=\"noopener noreferrer nofollow\">eclipse.jdt.ls<\/a> \u2014 Eclipse JDT Language Server.<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 macOS \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Homebrew, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0432 \u043c\u0435\u0441\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 (\u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043d\u043e\u043c\u0435\u0440 \u0432\u0435\u0440\u0441\u0438\u0438):<\/p>\n<pre><code class=\"bash\">$ > brew install jdtls  ...  ==> Pouring jdtls--1.18.0.all.bottle.tar.gz ?  \/opt\/homebrew\/Cellar\/jdtls\/1.18.0: 99 files, 42.8MB <\/code><\/pre>\n<p>\u041d\u0430 \u043c\u043e\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u043c\u0435\u0441\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u2014 <code>\/opt\/homebrew\/Cellar\/jdtls\/1.18.0<\/code>. \u041f\u0443\u0442\u044c \u0434\u043e \u043d\u0435\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043f\u043e\u0437\u0436\u0435 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 LSP-\u043a\u043b\u0438\u0435\u043d\u0442\u0430.<\/p>\n<p><strong><em>\u043f\u0440\u0438\u043c. \u043f\u0435\u0440\u0435\u0432\u043e\u0434.:<\/em><\/strong><\/p>\n<h4>Linux<\/h4>\n<p>\u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043d\u0430 Linux \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0448\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u044b \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u2014 \u0438\u0449\u0438\u0442\u0435 \u043f\u043e \u043a\u043b\u044e\u0447\u0430\u043c <code>jdtls<\/code> \u0438 <code>eclipse.jdt.ls<\/code>.<\/p>\n<p>\u0418\u043b\u0438 \u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0430\u0447\u0430\u0439\u0442\u0435 <a href=\"https:\/\/www.eclipse.org\/downloads\/download.php?file=\/jdtls\/milestones\/1.26.0\/jdt-language-server-1.26.0-202307271613.tar.gz\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 (1.26.0 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u0445\u043e\u0434\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430)<\/a>, \u0440\u0430\u0437\u0430\u0440\u0445\u0438\u0432\u0438\u0440\u0443\u0439\u0442\u0435, \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435, \u0433\u0434\u0435 \u0443\u0434\u043e\u0431\u043d\u043e \u2014 \u0432 <code>PATH<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u0422\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 macOS, \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043f\u0443\u0442\u044c \u0434\u043e \u0435\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438.<\/p>\n<h4>Windows<\/h4>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0430 \u0432\u0441\u044e \u044d\u0442\u0443 \u0430\u0432\u0430\u043d\u0442\u044e\u0440\u0443 \u0438\u0437 \u043f\u043e\u0434 Windows, \u0442\u043e \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0443\u0442\u0438 \u0434\u043e \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u0435 \u0432 \u044d\u0442\u043e\u043c \u0433\u0430\u0439\u0434\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0433\u043e\u0442\u043e\u0432\u044c\u0442\u0435\u0441\u044c \u0447\u0438\u043d\u0438\u0442\u044c \u0438\u0437 \u043d\u0438\u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0430 \u0440\u043e\u0432\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e Windows.<\/p>\n<p>\u0410 \u0447\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f Eclipse JDT LS, \u0442\u043e \u043f\u0440\u0438 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0438 \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0435 \u0432\u0441\u0451 \u0442\u043e\u0433\u043e \u0436\u0435 <a href=\"https:\/\/www.eclipse.org\/downloads\/download.php?file=\/jdtls\/milestones\/1.26.0\/jdt-language-server-1.26.0-202307271613.tar.gz\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u0430<\/a>, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u044b \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0435 \u0435\u0433\u043e \u043f\u043e \u043f\u0443\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432. \u00af_(\u30c4)_\/\u00af<\/p>\n<h3>\u041a\u043b\u0438\u0435\u043d\u0442 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u2014 Neovim \u0438 nvim-jdtls<\/h3>\n<p>Neovim \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (LSP) \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438, \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 LSP \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Lua \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <code>vim.lsp<\/code> \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0445 LSP-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/github.com\/neovim\/nvim-lspconfig\" rel=\"noopener noreferrer nofollow\">nvim-lspconfig<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <a href=\"https:\/\/github.com\/neovim\/nvim-lspconfig\/blob\/master\/doc\/server_configurations.md\" rel=\"noopener noreferrer nofollow\">\u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432<\/a>.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u043b\u0430\u0433\u0438\u043d\u044b, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u0431\u043e\u0433\u0430\u0442\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0447\u0435\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 LSP. \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u043d\u0438\u0445 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f Java. <a href=\"https:\/\/github.com\/mfussenegger\/nvim-jdtls\" rel=\"noopener noreferrer nofollow\">nvim-jdtls<\/a> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u0434\u0430. \u0418 <code>nvim-lspconfig<\/code>, \u0438 <code>nvim-jdtls<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 Neovim \u043a\u043b\u0438\u0435\u043d\u0442, \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e <code>nvim-jdtls<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e. \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <code>nvim-jdtls<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u0435\u0433\u043e, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435 \u0436\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448 Neovim \u0438 \u0444\u0438\u0447\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432, \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u043b\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f.<\/p>\n<p>\u041d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0445\u0435\u043c\u0435 \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e <code>nvim-jdtls<\/code> \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0435\u043c \u043e\u043d \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 <code>nvim-lspconfig<\/code>. \u041e\u0431\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0443\u0436\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0432 Neovim \u0441\u0432\u044f\u0437\u043a\u0438 Lua, \u043d\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443:<\/p>\n<pre><code class=\"bash\">\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510           \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u2502 nvim-jdtls \u2502           \u2502 nvim-lspconfig \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518           \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518      |                         |     start_or_attach           nvim_lsp.jdtls.setup      \u2502                              |      \u2502                             \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0445\u0443\u043a\u0430 \u0434\u043b\u044f java filetype                          \u2502      \u2502    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                  \u2502      \u2514\u2500\u2500\u2500\u25ba\u2502 vim.lsp \u2502\u25c4\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518           \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 <\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 <code>nvim-jdtls<\/code> \u043c\u043e\u0436\u0435\u0442 \u043f\u0443\u0433\u0430\u0442\u044c. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u044f \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e <code>nvim-jdtls<\/code> \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043e\u043f\u0446\u0438\u0439 \u0432\u0437\u044f\u0442\u044b \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438\u0437 <a href=\"https:\/\/github.com\/eclipse\/eclipse.jdt.ls\/wiki\/Running-the-JAVA-LS-server-from-the-command-line\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Eclipse JDT LS<\/a> \u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b \u0434\u043b\u044f \u043d\u0435\u0433\u043e:<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043d\u0438\u043f\u043f\u0435\u0442 \u043a\u043e\u0434\u0430 \u043d\u0430 164 \u0441\u0442\u0440\u043e\u043a\u0438<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lua\">local home = os.getenv('HOME') local jdtls = require('jdtls')  -- \u0422\u0438\u043f\u044b \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u043a\u043e\u0440\u0435\u043d\u044c Java-\u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f jdtls. local root_markers = {'gradlew', 'mvnw', '.git'} local root_dir = require('jdtls.setup').find_root(root_markers)  -- jdtls \u0445\u0440\u0430\u043d\u0438\u0442 \u0444\u0430\u0439\u043b\u044b, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043f\u043a\u0438 \u0441 \u043e\u043d\u044b\u043c. \u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c -- \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443 \u043f\u043e\u0434<\/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-354549","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/354549","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=354549"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/354549\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=354549"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=354549"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=354549"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}