5 ms·
Please, please implement multi-cursor support. For anyone that doesn't agree, please read my previous post on HN on the topic: https://news.ycombinator.com/item
by edanm 13y ago
Please, please implement multi-cursor support. For anyone that doesn't agree, please read my previous post on HN on the topic: https://news.ycombinator.com/item?id=1625382 https://news.ycombinator.com/item?id=1625382
I wrote to Thiago about this already, but we don't even need multi-cursor support - just a few additional hooks so we can implement a multi-cursor plugin.
Although to be honest, making it part of core is vastly preferable, since it is a hard feature to get right (e.g., how do you deal with copy-pasting into multiple-cursors)?
- hk__2 13y agoWhat problems can you solve with multi-cursors that you can’t with actual features like block selection?
- weaksauce 13y agoEditing the same thing in different places at the same time.
- prawks 13y agoIf it's the same thing, find & replace? Just playing devil's advocate, I've never come across a situation where I wanted multiple cursors that sed or macros couldn't do for me.
- weaksauce 13y agoI don't particularly need or use the feature over block selection or find and replace but it's similar to an interactive find and replace where you don't need to edit every instance of the found term. Some people love it.
- edanm 13y agoSimple (very common example): <pre> .some-css-rule { padding-left:50px; padding-right:50px; } </pre> Say I want to edit those two numbers. With multi-cursors, it's as simple as select one number, hitting a button that causes the other number to be selected, then writing the new value. Now, after I wrote it, I realize I forgot to put a space after the colon, and want to change the formatting. No problem - I just make the change to the first line, and the next line follows. Same as macros? Kind of. But let's say I make a mistake in the macro, e.g., I move the cursor left to the beggining of the line letter-by-letter instead of hitting "home", which is a killer for a macro since each line is a different length. (this is a contrived example a real vim'er will never do, but there are plenty of real examples of 'oops forgot about that' things when recording macros). Anyway, when I run my macro, suddenly things won't work, and then undoing and starting the re-record process takes time. But if I'm doing this with mulitple-cursors, I see right away, visually that something's wrong, and it's easy to fix - I just hit "home" after moving the cursor left. And note - this is a drop-dead-simple use case that happens 10's of times a day for any css programmer. Similarly, most programmers will run into cases where they have two similar if blocks one after another, or two similar "except" blocks, and so on. And that's not even going into lots of other, very powerful cases, like taking a function that gets a list of paramaters, and being able to easily manipulate these paramaters, e.g. given "foo(a, b, c, d, e)", I can easily multi-cursor all the commas, then copy all the params, then paste them after the func definition, hit enter, and I've got a list of all the params after the function definition. And this isn't hard, at all! I visually see everything I'm doing as I do it, and if something goes wrong, I fix it on the spot. I could ramble more about this, but I think I've either convinced you I'm crazy, or at least to try multi-cursors out :)
- chunkstuntman 13y agoIf you do this kind of editing daily, then executing the following commands would become second nature :s/50/60/g :s/:/: /g No need to touch the mouse or use macros. Many use-cases for multiple cursors are satisfied by the core functionality of vim, however they may not be immediately obvious.
- astine 13y agoTrivial counter-example: .some-css-rule { padding-left:50px; padding-right:50px; margin:50px; } Pretend you want to avoid changing the margin.
- chunkstuntman 13y ago:s/50/60/g<CR> @: or even just /50<CR>r6n. if there's any new feature I'd like to see in neovim it would be one key that will repeat an ex command like period does for normal/visual mode
- astine 13y agoYou're first example wont work. What you want is :s/50/60/<CR> @: And that still won't handle .some-css-rule { margin:50px; padding-left:50px; padding-right:50px; } The second example will work, for this, but not for the situation where you change your mind halfway through and decide you want 70px instead.
- eckzow 13y agoGlib response: :s/t:50/t:60/g More serious response: I think after many years of training ones brain to use the features available to it some of those features become second nature and subconscious. This is great for editing and it's the reason I immediately saw that you left me a really easy way to do it, but it can make seeing the value of new features more difficult.
- astine 13y ago
- deleted 13y ago[deleted]
- Morgawr 13y agoBut vim already has multiple cursor support, and arguably even better tools that do the same job.
- edanm 13y agoPlease see my answer to another commenter. I really disagree with this, and urge you to at least try it out. (and vim doesn't have multiple cursor support in the sense that I mean it).
- Afal 13y agoyou can get multiple cursors with this plugin (works better than I expected) https://github.com/terryma/vim-multiple-cursors https://github.com/terryma/vim-multiple-cursors
- edanm 13y agoIt works, and definitely better than other tries, but it's not even close to Sublime Text's caliber. Through no fault of the author, I assure you, as someone who's tried his hand at creating a similar plugin for vim and found many limitations of vim. One easy limitation comes to mind - you can't copy-paste different cursors, then paste them as unique items. E.g., given a list "a, b, c", I want to be able to multi-cursor the letters, copy them, then paste them into 3 multi-cursors somewhere else. Hard, very hard to implement.
- freshhawk 13y agoDo you have any links to a description of how they should work or should I just use Sublime Text to see a canonical example? That doesn't sound hard to implement iff you plan for those features from the beginning. I have my own editor hobby project and during my reading I got convinced multiple cursors are great for the reasons you described in your other comment. I hadn't thought about multi cursor copy/paste so I'm wondering what else I've missed.
- edanm 13y agoYou should probably just check out Sublime Text, that's the best (almost only) implementation I've seen.
- zaius 13y agoSomeone posted a demo video of a modal text editor with multiple cursors to HN a year or so ago and I've been trying to track it down. Any idea what that might have been?
- jimejim 13y ago
- beaumartinez 13y agoVim doesn't need multiple cursor support. Train yourself to think in Vim—you're editing text and words, not moving a cursor. Macros and global replace already do what you want.
- edanm 13y agoMacros and global replace are substitutes, sure, but they're not at all the same thing. And while I'm no vim wizard, I have used it as my main editor for 4+ years, and have a 1500 line vimrc and plenty of plugins (including my own), so you don't get to assume I don't grok the vim way of thinking :) I've heard the "macros is the same" sentiment many times, and usually it's from people who have never had much experience with multiple cursors, at least not in the situations where it's useful, and therefore don't realize how much more convenient they are in many every-day situations. In fact, many of the people arguing against multi-cursors have been convinced after trying them that they are better. Please, read my linked comment for an all-too-common situation. The basic problem with macros and global replace is that they don't happen immediately and don't give you feedback. I don't know any vim user who hasn't had the distinct pleasure of needing 3 tries to record a macro before they got it right. What's more, if I record a macro and run it, then realize after it that I want to do a small addition, I have to go through all the "setup" steps again - go back to the start, re-record, add the logical of finding the next block, and so on. I can't just visually see the situation and say "oh yeah, why don't I add this little tweak". Seriously, take a very common example: having 3 if's one after the other, where you want to add a line at the start of each if block. Doing this with multiple cursors is a breeze - 3 buttons and you get 3 cursors, then write your code. And if, after writing it, you realize you actually want to add another line, you just keep typing. It's literally the same as typing. Anyway, I've rambled enough on this topic many times. Please, just give them a try - I care a lot about text editors, I love this field, and I honestly think multiple cursors is the best innovation to happen in text editing in many years. And yet it's so often overlooked.
- Morgawr 13y ago>In fact, many of the people arguing against multi-cursors have been convinced after trying them that they are better. Fact by who? >The basic problem with macros and global replace is that they don't happen immediately and don't give you feedback. I don't know any vim user who hasn't had the distinct pleasure of needing 3 tries to record a macro before they got it right. True about macros, which are a very powerful tool that's way more than just multiple cursors. For global replace, however, this is false. Vim has an option to enable visual feedback for select/replace commands. I use it every day and it's awesome. >What's more, if I record a macro and run it, then realize after it that I want to do a small addition, I have to go through all the "setup" steps again - go back to the start, re-record, add the logical of finding the next block, and so on. I can't just visually see the situation and say "oh yeah, why don't I add this little tweak". What about recording the rest of the macro and running both of them one after the other? >Seriously, take a very common example: having 3 if's one after the other, where you want to add a line at the start of each if block. Doing this with multiple cursors is a breeze - 3 buttons and you get 3 cursors, then write your code. And if, after writing it, you realize you actually want to add another line, you just keep typing. It's literally the same as typing. v<linenum>j:s/if/<whatever>if/g oh wait, I wanted to add another line? uv<linenum>j:<up><change regex> Also as somebody already pointed out, vim already has plugin(s) for multiple cursor support and they work exactly as they should. I'm not arguing against multiple cursors, I'm just saying that they don't really bring anything new.