Привет! Я Антон Губарев, инженер команды Platform as a Service (PaaS) в Авито. Долгое время я пользовался IDE от JetBrains, затем пересел на VS Code. Последние несколько лет работаю с кодом только в NeoVim — адаптировал его под себя и перестал использовать другие IDE.
Я не фанат ни одного из редакторов или IDE и не буду пытаться убедить вас перейти с привычной платформы на NeoVim. Я только расскажу, к чему готовиться человеку, который привык работать в JetBrains или VS Code и планирует попробовать NeoVim.
NeoVim – это ответвление от Vim, которое привносит некоторые важные преимущества. Я для себя остановился именно на NeoVim, и поэтому большая часть статьи именно в этом контексте. Однако много чего из материала можно отнести к Vim.
NeoVim не работает «из коробки», в нём нужно прописывать конфигурацию, биндить комбинации клавиш, собирать подходящие плагины. Но в итоге получается идеальный редактор: в нём всё устроено так, как нужно конкретному разработчику.
В основе статьи — моё выступление на Golang Evrone Meetup. В видео вы найдёте больше деталей о плагинах, работе команд и комбинаций. А все исходники есть в репозитории на GitHub.
Буферы, окна и табы вместо привычных вкладок
Когда новый пользователь открывает NeoVim, первое, что может запутать, — отсутствие вкладок. В большинстве редакторов каждый файл находится в отдельной вкладке внутри одного окна IDE. В NeoVim вместо этого есть три сущности: буферы, окна и табы.
Буфер — отдельный открытый файл. Один и тот же файл можно просматривать и редактировать в нескольких буферах. При этом все изменения в одном из них будут автоматически и мгновенно отображаться в остальных.
Буферы можно объединять в окна, а окна — в табы. Можно открыть несколько табов NeoVim, внутри каждого из них — несколько окон, а в каждом окне — разные комбинации файлов в буферах.
Чтобы начать пользоваться этим, нужно сначала постичь дзен NeoVim. У меня пока не получилось, поэтому использую специальный плагин — о нём рассказываю ниже.
Управление без мышки, только на клавиатуре
В NeoVim нет поддержки мыши, работать приходится только на клавиатуре. Причём даже навигация по коду выполняется не привычными стрелками, а клавишами HJKL. Когда создавался Vi (прародитель NeoVim) клавиатура его автора Билла Джоя выглядела вот так:
Преимущества управления в NeoVim поймут те, кто владеет десятипальцевым методом печати. Смысл в том, что большинство комбинаций находятся на буквенных и цифровых сочетаниях, поэтому во время работы почти не нужно смещать кисти.
Поначалу может быть сложно с таким управлением, но со временем привыкаешь. Я довёл навыки до автоматизма за две недели и увидел разницу в скорости работы с мышью и без.
Команды NeoVim
В NeoVim есть команды для практически любой ситуации, которая возникает во время работы. Их можно комбинировать и вызывать подряд. Иногда это выглядит довольно сложно, но в командах получается быстро разобраться и запомнить, что за чем следует.
Допустим, нужно найти все foo
в коде и заменить их на bar
. При этом перед каждой заменой спрашивать подтверждение. Команда для этого:
:s/foo/bar/gc
Если нужно искать в диапазоне от 3-й до 10-й строки, а подтверждения не требуется, то получим:
:3,10s/foo/bar/g
Список базовых команд можно посмотреть в документации NeoVim или набрать :h
, чтобы вызвать подсказку.
Для постоянно повторяющихся действий можно биндить команды или даже их последовательности — привязывать к конкретной клавише или комбинации. Это сильно экономит время во время работы.
Комбинации клавиш для быстрых действий
Некоторые действия с кодом закреплены за конкретными комбинациями клавиш. Для работы не надо запоминать их все. Достаточно 30–40 штук — они чаще всего используются в повседневных задачах. Например, я редактирую код с помощью комбинаций:
dd
— удалить строку;a A i I o O
— начать редактирование (с конца строки или сначала, со следующего символа или предыдущего);w b
— перемещать по словам;gg G
— перейти в начало файла;`х
— переместить курсор на метку х;<n>С
или<n>99
— перейти на строку номер <n>;diw
— удалить слово под курсором;de
— удалить символы с текущего до конца слова, включая пробел;[{}]
— переместиться назад по тексту к открывающей скобке текущего блока кода;%
— перейти от открывающей скобки к закрывающей, при повторном нажатии — перейти обратно;u U
— изменить регистр выделенных символов на нижний.
Конфигурация: настроить можно почти всё
Конфигурируемость — это одно из главных преимуществ, которое делает NeoVim удобным и полезным.
Обычно конфигурация в редакторах кода описывается в формате JSON или XML. Их возможности ограничены синтаксисом, поэтому тонкая настройка не всегда удаётся. Самые популярные IDE вроде VS Code или JetBrains настраиваются через графический интерфейс — в нём ещё меньше возможностей для настроек, только то, что допускают разработчики софта.
В NeoVim все настройки и плагины пишутся на языке программирования Lua (есть поддержка VimScript). Это полноценный кодинг, а не просто выбор опций: можно задать условия, при которых будет работать та или иная версия конфигурации. Например, настроить новую комбинацию клавиш так, чтобы она закрывала терминал, только если процесс в нем завершен.
local on_attach = function(client, bufnr)
local function buf_set_keymap(...)
vim.api.nvim_buf_set_keymap(bufnr, ...)
end
-- Enable completion triggered by <c-x><c-o>
vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc')
-- Mappings.
buf_set_keymap("n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
buf_set_keymap("n", "gd", "<cmd>Telescope lsp_definitions<CR>", opts)
buf_set_keymap("n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
buf_set_keymap("n", "gi", "<cmd>Telescope lsp_implementations<CR>", opts)
buf_set_keymap("n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
buf_set_keymap("n", "<leader>D", "<cmd>Telescope lsp_type_definitions<CR>", opts)
buf_set_keymap("n", "<leader>rn", "<cmd>lua vim.lsp.buf.rename()<CR>", opts)
buf_set_keymap("n", "<leader>ca", "<cmd>lua vim.lsp.buf.code_action()<CR>", opts)
buf_set_keymap("n", "gr", "<cmd>Telescope lsp_references<CR>", opts)
if client.resolved_capabilities.document_formatting then
vim.cmd([[
augroup formatting
autocmd! * <buffer>
autocmd BufWritePre <buffer> lua vim.lsp.buf.formatting_seq_sync()
augroup END
]])
end
end
-- Setup lspconfig.
local capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities())
-- Replace <YOUR_LSP_SERVER> with each lsp server you've enabled.
require('lspconfig')['gopls'].setup {
capabilities = capabilities,
on_attach = on_attach
}
require('lspconfig')['pyright'].setup {
capabilities = capabilities,
on_attach = on_attach
}
У конфигурации на Lua есть один большой минус: если в коде ошибка, то NeoVim может не открыться. Я редактирую код конфигурации в одном NeoVim. Потом открываю второй в другой сессии и проверяю в нём, что всё работает корректно. Если NeoVim не запускается, у меня остаётся рабочая версия без изменений в конфигурации — в ней исправляю ошибки. Иначе придётся зайти через другой редактор, чтобы откатить изменения.
Свою конфигурацию NeoVim я написал сам, но использовал полезные фишки из дотфайлов разработчиков на GitHub:
Если не хотите заниматься настройкой и разбираться с Lua, используйте одну из готовых сборок. Из наиболее распространённых выделю:
AstroVim
SpaceVim
LunarVim
NvChad
В готовых конфигурациях уже есть всё необходимое, чтобы пользоваться NeoVim как обычной IDE. Но по-настоящему вы ощутите гибкость этого редактора, когда настроите его и подберёте плагины самостоятельно.
LSP: протокол языкового сервера
Первое, что нужно сделать при настройке NeoVim, — установить языковой сервер, который поддерживает Language server protocol (LSP). Это протокол, который позволяет удобно работать с кодом, независимо от вашего языка программирования. Почитайте на сайте langserver.org, как он работает, и посмотрите список доступных языков.
Для NeoVim есть плагины, которые позволяют интегрировать работу с языковым сервером. Это поможет видеть в коде:
список ошибок — например, некорректные названия переменных;
предупреждения о коде, который никогда не сработает;
действия с кодом — предложение импортировать пакеты, которых не хватает для корректной работы.
Ещё есть навигация по коду, поддержка автокомплита и другие функции. Я не нашёл того, чего не хватало бы по сравнению с другими IDE. Кстати, в VS Code используется тот же LSP для интеграции с вашим языковым сервером.
Плагины: превращаем редактор кода в полноценную IDE
Установить плагины можно через несколько разных менеджеров, я пользуюсь VimPlug. Он минималистичный и довольно простой, хотя и требует вручную описать все плагины, которые нужно добавить в сборку NeoVim. Зато настройка плагинов получается более гибкой: можно указать конкретные версии или выполнить дополнительные команды, например make. Вот пример как выглядит мой набор плагинов:
call plug#begin()
" Language
Plug 'neovim/nvim-lspconfig'
Plug 'hrsh7th/cmp-nvim-lsp'
Plug 'hrsh7th/cmp-buffer'
Plug 'hrsh7th/cmp-path'
Plug 'hrsh7th/cmp-cmdline'
Plug 'hrsh7th/nvim-cmp'
Plug 'j-hui/fidget.nvim'
Plug 'L3MON4D3/LuaSnip'
Plug 'saadparwaiz1/cmp_luasnip'
Plug 'rafamadriz/friendly-snippets'
Plug 'ray-x/lsp_signature.nvim'
" Debug and test
Plug 'mfussenegger/nvim-dap'
Plug 'leoluz/nvim-dap-go'
Plug 'rcarriga/nvim-dap-ui'
Plug 'nvim-neotest/neotest'
Plug 'nvim-neotest/neotest-go'
" Base
Plug 'folke/todo-comments.nvim'
Plug 'akinsho/toggleterm.nvim'
Plug 'antoinemadec/FixCursorHold.nvim'
" View
Plug 'nvim-lualine/lualine.nvim'
Plug 'kyazdani42/nvim-web-devicons'
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
Plug 'lukas-reineke/indent-blankline.nvim'
Plug 'Mofiqul/vscode.nvim'
" Navigation
Plug 'kyazdani42/nvim-tree.lua'
Plug 'nvim-lua/plenary.nvim'
Plug 'nvim-telescope/telescope.nvim'
Plug 'nvim-telescope/telescope-fzf-native.nvim', {'do': 'make'}
Plug 'karb94/neoscroll.nvim'
Plug 'akinsho/bufferline.nvim'
Plug 'preservim/tagbar'
" Git
Plug 'ThePrimeagen/git-worktree.nvim'
Plug 'TimUntersberger/neogit'
Plug 'lewis6991/gitsigns.nvim'
" Edit
Plug 'tpope/vim-surround'
Plug 'windwp/nvim-autopairs'
Plug 'numToStr/Comment.nvim'
" Misc
Plug 'renerocksai/telekasten.nvim'
call plug#end()
Когда список готов, нужно вызвать команду :PlugInstall
— она устанавливает или обновляет плагины.
В Сети есть подборки, в которых собраны десятки тысяч плагинов на любой вкус и задачи, например эти три:
Среди всего множества есть плагины, которые я рекомендую установить всем, кто только начинает использовать NeoVim.
Автокомплит. Функция есть в нескольких плагинах — выбирайте, какой понравится: Nvim-cmp, coc.nvim, YouCompleteMe. Они различаются технологиями, реализацией и UI, но работают примерно одинаково.
VimGo. Самый популярный на GitHub плагин для Go. Решает характерные задачи: установка, запуск тестов, дебаггеров, добавление импорта, запуск линтера. Я его не использую — сам накрутил все нужные мне возможности по отдельности. Но это потребовало больше времени.
Vim-test. Плагин, который запускает тест под курсором или весь файл, поддерживает добавление аргументов после go test.
Nvim-tree. Плагин для навигации, в котором есть всё необходимое: поиск, копирование, вставка, предпросмотр, возможность конфигурировать эти и другие функции.
Telescope. Инструмент для работы со списками файлов — я не нашёл ему аналогов ни в одной IDE. Поддерживает сортировки, гибкий поиск внутри файла (live grep, rip grep), fuzzy-поиск и предпросмотр. В официальном вики плагина больше 60 расширений к нему.
Сниппеты. Есть много вариантов плагинов, которые добавляют привычные подсказки при наборе кода. Самые известные — luasnip, vi msnippets, friendly snippets.
Bufferline. Для тех, кто не проникся идеей буферов и табов, есть плагин, который превращает их в простые вкладки. С ним можно сортировать, перемещать и группировать вкладки. Ещё просматривать число ошибок и предупреждений в каждой из них.
Git. Я нашёл для себя удобные варианты для разных задач:
gitsigns показывает исправленные строки и blame изменений. Через вызов горячих клавиш можно посмотреть, что конкретно поменяли в коде.
diffview — плагин для сравнения версий кода. Умеет открывать диффы для разного числа коммитов через ссылки, хеши и названия веток. Чтобы не вбивать их вручную, придётся дорабатывать и настраивать под себя команды.
Плагины выше делают NeoVim похожим на VS Code. Но есть такие, которые добавляют новую функциональность — я не встречал её ни в одной IDE. Ниже пример работы плагина surround, который быстрыми сочетаниями клавиш обрамляет одно слово или сочетание под курсором в другие символы или набор символов:
Было |
"Hello world!" |
{ Hello } world! |
Hello world! [Hello] |
Стало |
'Hello world!' |
({ Hello } world!) |
world! |
Сочетание |
cs"' |
yss) |
ysiw |
Почему я пользуюсь NeoVim и кому ещё он подойдёт
Для меня важное преимущество NeoVim перед другими IDE и редакторами — возможность запрограммировать на Lua любой плагин под свои узкие задачи. Например, я написал плагин для Curl, чтобы собирать и выполнять HTTP запросы из NeoVim не выходя из редактора. Храню в каждом проекте файл с самыми частыми запросами, а сам файл в глобальном gitignore.
local utils = require("selfext.utils")
function execCurl()
local command = utils.getCurrentParagraph()
local Terminal = require('toggleterm.terminal').Terminal
local run = Terminal:new({
cmd = command,
hidden = true,
direction = "float",
close_on_exit = false,
on_open = function(term)
vim.api.nvim_buf_set_keymap(term.bufnr, "t", "q", "<cmd>close<CR>", {noremap = true, silent = true})
end,
})
run:toggle()
end
utils.keymap("n", "<S-e>", "<cmd>lua execCurl()<CR>")
Плагин работает просто:
берёт строку под курсором;
в цикле ищет первую после курсора пустую строку;
создаёт буфер из n строк от той, где стоит курсор, до пустой;
копирует буфер в терминал с командой на выполнение.
При этом не нужно совершать лишних движений — я сразу получаю в терминале результат работы кода, не использую Postman или подобные решения и мне не нужно перекладывать руку на мышь. Дальше с выводом терминала можно работать как с обычным буфером: искать, копировать или грепать.
Я советую разобраться в языке Lua всем: он довольно простой, учится быстро, при этом применяется во многих других продуктах, кроме NeoVim. Например, на нём можно расширять возможности nginx.
Советую попробовать NeoVim, если:
вам не хватает возможностей IDE;
вы хотите больше работать без мыши;
готовы конфигурировать редактор под себя;
вам требуется больше интеграции с консольными инструментами.
Не стоит пробовать NeoVim, если:
у вас нет навыка десятипальцевой печати;
вы предпочитаете, чтобы всё работало «из коробки»;
вам достаточно функций текущей IDE;
вы хотите работать только в графическом интерфейсе.
Комментарии (27)
khe404
19.08.2022 17:48i
Вим просто создан для разработки.
Начиная с возможности мгновенно перемещаться в рамках всего текста и даже всех текстов и заканчивая поиском, заменой, выделением, использованием внешних программ для обработки, авто-дополнением текста, настройкой практически всего что можно настроить вплоть до исполнения сохраняемого текста.
Единственный, на мой взгляд, недостаток это hjkl навигация. Ну прям не могу я к ней адаптироваться. (хотя и без этого вполне норм работает)
Однако, нужно хорошо уметь настраивать эту среду, для того чтобы она стала действительно удобной.
Отдельно хочется отметить пользу команды :vimtutor которая позволяет быстро освоить азы.
Cпасибо вам за то что делитесь опытом и рассказываете про VIM.
~ESC~ESC~:wq
antgubarev Автор
21.08.2022 10:16Единственный, на мой взгляд, недостаток это hjkl навигация. Ну прям не могу я к ней адаптироваться. (хотя и без этого вполне норм работает)
мне вначале это тоже показалось неудобным. Однако спустя некторые время я с неохотой пользуюсь стрелками в других программах где нет vim-mode) Но наверное индивидуально это)
codingjerk
21.08.2022 10:16+2Поддерживаю, насчёт hjkl, для меня это не сработало, несмотря на много лет попыток пересесть со стрелок (после Sublime).
Зато (вероятно из-за детства в шутерах) стало нереально удобно, когда я перебиндил навигацию на wasd, настолько, что даже во всяких vimium'ах, tmux'ах и прочем добре я потом сделал также.
Из недостатков — теряется часть дефолтных хоткеев и их тоже нужно перебиндить, но ИМХО, того стоит.
Alexey2005
19.08.2022 18:42+5Пока вам из всех инструментов IDE нужны только возможности текстового редактора, vim'а вполне хватает. Но вот как только вам потребуется, к примеру, сделать рефакторинг, даже самый простейший (банально переименовать метод одного из классов по всему проекту), вот тут окажется, что IDE всё-таки нужна.
google_fan
20.08.2022 01:46+4Рефакторинг ( так же как и автокомплит, форматирование, и многое другое) предоставляется не самим nvim , а LSP сервером. Если nvim и , скажем, vscode используют одинаковый LSP сервер, они представляют идентичные возможности рефакторинга. Скажем nvim с RA в качествеLSP сервера позволяет вам "банально переименовать метод одного из классов по всему проекту". (С учётом того, конечно, что в расте вместо классов структуры)
3apa3ka3
21.08.2022 10:17+1для neovim достаточно хорошо работает lsp протокол
вот тут https://github.com/neovim/nvim-lspconfig#Automatically-launching-language-servers
можно найти vim.lsp.buf.rename
antgubarev Автор
21.08.2022 10:19Все возможности рефакторинга в Vim представлены точно также как в популярных IDE. Даже больше скажу. Под капотом например тот же самый VSCode использует для этих целей тот же самый инструмент - LSP
VMarkelov
21.08.2022 01:04+2Ожидал, что будет именно про NeoVim, точнее чем он отличается от Vim. А тут в кучу и про Vim и про NeoVim, по ходу, всё свалено, добавляя непонимания. Меж ними-то разница явно есть. Пример: "SpaceVim is a distribution of the Vim editor", то есть SpaceVim - это именно Vim, и к NeoVim(который в заголовке) отношения не имеет. Начиная с Vim 9.x разница меж редакторами ещё больше увеличивается, ибо как я понял, в планах автором NeoVim нет поддержки нового скрипта VimL 9. То есть, плагины авторов на VimL9 в NeoVim не заработают, о чём хорошо бы знать пользователям NeoVim.
Так что, вы либо уточните, что пост про оба редактора Vim и NeoVim, либо уж следите, чтобы информация была релевантной заголовку.
antgubarev Автор
21.08.2022 10:24+1В самом начале статьи я как раз упомянул о том что есть еще Vim и что NeoVim это ответвление. Насчет плагинов старых, которые могут отвалиться. Я для себя использую все меньше плагинов на VimScript так как под NeoVim появляются более удобные альтернативы. Пока еще не все можно заменить, но если вдруг поддержка и исчезнет, то это точно не станет критичным.
VMarkelov
21.08.2022 22:46Извините, при чтении тот абзац как-то пропустил. В любом случае, от статьи с таким заголовком, лично я ждал именно объяснения почему именно NeoVim. А в итоге потратил время на пролистывание описания базовых возможностей редактора (применимо и к Vim, и к NeoVim, и, подозреваю, даже к плагинам, что включают Vim-режим в других редаторах типа VSCode).
antgubarev Автор
22.08.2022 11:43Вы видимо очень невнимательно пролистывали) Базовые возможности редактора это только редактирование, я же рассказал в том числе и про плагины. Кстати Telescope это только для NeoVim. Также как и Nvim-tree, gitsign, diffview. А также примеры конфигурации на Lua. А если бы вы еще доклад посмотрели, по которому написана эта статья, то там еще больше информации о разнице между vim и nvim)
Starl1ght
21.08.2022 19:44-1Долгое время я пользовался IDE от JetBrains, затем пересел на VS Code. Последние несколько лет работаю с кодом только в NeoVim
Ждем дальнейшего перехода на виндовый блокнот, а потом и на ручное набивание перфокарт
deitry
21.08.2022 20:00+1Вот зря вы так, у них у всех есть свои преимущества и недостатки. Я сейчас на довольно большом проекте успешно использую и Rider, и VS Code, потому что VS Code фигово справляется с поддержкой больших MSBuild-солюшенов со смесью C#/C++ проектов, а Райдер фигово справляется с задачами, когда нужно быстренько поискать что-то по всему репозиторию (особенно когда вне активного солюшена) и посмотреть историю отдельных файлов.
powerman
21.08.2022 21:37+3Единственный реальный недостаток Vim по сравнению с IDE - необходимость его настраивать под себя, и довольно долго. (Нет, взять чужой конфиг не работает - точнее, это отлично работает как начальная точка, но рано или поздно всё-равно приходится донастраивать под себя.) Но, с моей точки зрения, для разработчиков - это правильное и продуктивное вложение времени, потому что мы в этом редакторе проведём очень много лет, и разные мелкие удобства успеют окупить время на их настройку. Да и просто прикольно это - программистам программировать собственный текстовый редактор. :)
В остальном - полезные фичи IDE без особых проблем реализуются (как правило - не лично вами, готовых плагинов просто море) в Vim, причём в гораздо более гибком/настраиваемом виде, что даёт возможность не просто использовать их "как в IDE", а делать это более удобным лично для себя способом… а вот гибкости Vim ни в какой IDE никогда не будет. А гибкость Vim довольно важна, потому что нам нередко нужно работать не только с теми типами файлов и не только теми способами, которые поддерживает конкретная IDE (просто интересно, все IDE уже научились открывать файлы размером в гигабайт с каким-нибудь дампом SQL или логом и эффективно с ним работать?). Так что "умея в Vim" мы получаем заметный бонус в виде возможности одинаково работать с любыми текстовыми файлами.
Что до hjkl или стрелочек и прочих хитрых последовательностей команд - каждый осваивает это в том объёме, в котором ему комфортно. Я вот лично пользуюсь стрелочками (а ещё Shift+стрелочками и Ctrl+стрелочками!), и совершенно не стесняюсь этого. При этом я написал несколько плагинов к vim, выложил собственный довольно навороченный и прокомментированный конфиг vim на гитхаб, и пользуюсь морем других продвинутых команд и возможностей vim уже примерно лет 15-20.
Ещё один интересный момент: кто может похвастаться тем, что за 20 лет не разу не менял любимую IDE и не был вынужден тратить время на привыкание к новым IDE/версиям/фичам? А Vim спустя 20 лет почти не изменился, сформированные 20 лет назад привычки всё ещё работают, и ещё долго будут работать.
antgubarev Автор
21.08.2022 21:45Спасибо что делитесь конфигами. Благодаря таким людям как вы я нашел для себя много интересных возможностей.
artemisia_borealis
22.08.2022 12:47+1Допустим, нужно найти все foo в коде и заменить их на bar. При этом перед каждой заменой спрашивать подтверждение. Команда для этого:
Немного поправлю. Такая замена с использованием просто s сделает замену только в текущей строчке. Для замены во всём файле (без подтверждения) нужно использовать %::s/foo/bar/gc
:%s/foo/bar/g
Также очень интересна особенность использования этой команды без g:
Здесь для строчек с 4 по 27 делается замена только первого вхождения в каждой строчке. Порой, это крайне полезно.:4,27s/foo/bar/
Далее, для плавного вхождения в Vim режимы, можно использовать плагины для «больших» IDE сред. В частности сам постоянно использую плагины VsVim для Visual Studio и IdeaVim для PyChаrm. Для меня было бы больно использовать редакторы без таких режимов, но к счастью этой проблемы давно не существует.
А вообще статься очень познавательная, может быть, стоит ввергнуться и в NeoVim. На первый взгляд усилий стоит.antgubarev Автор
22.08.2022 13:21Я пробовал использовать vimmode в больших IDE, но мне не зашло. Там этот режим дает преимущества только при редактировании текста, а если надо в normal mode например запустить тест под курсором или curl запрос отправить в терминал, то вот тут уже преимуществ нет. Поэтому для меня vimmode не стал заменой вима.
aelaa
так а какие возможности IDE (не редактора, а именно среды) покрываются то? Притом что NVim сам не IDE, а редактор.
Я сам вимер со стажем, но делать из него IDE полноценно никогда не приходилось, да и незачем
antgubarev Автор
навигация по коду (я имею ввиду методы, имплементации интерфейсов и т.д.), автокомплит, поиск по проекту и тд что я описывал в тексте. А что вы имеете ввиду под "полноценно"?
aelaa
А в каком IDE Вы не нашли автокомплит и навигацию?
Про полноценно, например git руками в соседней вкладке терминала. Из vim максимум git blame удобно делать, остальное как-то не попадалось или никак не ускоряло процесс
antgubarev Автор
Git в соседней вкладке https://github.com/TimUntersberger/neogit Я использую этот плагин. Можно еще вызывать https://github.com/jesseduffield/lazygit в окне терминала как это делаю я https://github.com/antgubarev/dotfiles/blob/master/nvim/lua/user/git.lua#L75
Жаль что вы доклад не посмотрели перед тем как комментировать, где я про это тоже упоминал. Также как и про то, что в сравнении с IDEA возможностей по удобству работы с git меньше.
Но для меня ценно именно возможность выбирать инструменты и настраивать как мне больше удобно. Я до этого сидел много лет на JB и сейчас неудобств для себя не испытаваю а скорее наоборот.
Но это все вопрос личных предпочтений) Я не убеждаю никого, а только делюсь собственным опытом)
megasuperlexa
так а что такого трудного в поддержке гита?
Редактирование кода это одно, но мне интереснее как неоВим поможет мне (или хотя бы может заменить) с дебагом своего и декомпиляцией чужого кода (step Into) - именно в этом блистают IDE от того же джетбрейнса.
antgubarev Автор
для дебага на go я использую delve. Тот же самый что используется в VSCode, мне этого хватает. Брейкпоинты, стектрейсы, вотчинг переменных и прочее.
0xd34df00d
Не нашёл автокомплит и навигацию для хаскеля ни в одной IDE (кроме idea + intellij-haskell, но там все очень глючно).
Для идриса и агды тоже ничего не нашёл, кроме разве что подсветки синтаксиса.