I have been coding for a few years now, and in that time, I have done nothing but remove complexity from my coding setup and I feel like I've reached a point where I'm happy with it. My favourite editor is ed, but I can't really use it much[^1], therefore, I've settled on Neovim[^2]. I like the keyboard centric editing it offers, and it's actually really fun to use once you've mastered the Vim language. Neovim is a very capable editor, offering all you could imagine from "modern" IDEs (LSP, Autocomplete, Fuzzy finding, Plugins, Diagnostics,...), but I try to stray away from all these, keeping a very minimal approach to code editing.
The number one thing I don't have is a colorscheme. My code is black on white with a tiny bit of grey for comments, you might be thinking that this makes it hard to parse code and find what you want, but that's exactly the point. Since my eyes have few visual cues to grab onto, I've been forced to read the code to know what is happening, and that has in turned made me so much better at understanding and reading other people's code quickly. It also feels (To me at least) like my eyes are less strained after a day of working in black and white.
Another thing I don't use is autocomplete, I'm talking about two things here, the box that appears with suggestions but also the in text autocomplete a tool like copilot would give you. I've found that by removing these helpers, I actually had to learn the language I was writing my code in. Learn the order of arguments, the names of functions you only use ever so often, the names of the variables scattered throughout a project, and even namespaces[^3] of the packages installed on the project. Having the completion popup appear all the time was taking me out of my focus to read whatever it had to say and then validate it. Now I just write, without stopping, without breaking the flow. And it is often faster to do it this way rather than parse a list in a popup and select the right one.
I've also more recently stopped using LSPs. This one was a hard choice, because LSPs provide 3 features that I heavily relied on: renaming, go to definition and file outlines. My solution to get rid of those is that I've started using grep or simply, my file finder. For sure it takes more time looking through a package's files to find out where a function is defined, but using ripgrep often makes it much quicker[^4] and I've found that searching manually through code allows you to learn the structure of the packages and over time, you get much better at using them. Another side effect of disabling LSP, is that I don't get squiggly lines when I make a mistake anymore. At first I thought it was gonna be a mess, that I would make so many typos or forget semi-colons and search for them for hours. But my brain quickly adapted, I started making less typos, and always keeping my eye on the back of my cursor to make sure I caught myself writing shit right away. I started double checking my code a lot more, to make sure there was no mistake, which often result in me finding ways to improve the code despite it being correct in the first place. You also become much quicker at finding the typos, your brain knows what common errors you make and searches for these in priority. And finally for the odd times where you can't find it, your language probabbly has some sort of linter you can run on the file that will tell you the problem.
So the only thing I've really kept aside from the ability to write text is a fuzzy finder that can search both file names and file contents[^5]. This is one of the most powerful features of my workflow, because since I don't have LSP to go to definition or other things like that, I use my fuzzy finder to navigate pretty much everywhere. But lately, I've slowly started to replace the fuzzy finding with actual ripgrep and fzf in the terminal. When I do that, I also often use bat to preview the files and only jump in nvim when I know exactly what I'm going to modify. Another thing I use is Oil.nvim, it's a file explorer that works like a buffer, meaning you can edit the contents of directories, the names of files etc like if you were writing code. I don't have much to say about this, I just like it and have found it works better than NETRW[^6] for moving files around.
Outside of my editor, I use tmux, a terminal multiplexer which allows me to create many sessions for all the different projects. The terminal I use is Ghostty, it is fast, looks good and that's all I really need from a terminal. For git stuff, I'm a big fan of GitHub Desktop, because it's GitHub integrations are on point and it simplifies many hard to remember git commands. My browser of choice is Zen but as I discussed in my blog post about browsers, I'm never really sold or satisfied with the browser I use.
That's it for my coding setup, it might[^7] change in the future, at which point I can write an updated blog post. But for now, I think that this pretty bare bones setup is good for me. It forces me to actually learn the programming languages I use and understand the codebases I work on, the more I code and the more I get a feeling for how code should be written, how to refactor better,... . If I had one change to really recommend from all the above, it would be to disable your autocomplete. I know that in today's coding landscape this is a weird advice with tools like Claude Code or Cursor where AI writes the code for us, but I swear that you will see improvements in your understanding of the code in very little time.
If you have questions, or want to share your coding setup, please feel free to send me an email, I would be please to read what you have to say ^^.
- [^1] — More about it on my
.txt
only page. - [^2] — A modern version of vim, scripted in lua and with a really active community.
- [^3] — Talking about PHP here, a namespace is this for example
Theoo\App\Components
. It allows your code to differenciate between two classes with the same name but under different namespaces. - [^4] —
--no-ignore-vcs
my beloved ❤️ - [^5] — I'm using Telescope.
- [^6] — Vim's default file explorer.
- [^7] — Will for sure