Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Most editors these days should have "rename" functionality which is very aware of how that symbol is used across a codebase.

M-x lsp-rename in emacs, for example works great, if you're using lsp.



Yes but this is more general, allowing you to use it in more cases. For instance, I use it heavily when converting old JavaScript to modern ES/TS. Using "var" everywhere? Replace them all with let. Using anonymous functions instead of lambdas, easy to change those all over (provided there's no "this" dependencies)

Have two thousand strings which all need the same edits? No need to do a find/replace operation, you can do it directly in the editor.


How do you select those two thousand strings?


Using VS Code: select whatever you want to match, then Ctrl+Shift+L


So it has to be two thousand identical strings? Then I don’t understand the benefit over search & replace.


It goes further than just that -- for instance, lets say your data looks like this:

    [
        "foo bar/2322",
        "foo baz/4223",
        "foo blah/2232",
        ...
    ]
And you need to reformat that into:

    [
        "bar 2322: foo",
        "baz 4223: foo",
        "blah 2232: foo",
        ...
    ]
You can absolutely use a regular expression find/replace to solve this. But using multicursors, you can just highlight the first "foo ", then hold Ctrl+D to select all instances, then hit right arrow key so that your cursors are at "foo |bar/2322" (and nothing is selected) et al, then use shift+right arrow key to select bar, baz, blah, and all other substrings, then use ctrl+X to cut that list to your clipboard. Hit delete key to get rid of the /s and add a space so you can keep the fields separated. Then, use ctrl+arrow to move your cursors to just before foo ("|foo /2322"), paste, hit space. Now you have "bar foo 2322". Repeat the same action to cut all the "foo" substrings, then move your cursor to the end, now type ": " and then paste.

You get the idea. It sounds complex, but these are all just comprised of the same fundamental editing patterns-- all of the cursors act as if you had just that one cursor when you press the keys. You have to play with multicursors to really appreciate their power.

Most of the time, someone who is well versed with multicursors and their editor's cursor shortcuts (arrow keys, page up/down, shift/ctrl arrow keys, etc) will be able to complete these sort of textual manipulations much faster than using find/replace.


Okay, that particular use case I know as column or vertical select mode.


you can have rows between the columns is the key difference


It doesn't have to be identical. For the method they're describing you just have to get search results -- so you can use regex in that. You can also just command-click anywhere you want to leave a new selection-point. (Or use various other find commands that search for things and add them to your selection pool.)

The benefit of it is that you're left with a cursor in each location, and you can then do absolutely anything that you'd normally do with a single cursor in every place at once. This includes things like copy/paste, which will maintain a separate buffer in each selection. This also includes things that're actually tough to do with normal find/replace -- I could select the bit after a search result and switch it to title-case, for instance.

You can do most things you'd use it for with find/replace. But sometimes it's easier to watch it happen as you type, rather than construct a fairly complex regex with groups and suchlike.


> Have two thousand strings which all need the same edits? No need to do a find/replace operation, you can do it directly in the editor.

I might be missing something here, but how is making 2000 individual selections better than `:%s/oldstring/newstring/g`?

I'm guessing that you have a rule for setting up those 2000 selection, or something?

I mean, even for like 5 identical edits, the regex is going to be faster, so you must have a short way of performing the multi-selection.


It helps when it is a bit more interactive, i.e when I only need to replace some of the occurrences versus everything.

Also when working with lists it is useful, you spawn cursors on , or < or whatever symbol you've got at a fixed location between lines, and then you can manipulate text in any number of otherwise different lines.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: