Real Programmers by XKCD
Finding the code editor or IDE (from now on I'll be referring to both) that is the best match for you is one of those un...
For further actions, you may consider blocking this person and/or reporting abuse
I would like to mention
coc.vim, which is the closest you can get to VS Code-style language extensions. You can easily get IDE-like language support from most languages this way (that's how I configure my Vim). It works really well.The reason I wanted to learn vim was because I often have a lot of things running and once you start working with large projects in vscode, it hogs a lot a RAM (I don't have a lot). I noticed that coc.vim takes a lot of resources well not the plugin itself but the extensions.
I second the use of Coc. Its the current king of autocompletion
+1 for
coc.vimit's super nice to use daily and works with so many languagesI'm not very happy with YouCompleteMe,that's why I didn't include it in the post. I guess that coc.vim might be a good replacement for YCM.
I was happy with YCM but couldn't make it work with some of the features I needed.
Then I tried coc.vim and haven't come back ever since. It's amazing the setup you can easily make for web development with Angular or React.
Nowadays my main editors are nvim with coc.vim on Linux (running on tmux) and VsCode with Vim plugin when running on Windows.
It's so strange to me that people still choose to disregard the benefits of a full featured IDE. Things like live debugging with minimal configuration, automatic refactoring tools, finding all users or definitions of some class or function, these aren't just nice-to-haves, they make you a better and more productive developer.
Unfortunately, it ceased being strange a long time ago that people choose to disregard the benefits of simplicity, precision, and ubiquity. What are you going to do when you don't have access to an IDE? If you haven't been in that position, the odds are you are either a specialist, work for a completely siloed company in which you write code and throw it over the wall never to be seen again, or you haven't been a developer very long.
Is EC2 part of your development or production cycle? Goodbye IDE. Have to parse through 200M of logs that can only be viewed on a production server? Use docker? Only have ssh access to the server? Development box only has 8G of ram and the project is large enough that you can't start the IDE because you run out of memory?
No, these are not contrived situations. I have experienced every one of them, as stupid as it sounds, that last one was within the past month. And many people I've work with experienced those situations a lot more often than I have. A lot of devops people I know regularly throw the IDE away for weeks at a time because it's just easier to use vim since can be installed everywhere if it isn't already installed by default.
Just to play devil's advocate for a moment regarding the benefits of an IDE:
I have watched many people over pull out hair trying to figure out why a project doesn't compile when it turned out the IDE wasn't configured properly for that project. If you look at the sheer quantity of configurable options under the IntelliJ preferences menu, I understand why many people spend just as many hours playing with their IDE configurations as I do with my vim. Sure, an IDE works great out of the box, until it doesn't. Vim is no different. It, too, works great out of the box, until it doesn't meet your needs.
Setting aside for a moment that you can get live debugging in vim if you want to work for it, I'll instead point out that, for myself, if I've been forced into using a live debugger, I've probably already gone wrong somewhere. Most likely because I've screwed up my testing, it's too complex to write a test, which usually means I've written too much production code without writing a test for it. My goal is to not need to use a debugger, so not having it? That's not a problem, that's me configuring my environment to encourage outcome I desire.
As far as automatic refactoring tools, I'm kind of in the same boat as with needing a debugger. I like having to refactor by hand, it forces me to pay attention to my code quality. Also, most automated refactorings in an IDE are pretty simple. Simple enough that I don't really need an IDE to do them quickly.
Vim gives me the ability to find class/function definitions out of the box in an uncomplicated way. Check out ctags.
Better is a subjective term, my "better" and your "better" may be different.
Like "better", productive can also be a subjective term unless you're going to attach specific metrics to it. If you can do that, I would honestly like to see the metrics you use and why you chose them. There's a reason that even after decades of trying there is still no way for management to accurately measure developer productivity. This has been a holy grail for them since they hired software developers.
Anyway, vim works most of the time for me but that's just my opinion, I could easily be wrong.
Agree with everything except the live debugger which I use all the time when working on Magento extensions. For me iterating with VdebugEval is the quickest way I've found to code that works. Maybe I should try a more test driven development approach?
In fairness, I am unfamiliar with Magento, but if you're referring to the php e-commerce platform, I'd say that there are several things I'd look at in your position. First, I'd say if you're wondering if you're not using enough of a test driven approach, you probably aren't. I can also fairly fairly fanatic about it, more than is probably good for me.
I will start with the most degenerate of tests when I need to write a function, as in, write a test that tells me I return something other than 'null' from the function, and then start refactoring to add more specifics.
Second, I would look at the platform itself. Is it hindering me from writing good clean tests? If it's easier for me to run a debugger than it is to write a test, I'd feel like something was wrong somewhere.
The bottom line is that using a live debugger solves the same problem that REPL's solve, namely, tightening the feedback loop between the moment you write the code and the moment you know if it works. This is great for prototyping but it isn't sustainable for something intended for production. Production code will probably live much longer than you think it will and if you've been relying on anything other than automated tests to prove something behaves as expected, you're doing everyone, yourself included, a disservice.
Having said all that, using TDD is a choice, and as much as some of my colleagues may disagree with me, there are times it isn't appropriate. On the other hand I have come across very few instances outside of prototyping and investigation of production issues where the convenience of using a live debugger outweighed the advantages of writing a test. Also, if I have to use a debugger to solve it, I'm going to write a test to cover that exact situation because clearly it needed a test.
Agree about automated testing, but never thought of it as a substitute for a debugger. I'm sure I've used ipdb to debug new pytest unit tests. I'm bought in on automated testing, used to work in the semiconductor industry where mistakes are very expensive. Still some clients refuse to pay for them. At least so far...
I started to write a long-winded reply to this and realized I was rambling. Specifically, I don't think of a debugger as a substitute for testing, case in point is your comment about using a debugger to find unexpected issues with unit tests. I think debuggers serve a specific and related purpose to tests, which is to shorten the feedback loop used to validate the expected, specific behavior of code.
I do think that the way debuggers are typically used is as a substitute for testing.
I feel you on the semiconductor testing. Many (many) years ago I worked for a company called Pintail Technologies as the test automation guy. They company specialized in using statistical techniques to sample test chips and it was stunning how expensive a process testing chips was at a hardware level and how manufacturers would do anything to drop the cost.
Excelente, gracias hermano. Justo querΓa saber un poco mΓ‘s sobre el uso de browser-sync con neovim, he probado instalar live-server pero no me sirve si estoy trabajando con vue, u otras librerΓas reactivas. Que grata coincidencia seas de .VE
Thanks for this article. I'm using YouCompleteMe without problems for years, but good to know in which direction the Vim community is moving :-)
Btw. you can also execute browser-sync straight direct in your Vim with the help of the
:terminalcommand::terminal ++close browser-sync start --server --files .(assuming that your current working directory is where your index.html lives)
You could also create a custom command for this in your
.vimrc:command Serve terminal ++close browser-sync start --server --files .Now you have to type just
:Serveand you don't have to leave Vim.Probably is how you've configured it, I've been using ALE for a while for React development and it works fine, no complains. There are some good tips in this article vimfromscratch.com/articles/vim-fo...
Using vim is kinda fancy stuff, like a hobby. Which fits lots of simple stuff like simple site or one html page. But it's impossible to work on with some huge project, because it's really hard to keep whole project in your mind and lookup every file for definition of some function.
Anyway, when you will be ready for some serious development you will change your mind. Currently it doesn't make sense to argue with you or try to prove something. You will know it later, when time comes...
In a larger project, if you need to alter every instance of a given function call, "sed" and "awk" are available. If you just need a recursive listing of these instances, use "grep".
Of course, with efficient design this shouldn't come up very often.
As for keeping the scope and structure of a large project in mind, that's a pretty personal thing. If one is familiar with the structure of large projects and it isn't horribly maintained, the process can become quite intuitive. Like learning a new spoken language: there are certain norms that, once understood, make picking up languages a lot simpler.
In either case, why the 'tude dude?
All of the people that so far argue about not using Vim, seems to me that they are not Linux users, everything they think cannot be made with Vim is just a couple of commands away in a terminal.
There's nothing and IDE can do that tmux+Vim won't accomplish more efficiently.
It's possible. I use vim on Magento which has 2 million lines of PHP. It does require some getting used to.
I know Magento. I will not say anything about your comment.
BUT, just as an experiment:
try to use PhpStorm + Magicento plugin for a week, for example.
And then compare your efficient with VIM setup.
Then, please comment here about your observations and effectiveness.
Cheers,
If you miss the features of VsCode on Vim coc.vim is definitely the way to go.
After I set it up and installed some essential plugins (like coc-tsserver, coc-angular) I now can even have error highlights on an Angular template (html) and even go to the definition of a variable that is the .ts file from the template file.
With react I managed to get a similar workflow with coc-tsserver by setting filetype to typescript.tsx (if it's set as typescript only Vim doesn't recognize the html inside typescript or JavaScript).
Good article! I didn't know Browser Sync at all.
If somebody is searching how to configure Vim for PHP, I wrote an article some time ago how to do that.
I describe basically the plugins you might need. You can choose whatever you want, install them and configure them.
Many of them can be used for other languages as well, like the fantastic fzf for fuzzy find everything you want.
It's here: thevaluable.dev/vim-php-ide/.
Hope it helps!
Thanks for the link. What's your take on the current state of Vdebug? It seems like it's gotten a bit buggy over the last couple of years.
I didn't use Vdebug for quite some time, my tests are enough for debugging. Sorry.
Why don't you use vscode then?
I do most of my work on my laptop, after learning how to move inside Vim I find myself being more productive without needing to use a mouse.
Regular expressions substitution and search inside Vim is another feature I use quite often, I know that probably most of the things I do with Vim can be emulated inside VSCode with a set of plugins, but I guess in the end I just like to work with Vim.
Same.
I pick my editor based on what I want to accomplish:
Of course, the last two run vim emulation layers. My selection is typically based on the trade-off between startup time and functionality offered by the editor. Tools for tasks, I guess
Reading this makes me realize I'm not using emmet correctly lol thank you!
How are you using it? Maybe it's another awesome way I'm not aware of!
Well, i had it setup for tab completion but that got annoying. Now i just do completion via
ctrl-ybut I didn't realize you could do it through the vim menu.This is not Vim fault per se. I am not sure what exactly Vim exposes as API to create syntax highlights, but to create accurate themes is a not so easy. Also, is time consuming task.
Yesterday I started to port (to port, not to create from scratch) a VSCode theme to (n)Vim and I can relate that the raw experience is not so thrilling (but I wonder if VSCode would recognize any syntax without specific implementation).
I now decided to rely on language packs (specific syntax/regex/etc implementation) and the (n)Vim colorscheme is getting almost exactly as the original VSCode theme (I still have to cover a few edge cases).
In general, vim-polyglot (or specific syntax highlighting / indentation bundles) + a decent colorscheme should help to avoid aesthetics nightmares.
How come nobody is saying something about Sublime Text?
Thank you so much, I enjoyed reading it
Nice Article.
You might maybe want to also check:
_ tomtom/tcomment_vi which is said to better handle mix languages.
_ tpope/vim-surround which is a good emmet complement.
Thank you!
I'll give them a look!
I don't wait for ALE unless I'm trying to get rid of an error message, in which case writing the file seems to trigger ALE to re-parse the code.
If you add the learning curve image, you should tell people if there is a way to exit Vi/ViM without killing it from another terminal </troll>
(as a vi user) i love the emacs graph
I'm using Vim on my personal computer. But, in the work I can't use it it really doesn't work as I expect. Because I'm using Windows :) I know WSL. I don't like it :/
I know WSL isn't perfect, but I've been using it pretty okay for developing at work. After downloading WslTTY I'm able to use my same vimrc from my home Linux machines.
Outside of that, using Vim on windows feels pretty miserable. NeoVim is apparently great but I haven't tried it much.
How do you install plugins for vim?
there are several plugin managers for vim, I personally use vundle.