DEV Community

Cover image for Uninstall all neovim plugins
Mahmoud Ashraf
Mahmoud Ashraf

Posted on • Originally published at mahmoudashraf.dev

Uninstall all neovim plugins

Uninstall all neovim plugins

As a developer, you need a robust environment that fits your needs to develop,
compile, debug, build, and so on. So, you have now two pills to choose one of
them. And most probably if you read this article you have already chosen the
red one. But unfortunately, Neovim plugins does not give you the full control of
the experience.

Why vim/neovim and not vscode/intellij?

I choose vim/neovim because I need a "just" code editor, and also it can be
easily leverage my tools capabilities on UNIX way, and you can read more on
this article Unix as an IDE,
but the all-in-solutions, like an IDE, is not the right tool for code editing,
it came with a lot of features and defaults that you in most cases I don't need
it, or I have to learn how to use them according to that IDE.

So, Why neovim not vim?

I used to use vim before, but I need an editor that more focused natively on
"code", Not just a plain text, So neovim is a good choice for developers to
enhance the coding experience by using lsp, and treesitter.

immature plugin ecosystem

To be honest, one of the problems on the neovim community is nonsense plugins
that just a replicate vim plugins or plugins that do what we should do in the
terminals but using lua as plugin on neovim. Also, It used at the beginning to be
missing the help documentation but now I believe it gets better, so it is nice.

Also, what they called "neovim distributions" which another layer of complexity
that tight your use by using the author setting file.

How to escape, and use neovim on unix way

What I've done is first delete all my plugins, and start with a clean
init.lua file with simple configuration, and gradually see what I'm really
miss and add it into my config.

If the feature that I need can be easily implemented with neovim config only
I'll go to this direction, but if not I'll search for small and well-written and
well-documented plugin and also if it has a lot of features, I'll go first to
copy-paste code into my neovim config and start tweaking it.

Examples time

- search/browse files:

for the codebase navigation I'll use the vim find, buffers commands but
instead of using vim.opt.path:append "*" which leads to hang the command on
projects that's have for example node_module I will use the local .nvimrc on
each project to extend my config

-- Load .nvimrc manually
local local_vimrc = vim.fn.getcwd() .. '/.nvimrc.lua'
if vim.loop.fs_stat(local_vimrc) then
  local source = vim.secure.read(local_vimrc)
  if not source then
    return
  end
  vim.cmd(string.format('so %s', local_vimrc))
end
Enter fullscreen mode Exit fullscreen mode

so on the project root directory I can create a new file .nvimrc.lua and add
this line e.g:

vim.opt.path:append({ "src/**", })
-- and any config that I need for this project
Enter fullscreen mode Exit fullscreen mode

And for search on the files there is a vim grep command with some modification
that makes it work more performant by using ripgrep

-- better grip with 'rg'
if vim.fn.executable 'rg' == 1 then
  o.grepprg = [[rg --hidden --smart-case --vimgrep]]
  o.grepformat = { '%f:%l:%c:%m' }
end
Enter fullscreen mode Exit fullscreen mode

and the nice about grep that the result now on your quickfix, so you can easily
navigate between them, and do any operation that you want.

a screenshot of neovim with quickfix opend

And here is my mapping, it may be useful, and here is the utils used in the
snippets below:

-- navigation & find & search
G.nnoremap('<leader>p', ':find<space>', { silent = false })
G.nnoremap('<leader>rg', ':silent grep ""<left>', { silent = false })
G.nnoremap('<leader>gw', ':silent grep <C-R>=expand("<cword>")<CR><CR>')
-- buffers
G.nnoremap('<leader>bn', ':bn<cr>')
G.nnoremap('<leader>bp', ':bp<cr>')
G.nnoremap('<leader>bl', ':ls t<cr>:b<space>', { silent = false })
G.nnoremap('<leader>bd', ':bd!<cr>')
-- quick list
G.nnoremap('<leader>qn', ':cn<cr>')
G.nnoremap('<leader>qp', ':cp<cr>')
G.nnoremap('<leader>ql', G.toggle_qf, { nowait = false })
G.nnoremap('<leader>qq', ':cex []<cr>')
Enter fullscreen mode Exit fullscreen mode

- code completion

I'm kinda person that doesn't like a destruction while typing, so fuzzy
finder, and auto pop-up menus not a good solution for me. I prefer to go also
with the native ins-compilation and use completion menu on demand by a specific
category.

- statusline/winbar

For this one I need it very simple so I write it by myself after I submit this
post
on /r/neovim sub-reddit and get a lot of inspiration.

- Git

Why should I integrate git inside neovim! I use git on my terminal inside tmux
session using some helpful commands that fits on my workflow. and that is on of
them:

# `-p` will open interactive mode to add/reset based on the hunks
git add -p
git reset -p
Enter fullscreen mode Exit fullscreen mode

a screenshot of  raw `git add -p` endraw  command

- Neovim goodies (lsp/treesitter)

This is the part that I'm really have to use official plugins so let's install
packer... Or wait a minute, why not just use the native solution.

there is a vim packages is a
directory you can download your plugins inside it and just it nothing more to
do.

cd ~/.local/share/nvim
git init .
git submodule init
mkdir site/pack/plugins/opt/
git submodule add --depth 1 https://github.com/neovim/nvim-lspconfig site/pack/plugins/opt/nvim-lspconfig
Enter fullscreen mode Exit fullscreen mode

and I wrote a wrapper on lua to make the process easy and similar to the
package managers check it out

- Theming

I just use nvim-base16 plugin to fit
my base16 theme system.

conclusion

After adding all my needs I find out that there was many plugins on my config
that does not help me or not fit on my workflow. e.g: I do not use snippets,
file explorer, fuzzy finders.

Top comments (1)

Collapse
 
pbnj profile image
Peter Benjamin (they/them)

Nice article.

I follow a similar philosophy in my vim workflow.

You might be interested in helix editor. It is a modal editor with modern development features, like LSP, tree-sitter, fuzzy finder, all pre-configured.