NvChad: An attempt to make Neovim TUI as functional as an IDE
github.com
github.com
* visual debugging - cli debugging could simply never come close, not matter how much you love using a keyboard over a mouse
* hyper-powerful refactoring, well beyond what any of these language server plugins currently provide: rename file and have all imports corrected, extract class or function to different file and again have all imports corrected, etc.
* Out of the box using the interpreter or compiler from the docker-compose stack - everyone on the team instantly has an identical development environment
* Attaching the visual debugger to your app running in a docker-compose stack
The list goes on and on.
I would love to feel like the "real developer" trope by using only the terminal tools stitched together by endless config and scripts and whatnot, but the hit to productivity is impossible to justify.
I just want to build software.
Have you had a look at nvim-dap? It's awesome and I have a much better debugging experience than in VSCode/JetBrains (as it's completely keyboard driven). Have a look: https://youtu.be/SIYt1dopfTc
I am a web developer & my current dev setup involves sway window manager(with vim style bindings), intellij (with IdeaVim), ranger file manager (has vim style bindings), firefox with vim vixen, and of course NeoVim (for editing scripts).
They are all disparate tools, and have their quirks around vim emulation, but overall its a good enough coherent experience that I am quite happy with.
qutebrowser is a keyboard-focused browser with a minimal GUI. It’s based on Python and PyQt5 and free software, licensed under the GPL.
It was inspired by other browsers/addons like dwb and Vimperator/Pentadactyl.
And it still lacks the ability to run remote containers a-la VSCode, where you can leverage all dependencies to the container itself.
Edit: also showing variable values while hovering with the mouse. Also, I forgot that Dr Racket can show you the call stack graphically connecting different source lines
Showing the actual file and the ability to visually view the call stack and jump back up it is fantastic.
Setting breakpoints with a click or keystroke while viewing in the file is another important aspect.
Having the breakpoints available between runs without adding them to a text file... the list just goes on and on with little quality of life aspects.
Again... with no setup or configuration
There's a ton of plugins for visual debugging.
Thanks for making such high-quality content.
I feel these really tuned out Vim/NeoVim setups are the modern equivalent of really tuned out Linux setups, as in they are something you can spend a lot of time working on and creating some very hacker like cool setups, but ultimately usability is not so great compared to a more full blown and integrated IDE like VSCode.
And I'm a hardcore VIM -user, dont' get me wrong, but making these configurations where you combine like 10-20 different plugins, it's gonna be a whole incoherent experience with many different thought paradigms colliding easily.
I do love the idea of having something working in Vim as perfectly as in VSCode for example, but the actual experience is not there. Ultimately things like C++ code completion and intellisense require a lot of work and code to get right, and NeoVim/Vim attempts are not there yet, for example I had to give up when the only way to figure out what compilation flags a project uses meant configuring it manually.
But they sure are cool for hacker-type setups and look cool for sure.
I think the important part is building up over years. When I tried to set something like this up all at once when I was young, but difficulty remembering anything made it get in the way. By adding incrementally, I get to understand each piece, and incremental pieces that aren't useful are forgotten.
It certainly changes things as a C++/embedded dev using a custom build system. The Jetbrains ecosystem is not an option.
I settled on https://github.com/LunarVim/LunarVim and then I customize my lv-config.lua with the extra pluggins/settings I want.
I really like 99% of everything with VSCode except, 1) it kills my CPU and 2) the terminal experience is terrible. I spend all day in a shell and I want to move around quickly.
This is done over the course of a "few years". I understand this is not an instant solution like an IDE is, but Vim takes a lot investment in terms of muscle memory or configuration to finally have a setup that "fits you". Once that happens, that's where Vim/Linux/your-shell will "click". You can't fit a mass-consumer IDE to your style, you have to "fit in". That's not the case for these tools.
Not sure if I understand this right, but have you heard of https://github.com/rizsotto/Bear?
It intercepts compilation calls to generate a clang compilation database used by C and C++ LSP implementations. This way you just have to compile the project the normal way, only wrapping the initial call (for example, to `make`) with bear: `bear make`.
Once you have the database, a LSP server like ccls should work out of the box with the project.
Maybe if I had the time to figure out this Bear thing I would, but seriously VSCode already with vim -bindings works out of the box so why bother :)
For me, VS Code fails to be productive in a myriad of other ways which I cannot enumerate now because I always forget them, and vim is the productive powerhouse I know inside out, where everything makes sense.
So due to this I had the will to investigate and make this work the first time, which was painful back in the day, but now it feels rather out-of-the-box and automatic, especially since nvim 0.5.0 was released.
I still sometimes fire up VS Code when I get frustrated with something, but I always find something else broken there and go back to nvim.
One thing I'm eyeing though is Onivim 2, though it's not ready yet.
LunarVim https://github.com/lunarvim/lunarvim
I especially love the community aspect of it. Chris' youtubecasts routinely draw 20+ people. Lot of genuine excitement about tools.
I understand neovim (or any other tool) requiring personal setup/configuration is not for everyone. And that is totally okay (see vscode, jetbrain etc). There are several alternatives and something for everyone out there.
One thing I appreciate about lunarvim (in its latest iteration) is that it keeps all its settings sequestered from the neovim settings, launchable as 'lvim.' If I want a simpler editing experience with all the bells and whistles, I can still just use 'nvim'
You should adapt Vim to your needs, not yourself to other people's needs.
That being said, these types of projects are nice to get inspired to change your Vim config.
No it doesn't. Vim itself is just a set of someone else's configurations. The important thing is that someone else's configurations can eventually become your configurations, but there's absolutely no reason to "start from scratch" unless you're particularly idiosyncratic.
Good artists copy, great artists steal. Bad artists do neither.
Starting from a clean setup means I know exactly what every part of my configuration does. I can still use a default Vim setup on a server because I started from that and added every change myself step by step as I learned new things about the editor.
> Good artists copy, great artists steal. Bad artists do neither.
The "stealing" part of that phrase, in its original meaning, implies deep understanding of what's being acquired. So, basically an extension of what I was just describing. Also I'd call Vim more a tool than art.
>Starting from a clean setup means I know exactly what every part of my configuration does. I can still use a default Vim setup on a server because I started from that and added every change myself step by step as I learned new things about the editor.
Again, vim itself constitutes a complex, customized setup of someone else that you have to figure out. There's obviously a scale here -- you've just picked a point on that scale and declared it the correct place to be (write your own vim clone, and you'll really know what every part does). And really, if you want your knowledge to be truly portable, you probably shouldn't be modifying vim whatsoever (or perhaps specifically, none of the defaults), because you'll deviate from a default Vim setup on arbitrary servers (change jk to <ESC> and you'll burn the wrong thing into your muscle memory, and perhaps even forget ESC...).
But the value of customizing vim is... to customize it! To adapt it to your workflows and fashion. Treat default/server vim as some unique, pure instance of vim, perhaps even as a separate editor altogether, and treat your own vim.. as your own! And then it doesn't really matter. And regardless, unless your vim package is doing some dramatic changes to vim's fundamental model and design, it's rather trivial to know both -- so trivial I'd consider it an overblown non-concern.
The bigger concern with these packages (and where I think the "start from scratch" mentality generally derives from) is that vim's extension model is rather fragile, and pretty much lacks any useful debugging tool, so when it comes time to debugging why your copy is so slow in certain scenarios, there's really not much you can do except read and reason about the config file(s) thoroughly, which of course is much harder if you didn't write it.
>The "stealing" part of that phrase, in its original meaning, implies deep understanding of what's being acquired.
I've always interpreted it as taking ownership over the concept -- you copy it, and then infuse your own mutations into it to produce something uniquely qualified for the constraints and context you're plugging it into. A deep understanding is a nice to have (to better mutate it more effectively, and correctly), but not necessary for usage of the concept/tool (in the fashion that, for vim, I must understand the "vim mindset", but I don't need to know vim internals to be successful, or to have succesfully stolen it for my own machinations). Understanding is not the key here, it's ownership.
Another way to view it is like christopher alexander's pattern theory -- the base patterns are communally known and shared, and can be plugged in freely to the design. However, to be made beautiful, the pattern must be modified to fit within the constraints of its environments... including the other patterns in use (as well as any unique constraints for the situation, e.g. the home owners requirements, geographic requirements, etc). Those modifications impact the others, which then impact the object under question, in a kind of feedback loop until you reach an equilibrium.
That is, patterns (usage of libraries, packages, frameworks, etc) are not at all a problem. The mistake would be to stop there, and not further adapt it as needed. Or rather, to misunderstand the pattern as the final design. Another example from a programmatic perspective, to take a pattern like OOP FACTORY and construe the design as somehow "pure" and refuse to modify it despite your requirement really being "a bit like a factory, and a bit like a singleton" or what have you.
That said, Telescope.nvim is a powerhouse of awesome. This guy did the right thing by making that the centerpiece of his config.
If I want an IDE, I'll continue doing what I do: tmux, with vim in one or more panes, bash in one or more panes.
Remote view loose all the opened tabs very often.
Once, I suspected a bug in the logger due to truncated traces but it was VScode which truncated the line (nedit a very old editor didn't have this issue).
Also I had regularly to ask my colleague to stop it's VScode because it was using >30GB of RAM, fortunately this doesn't happen anymore either VScode or its plugin is fixed or she has given up configuring as an IDE I don't know.
And no CLion isn't better C++ IDEs sucks..
That being said, if this is intended to be widely adopted/viewed like Spacemacs, the marketing and presentation need a bit of work. Between the 'Chad' signifier and the screenshots sharing a color scheme with a tricked-out desktop and other terminal tabs, it's hard to tell if this is a serious standalone project or, to be frank, someone just showing off.
What do you mean by this?
1. I started using Spacemacs which got me into using Emacs(mainly for org mode in the beginning). I'm not capable of building an emacs config from scratch(nor do I care).
2. In Vim though I already have my vim config and have been customizing it. When I try to use these neovim distributions, they're very far off how I configured my vim and I have no idea how to reconcile these two things.
I feel like once you are capable enough to configure it on your own, you won't really be happy with these things, but neovim is also almost like the ever changing javascript ecosystem. There are new completion engines coming out every day, new file trees, etc. etc. I don't feel like changing to the next best lsp engine every 6 months.
Also, spacemacs seems to have a better hook mechanism when it comes to configuring the default configuration.
I don't need an IDE; I just want a good editor that I can use over an SSH connection. GUIs are groovy when you have one; but sometimes you are constrained to working without one.
Random remark: lots of Dutch words contain "jk", so insert-remapping that to <ESC> can be quite confusing to some people.
>ugly graphical at that
>Javascript extensions
>no Lua extensions
That is all around a terrible idea, made even worse by the fact that it's proprietary software.
It's not something inherent to vim emulation though, the Jetbrains or Visual Studio plugins were good, so it's possible this is now fixed.
So, like a vegan burger.
This is not CLI, right? This is TUI.
Reading the headline I thought this was about using nvim as a command line tool as opposed to an interactive editor (e.g. as a sed replacement).
CLI (Command Line Interface) means to me means the options / arguments / flags of calling a single command.
This is about a specific nvim configuration (or set of plugins) to make nvim a powerful TUI (terminal user interface) IDE
how do you debug your native program?