Which editors out of Emacs, Vim and JEdit support multiple simultaneous text insertion points?

后端 未结 10 2161
心在旅途
心在旅途 2021-02-12 12:06

Background: JEdit (and some other text editors as well) support a feature called Multiple simultaneous text insertion points. (at least that\'s what I\'m callin

相关标签:
10条回答
  • 2021-02-12 12:38

    For emacs, multiple-cursors does exactly that.

    Have a look at emacsrocks episode 13, by the author of the module.

    0 讨论(0)
  • 2021-02-12 12:40

    Nope. This would be quite difficult to do with a primarily console-based UI.

    That said, there is similar features in vim (and emacs, although I've not used it nearly as much) - search and replace, as people have said, and more similarly, column insert mode: http://pivotallabs.com/users/brian/blog/articles/350-column-edit-mode-in-vi

    0 讨论(0)
  • 2021-02-12 12:42

    The vim way to do this is the . command which repeats the last change. So, for instance, if I change a pointer to a reference and I have a bunch of obj->func that I want to change to obj.func then I search for obj->, do 2cw to change the obj-> to obj., then do n.n.n. until all the instances are changed.

    Perhaps not a flexible as what you're talking about, but it works frequently and is very intuitive and fast when it does.

    0 讨论(0)
  • 2021-02-12 12:44

    I don't think this feature has a direct analogue in either Emacs or Vim, which is not to say that everything achievable with this feature is not possible in some fashion with the two 'old-school' editors. And like most things Emacs and Vim, power-users would probably be able to achieve such a task exceedingly quickly, even if mere mortals like myself could spend five minutes figuring out the correct grep search and replace with appropriate back-references, for example.

    0 讨论(0)
  • 2021-02-12 12:48

    YASnippet package for Emacs uses it. See 2:13 and 2:44 in the screencast.

    0 讨论(0)
  • 2021-02-12 12:49

    It seemed simple to do a basic version of this in Emacs lisp. This is for when you just want two places to insert text in parallel:

    (defun cjw-multi-insert (text)
      "insert text at both point and mark"
      (interactive "sText:")
      (insert-before-markers text)
      (save-excursion
        (exchange-point-and-mark)
        (insert-before-markers text)))
    

    When you run it, it prompts for text and inserts it at both point (current position) and mark. You can set the mark with C-SPC. This could be easily extended for N different positions. A function like set-insert-point would record current position (stored as an Emacs marker) into a list and then when you run the multi-insert command, it just iterates through the list adding text at each.

    I'm not sure about what would a simple way to handle a more general "multi-editing" feature.

    0 讨论(0)
提交回复
热议问题