4 ms·
To remove 5 lines in VSCode I would just type cmd-backspace 5 times. Don’t even have to count the number of lines beforehand. Just delete lines until it looks a
by crubier 5y ago
To remove 5 lines in VSCode I would just type cmd-backspace 5 times. Don’t even have to count the number of lines beforehand. Just delete lines until it looks as you wanted. Much simpler than the complex process you describe, that involves counting lines and moving the cursor to the exact correct position.
As always, I am unimpressed by “vim tricks” that vim people always boast about. And I am yet to see a single real use case where vim is faster than good old basic keyboard shortcuts (that includes cmd-d)
- Ancapistani 5y ago> And I am yet to see a single real use case where vim is faster than good old basic keyboard shortcuts (that includes cmd-d) I feel like I’m far from a vim “power user”, but people regularly comment on how quickly I edit text and code when I’m doing a screenshare. It becomes second nature in short order, so I’m never thinking about some multi-step process to before an edit; I just “do it”. As for the “5dd” example… there are multiple ways to do things. For me, that would likely be: * navigate to the first or last line of the block * <shift+V> to start a selection of whole lines. * navigate to the other extreme * <D>
- paraknight 5y agoThere are many ways to skin a cat. Personally, in vim, I would do "dj" or "dk" twice, (deletes two lines up or down respectively) and then dd for the 5th one. Where vim shines is where you can just naturally start stringing together "sentences" of vim vocabulary and you can do what you mean. The macro system allows you to store these commands on the fly and replay them too.
- iimblack 5y agoIn vim you would actually just do 5dk to delete 5 previous lines. Or just do dk to delete one line, then . to repeat until satisfied. So you get an easy way to repeat actions. You can make this into a macro easily if needed. Then, most importantly in my opinion, you keep your hands in the normal typing position. The command key is awkward for me to reach and hurts my hands.
- semi-extrinsic 5y agoDelete until next matching parenthesis 3000-ish lines further down is a neat one. Or hex-edit a 5 GB binary. Or doing columnar editing with visual block mode.
- crubier 5y agoThese do indeed sound cool. Too bad that most vim users I know face these use cases rarely enough that it takes longer to remember how to do these tricks rather than just do it in a normal IDE.
- pasabagi 5y agoDunno. I'm about average and I use 'di(' or 'di{' like all the time. Not rocket science. One nice thing about vim is you basically don't need to remember 'tricks'. They're structured, so you can pretty much guess at a new trick if you want. For instance, d2w. Never used it before. Just used it. It deletes two words. Pretty useless, but the point is, it's not a trick - it's just an application of stuff you use all the time (delete, a count, a word object). Or like, dF. It deletes everything until the last dot. This is also obvious, because you use F all the time to jump to the last occurrence of a character. So 'delete till last dot' is just something you can make up or use without even noticing you're using it. I certainly don't know if I've used it before.
- unrealhoang 5y agoI haven't seen anyone identify themselves as vim user and don't know how to change text inside parenthesis or quotes with ci( or ci" or ci'. How is that rare in everyday programming? Or delete the entire function/scope with di{. The limitation of non-modal editing is that you only have arrows and modifiers whereas you can have a whole vocabulary /language for yourself with modal.
- parafactual 5y agoEven with the example you mentioned - cmd+backspace 5 times vs. "5dd" - I'm surprised that you can't see why some people would prefer the latter. (Also, if you're on the last line, I think "4dk" works.)
- phailhaus 5y agoI agree, the "5dd" example is super contrived, though not as much as you think. In vim, you can have the line numbers on the left show you numbers relative to your current line, so you never really have to count, you can just look at the number on the line you want to go to. But outside of that, the problem with standard editors is that none of your keyboard shortcuts compose together. You have special shortcuts for deleting lines vs deleting individual words. No shortcut for copying objects to your clipboard. No shortcuts for "get me what's within these parens". You can't move between panes with consistent keybindings, because most editors represent code panes vs directory panes differently. Vim lets you think of editing and navigating your code in terms of verbs and objects, and treats everything consistently. Take the "w" object, that's "word". Now I can move around by word by mashing "w", I can delete with "dw", change with "cw", yank to clipboard with "yw". The "." command lets me repeat, so I can do things like "dw..." and delete more easily. Some plugins add more objects, like being able to refer to surrounded text (e.g., in parentheses.) They compose with all the verbs you already know, so now I can delete inside parens, surround with parens, replace text within parens, copy in parens, etc. Vim compared to standard text editors is like functional vs imperative programming. It works best for code, because editing code is not like writing prose. You're manipulating a syntax tree.
- crubier 5y agoThank you for this explanation. It makes sense. But still, I find that vim is overcomplicating things for no good reason. What happened to KISS? Like every time I make this sort of remark, the thread becomes a thread about vim people debating that actually typing dd multiple time is better, or that dk could do the trick, or that select text followed by d is better, or that d% does the trick, or soon someone will share their custom shortcut that address this particular case, etc. Vim people have to think about Vim way too much. Meanwhile, keyboard shortcuts on a Mac do compose: arrow=Move, shift-arrow=Select, arrow=a character at a time (or vertically, a line), shift-arrow=a word at a time (or vertically a paragraph) cmd-arrow=the whole line (or vertically the whole file). Also cmd-d has immense powers when you know how to use it. And finally let me mention that syntax-aware editing is overrated when you use a linter/formatter because regular indentation and normal shortcuts work flawlessly already. Last but not least: these shortcuts work system wide! So we don’t have to reimplement every possible software within my text editor so I can use these shortcuts.
- opan 5y agoYou could also hit dd several times or dd followed by a dot to repeat as needed. I wouldn't call them tricks. These are normal actions done in "normal" mode. You don't generally need key chords, which improves ergonomics, and many keys are mnemonics (like d for delete, c for change, etc.) It's not like finding out about a secret shortcut. You're using a ton of these in a smooth flow to do what you want at the speed of thought and with less finger contortion. If you wanted to be convinced, run `vimtutor` and complete the tutorial. It'll show you a variety of common actions.
- crubier 5y agoYou mean “esc, d, d, ., ., ., ., esc” which is two mode changes, eight key strokes of three different types. Versus five identical key strokes with VSCode. Next. Also define “smooth flow”. I my experience pair programming, by the time you are starting you command after choosing among all possibilities, I have already performed the change with VSCode.
- colordrops 5y agoNo. First, you don't hit esc at the end to get back into insert mode, assuming that's what you mean - you'd hit "i". Also, it doesn't make sense to include mode changes since you don't know what mode you are in to begin with or what mode you want to be in when you are done. Lastly, this is all you need: 5dd But as long as you are including preparation keystrokes, how may keystrokes would it be to get to a particular line in vscode? I guarantee it will be a lot more than vim. There are countless ways to navigate to a position in a buffer.
- crubier 5y agoI cmd-arrow + click on it on my MacBook trackpad if needed. Believe it or not, it’s actually really really fast, and in my experience faster than any vim trick. The reason why it’s faster is that it’s a lower level task: I can just visually go where I want without even having to read contents or even line numbers, just based on text shape, don’t even have to think about it, it’s just muscle reflex. I don’t have to (consciously or not) plan a strategy choosing the best way among 5 different ways each time I want to select text. And no, this never becomes a true reflex. If it does then it’s just because you always choose the same strategy. You always have this part of your brain that has to think about vim tricks, and believe me, we can see that from the outside.
- jandrese 5y agoThere are loads of other tricks. For example, say you have discovered that you need to delete an entire block of code. You could position your cursor on the opening or closing brace and type d$. This sounds arcane when you hear it (and to be fair it is to a degree), but once you realize that it's just a combination of navigation and action most of it becomes obvious.
- bradrn 5y agoDid you perhaps mean ‘d%’? IIRC ‘d$’ deletes to the end of the line.
- crubier 5y agoLol, exactly making my point thank you
- bradrn 5y agoQuite the converse, in fact I use vim mode whenever I can; I would struggle to think of a better way of editing text. (My current editor is Emacs+evil and I don’t anticipate changing it any time soon.) I strongly suspect GGP’s post was simply a typo, as ‘%’ and ‘$’ are right next to each other on the keyboard. And if I were to make that typo while editing a real document, I would need only the three keystrokes ‘ud%’ to undo it and then do the editing action I originally meant.
- jandrese 5y agoOf course I fat finger the example. LOL.
- rgoulter 5y agoThis reads the same as the attitude which motivated the famous StackOverflow answer "your problem with vim is that you don't grok vi": https://stackoverflow.com/questions/1218390/what-is-your-most-productive-shortcut-with-vim https://stackoverflow.com/questions/1218390/what-is-your-mos...
- crubier 5y agoAbsolutely not. My problem with Vim is I pair program with Vim experts on a daily basis and am annoyed at their slowness while they are proudly using their gimmicks. (Also the length and complexity of the answer you linked makes me laugh, and proves that a category of programmers is more interested in defending Vim than about making things people want)
- colordrops 5y agoThey obviously aren't experts then. I don't know many people who can edit in a GUI as fast as a seasoned vim user. Maybe seen it twice.
- crubier 5y agoThey have been using its daily at work for many years. And they are very competent and productive programmers. It’s just that it’s tempting to find the “perfect” combo when performing complex tasks, and that takes time and mental energy even if you don’t realize this. Small time admittedly, but still present and cumulative.
- gorjusborg 5y agoI can't see how someone can use vi for more than a couple of years without doing most everything from muscle-memory. That's the dominant value-proposition, in my view. That said, your attitude toward use of an editor is bizarre. If you want to use vscode, use it. If not, don't. If you are trying to convince the world that your choice is the best, and anyone who disagrees is wrong, well, good luck with that.
- bloopernova 5y agoIt looks like your comment spawned a lot of discussion! I chose the "delete 5 lines" example because it was simple; the person I replied to said they weren't familiar with vim, and I didn't know how familiar they were with editors and code in general. I think that perhaps you jumped to the incorrect conclusion about that part of my comment. I didn't impugn or insult visual studio code, nor try to insinuate that vim is better. In fact, I use vscode every work day for my devops day job, alongside Emacs for my org-mode documents, and vim for remote editing. For counting lines, in vim I generally don't do that. If I have, say, a couple hundred lines to delete then I use something like 50dd a couple of times. Once I'm close to the end of what I wanted to delete, I just use dd followed by . to repeat that dd. There's more than enough space in the world for multiple text editors! It doesn't really have to be a competition.