Vim emulation plugin for IDEs based on the IntelliJ Platform

Overview

icon

IdeaVim

Official JetBrains Project Contributions welcome Downloads Rating Version Gitter Twitter

IdeaVim is a Vim emulation plugin for IntelliJ Platform-based IDEs.

Contact maintainers:
Resources:

Compatibility

IntelliJ IDEA, PyCharm, CLion, PhpStorm, WebStorm, RubyMine, AppCode, DataGrip, GoLand, Rider, Cursive, Android Studio and other IntelliJ platform based IDEs.

Setup

  • IdeaVim can be installed via Settings | Plugins. See the detailed instructions.

  • Use Tools | Vim Emulator to enable or disable emulation.

  • Use the ~/.ideavimrc file as an analog of ~/.vimrc (learn more). The XDG standard is supported, as well.

  • Shortcut conflicts can be resolved by using:

    • On Linux & Windows: File | Settings | Editor | Vim Emulation & File | Settings | Keymap,
    • On macOS: Preferences | Editor | Vim Emulation & Preferences | Keymap,
    • Regular Vim mappings in the ~/.ideavimrc file.

Get Early Access

Would you like to try new features and fixes? Join the Early Access Program and receive EAP builds as updates!

  1. Click the IdeaVim icon icon in the status bar | EAP | Get Early Access...

Or subscribe to EAP updates manually:

  1. Open Settings | Plugins
  2. Click the gear icon ⚙️ , select Manage Plugin Repositories, and add the following url: https://plugins.jetbrains.com/plugins/eap/ideavim

See the changelog for the list of unreleased features.

It is important to distinguish EAP builds from traditional pre-release software. Please note that the quality of EAP versions may at times be way below even usual beta standards.

You can always leave your feedback with:

Summary of Supported Vim Features

Here are some examples of supported vim features and commands:

  • Normal / insert / visual / select / etc. modes
  • Motion / deletion / change / window / etc. commands
  • Key mappings
  • Marks / Macros / Digraphs / Registers
  • Some set commands
  • Full Vim regexps for search and search/replace
  • Vim web help
  • ~/.ideavimrc configuration file

Emulated Vim plugins:

  • vim-easymotion
  • vim-surround
  • vim-multiple-cursors
  • vim-commentary
  • argtextobj.vim
  • vim-textobj-entire
  • ReplaceWithRegister
  • vim-exchange
  • vim-highlightedyank

See also:

Files

  • ~/.ideavimrc
    • Your IdeaVim-specific Vim initialization commands
Example (click to see)
""" Map leader to space ---------------------
let mapleader=" "

""" Plugins  --------------------------------
set surround
set multiple-cursors
set commentary
set argtextobj
set easymotion
set textobj-entire
set ReplaceWithRegister

""" Plugin settings -------------------------
let g:argtextobj_pairs="[:],(:),<:>"

""" Common settings -------------------------
set showmode
set so=5
set incsearch
set nu

""" Idea specific settings ------------------
set ideajoin
set ideastatusicon=gray
set idearefactormode=keep

""" Mappings --------------------------------
map <leader>f <Plug>(easymotion-s)
map <leader>e <Plug>(easymotion-f)

map <leader>d <Action>(Debug)
map <leader>r <Action>(RenameElement)
map <leader>c <Action>(Stop)
map <leader>z <Action>(ToggleDistractionFreeMode)

map <leader>s <Action>(SelectInProjectView)
map <leader>a <Action>(Annotate)
map <leader>h <Action>(Vcs.ShowTabbedFileHistory)
map <S-Space> <Action>(GotoNextError)

map <leader>b <Action>(ToggleLineBreakpoint)
map <leader>o <Action>(FileStructurePopup)
Suggested options (click to see)

Here is also a list of the suggested options from defaults.vim

" Show a few lines of context around the cursor.  Note that this makes the
" text scroll if you mouse-click near the start or end of the window.
set scrolloff=5

" Do incremental searching
set incsearch

" Don't use Ex mode, use Q for formatting.
map Q gq

You can read your ~/.vimrc file from ~/.ideavimrc with this command:

source ~/.vimrc

⚠️ Please note that IdeaVim currently parses ~/.ideavimrc & ~/.vimrc files via simple pattern-matching. See VIM-669 for proper parsing of VimL files.

Also note that if you have overridden the user.home JVM option, this will affect where IdeaVim looks for your .ideavimrc file. For example, if you have -Duser.home=/my/alternate/home then IdeaVim will source /my/alternate/home/.ideavimrc instead of ~/.ideavimrc.

Alternatively, you can set up initialization commands using XDG standard. Put your settings to $XDG_CONFIG_HOME/ideavim/ideavimrc file.

Emulated Vim Plugins

See doc/emulated-plugins.md

Executing IDE Actions

IdeaVim adds various commands for listing and executing arbitrary IDE actions as Ex commands or via :map command mappings:

Executing actions:

  • :action {action_id}
    • Execute an action by id. Works from Ex command line.
  • <Action>(*action_id*)
    • For the mappings you can use a special <Action> keyword. Don't forget the parentheses.

Finding actions:

  • :actionlist [pattern]

    • Find IDE actions by id or keymap pattern (E.g. :actionlist extract, :actionlist <C-D)
  • In addition to :actionlist command, IdeaVim provides IdeaVim: track action Ids option to extract the ids of executed command. This option can be found in "Search everywhere" (double shift).

    "Track action Ids" Details (click to see) track action ids

Examples:

" Map \r to the Reformat Code action
:map \r <Action>(ReformatCode)

" Map <leader>d to start debug
:map <leader>d <Action>(Debug)

" Map \b to toggle the breakpoint on the current line
:map \b <Action>(ToggleLineBreakpoint)

💎 Contributing

The power of contributing drives IdeaVim 💪 . Even small contributions matter!

See CONTRIBUTING.md to start bringing your value to the project.

Authors

See AUTHORS.md for a list of authors and contributors.

IdeaVim tips and tricks

  • Use the power of IJ and Vim:

    • set ideajoin to enable join via the IDE. See the examples.
    • Make sure ideaput is enabled for clipboard to enable native IJ insertion in Vim.
    • Sync IJ bookmarks and Vim marks: set ideamarks
    • Check out more ex commands.
  • Use your vim settings with IdeaVim. Put source ~/.vimrc in ~/.ideavimrc.

    ⚠️ Please note that IdeaVim currently parses ~/.ideavimrc & ~/.vimrc files via simple pattern-matching. See VIM-669 for proper parsing of VimL files.

  • Control the status bar icon via the ideastatusicon option.

  • Not familiar with the default behaviour during a refactoring? See the idearefactormode option.

Some facts about Vim

Let’s relax and have some fun now! Here are a few things we've found interesting during development and would like to share with you.

  • There are no such commands as dd, yy, or cc. For example, dd is not a separate command for deleting the line, but a d command with a d motion.
    Wait, but there isn't a d motion in Vim! That’s right, and that’s why Vim has a dedicated set of commands for which it checks whether the command equals to motion and if so, it executes _ motion instead.
    _ is an interesting motion that isn't even documented in vi, and it refers to the current line. So, commands like dd, yy, and similar ones are simply translated to d_, y_, etc. Here is the source of this knowledge.

  • x, D, and & are not separate commands either. They are synonyms of dl, d$, and :s\r, respectively. Here is the full list of synonyms.

  • Have you ever used U after dd? Don't even try.

  • A lot of variables that refers to visual mode start with two uppercase letters, e.g. VIsual_active. Some examples.

  • Other strange things from vi:

    • ":3" jumps to line 3
    • ":3|..." prints line 3
    • ":|" prints current line
  • Vim script doesn't skip white space before comma. F(a ,b) => E475.

License

IdeaVim is licensed under the terms of the GNU Public License version 2 or any later version.

Comments
  • Another attempt at comment motion extension

    Another attempt at comment motion extension

    @vlasovskikh Thanks for your work on #105. Here's another try at an extension for providing motion-based comment actions, based off the latest master. This PR will initially serve as more discussion, however, as trying to use the <Plug> support is causing some issues that I haven't had time to fully investigate. Basically, the PR mostly works as-is, but without <Plug> maps. When I uncomment the <Plug> maps, it seems to want an extra operator before performing the action.

    More concretely, when using the <Plug> map indirection:

    • gcc works as expected, but it seems to also add an extra c as input, such that then hitting j will delete the current and next lines and enter insert mode)
    • gcl to do a block comment around one letter will appear to only accept the l to move the cursor. A subsequent l will do the comment (but of course at this point it will be one character to the right of the one you actually wanted to comment). In fact, at this point you can enter any motion and it'll "work."
    • gcip will enter insert mode and paste g@p

    When directly mapping the keys to the extension handlers:

    • The gc + motion in normal word works as expected
    • gc in visual mode doesn't seem to do anything
    • gcc behaves the same as when using <Plug>

    The tests, however, all pass. These were observed by using the runIdea gradle command from within IntelliJ. The vim-surround support seems to work just fine, though, so it could be some problem in my code rather than the extension framework....

    Wanted to get this up so we can start looking into the causes of these behaviors, since they'll probably need to be addressed before other extensions can be developed.

    opened by dhleong 50
  • Framework for IdeaVim extensions + sketch of vim-surround port

    Framework for IdeaVim extensions + sketch of vim-surround port

    I've added the following:

    1. An extension point IdeaVIM.vimExtension. for registering IdeaVim extensions. See plugin.xml and VimSurroundExtension as an example. You have to add a <vimExtension/> tag into plugin.xml and inherit from VimExtension in order to get your plugin registered and get the set <plguin-name> option working.
    2. The VimExtensionFacade contains the parts of the API for extension authors that is similar to Vim.
    3. Extension actions are registered via putExtensionHandlerMapping() similar to :map ... :call <your-extension-handler> in Vim.
    4. If your extension handler requires an argument, use operatorfunc (available as setOperatorFunction()) and g@ as in Vim.
    5. getchar() is implemented as a modal dialog that looks like Vim input line at the bottom of the editor, see getKeyStroke()
      • I'll add a unit-testable version of the modal dialog-based implementation

    Next steps:

    1. Add vim-surround commands with unit tests
    2. Extend VimExtensionFacade according to the needs of the vim-surround port
    opened by vlasovskikh 36
  • VIM-769 Support for vim-surround

    VIM-769 Support for vim-surround

    This is an initial stab at defining semantics for replicating vim plugin behavior within IdeaVim, with some preliminary support for tpope's excellent vim-surround plugin.

    I'm not sure if there's a more idiomatic way of doing stuff like this, but since I didn't hear back on my request for guidance I just went ahead and made something up.

    I created a Plugin interface which contains a Registrar in which plugins register. Each plugin has an "option name" which is used to enable the plugin using the vim options syntax, eg:

      set surround
    

    Plugins can be activated at runtime using this syntax, but I wasn't sure how to go about disabling them (I think we'd need a hook to register and de-register actions, or perhaps make a subclass of VimCommandAction that won't be automatically registered at init). I'm not sure that's a huge concern, though, as generally you set up your plugins once in your vimrc and just go.

    Since plugin bindings are optional and are enabled after init via .ideavimrc, I slightly refactored ParentNode to be able to correctly handle adding new BranchNode onto a BranchNode that already has an ArgumentNode. This way, plugins can override built-in bindings as expected, as well as expand on them.

    The included vim-surround port supports most of the core surroundings, but currently leaves xml/html tag support to future work, as well as (I'm sure) a few more obscure features that I wasn't aware of, but I wanted to get this PR up and get some feedback on the approach before I try to figure that one out.

    Since the ys and cs motions take more than just a motion, I mimicked vim-surround's implementation and added a getChar() command to KeyHandler. While necessarily asynchronous, taking a callback, this does block other vim input processing, as expected. If there's a better way to deal with this sort of thing I'd love to hear it, but this seemed like it would prove helpful in porting other vim plugins in the future.

    UPDATE: Repeat support via . for cs and ys is achieved by subclassing Argument and storing our extra arguments in it (ie, the SurroundPair object). I think this is the simplest way to support the more complex surrounds, such as that achieved by ysiwtdiv> to surround the inner word with <div></div> tags (which is not yet implemented, but I'm thinking ahead for when we figure that out).

    opened by dhleong 28
  • Fix VIM-987

    Fix VIM-987

    This is my attempt to fix VIM-987.

    The IDE itself does something slightly different at the moment (see here) while JComponent#processKeyBindings(KeyEvent, boolean) falls back on the "normal" key code when it finds no matching binding (I'd like to link the source here, but it seems to be only available as scrs.zip).

    Because I don't know if I break something else with this change and I want to see if I get a response on IDEA-197762, I prefaced this with WIP. I the meantime I am testing this change on my system.

    Any feedback would be appreciated.

    opened by rittelle 24
  • VIM-652 Add support for executing and mapping arbitrary IDEA actions

    VIM-652 Add support for executing and mapping arbitrary IDEA actions

    no tests performed..!

    Example usage:

    • :nnoremap gi :action GotoImplementation<CR>
    • :nnoremap gu :action FindUsages<CR>
    • :nnoremap gcw :action RenameElement<CR>

    Action overview: https://github.com/JetBrains/intellij-community/blob/6c6cb47c5a41025549157d64643a98a89481260d/platform/platform-resources-en/src/messages/ActionsBundle.properties

    opened by smartbomb 21
  • New extension: Indentation based text objects

    New extension: Indentation based text objects

    Hello team! Thank you for the amazing work on IdeaVim.

    Indentation based text objects are something I've been missing quite a bit in IdeaVim and, learning that that extension is not already available, I made an implementation of this idea.

    Original Vim extension of this idea: https://github.com/michaeljsmith/vim-indent-object.

    I'm very new to IdeaVim's code base and I did just enough to get this feature working (since I needed it). In that context, majority of the code is copy-paste from the textobj-entire plugin. If there's anything you'd like to be changed to make it ready for merging, please let me know.

    Also, I'm trying to add a test class to test this plugin, but the test fails for some weird reason I'm not able to comprehend yet. I could use some help there (if you guys are okay to merge this in now and do the test separately, I'm fine with that as well). This is probably due to my lack of knowledge in Kotlin though.

    Again, thank you very much for your work and your time. I hope this extension will be available as part of IdeaVim in the future.

    Waiting for updates 
    opened by sharat87 14
  • Add rudimentary command support

    Add rudimentary command support

    Experimenting with a simple ":command" interface. Allows mapping intellij custom actions to shorter commands as desired. For example ":command shell action openTerminal" to open shell instead of requiring a custom action in java code.

    No unit test (as of yet). Would appreciate initial comments.

    opened by hari-rangarajan 13
  • First stab at <Plug> mappings

    First stab at mappings

    Using a non-existent key stroke is great, but ambiguous plug mappings aren't supported out of the box. Imagine you have two mappings, both of which take a motion:

    More MoreMagic

    You've mapped gmm to More and gmc to MoreMagic.

    When you type gmc, the recursive mapping is available, and the else if (mappingInfo != null) branch can feed the mapped keys back into the system. Because these are fed as recursive, when the keys come back through, they can get the mapping to MoreMagic (which is no longer a prefix) and execute.

    For gmm, when it feeds the keys for More, it is still a prefix; when a motion is inputted, it is no longer a prefix, and so it would hit the else block, feeding the keys WITHOUT recursion. So, we have to catch the case where we're no longer a prefix, but can find a mapping within the input. This seems to work pretty well, but causes "recursive records found" warnings in the console, and complaints about local history being broken. I'm not entirely sure whether this is just an idiosyncrasy of the unit test environment, or whether this would cause significant problems in the live environment. I'm hoping you have more experience here about whether that warning can be ignored, and am open to suggestions otherwise.

    Also included is some prep work for -based repeat handling. Extra input sequences past the mapping are stored in a PlugInputModel which is read from in preference to the ModalInputDialog.

    opened by dhleong 13
  •  VIM-410 - Adding support for ':set rnu' and ':set nu'

    VIM-410 - Adding support for ':set rnu' and ':set nu'

    Pull request to add a nice feature that I was missing on IdeaVim: relative line numbers.

    By setting the relativenumber option, the editor shows the line numbers relative to the caret position, allowing users to quickly jump a few lines up or down to change some text or maybe yank it.

    screen shot 2014-03-09 at 11 08 28

    With this feature you can just go 4j to go 4 lines down or 3k to go 3 lines up at a glance :)

    opened by jjsanchez 13
  • VIM-664 - read ideavimrc from XDG config home directory

    VIM-664 - read ideavimrc from XDG config home directory

    This pull request solves VIM-664. If ideavimrc file exist in XDG config directory use it instead the one in home dir. Works according to XDG spec, that is it uses directory specified in XDG_CONFIG_HOME environment variable if set and ~/.config otherwise. Any feedback appreciated.

    opened by hajdamak 12
  • VIM-523 Global mark remembers only the line number

    VIM-523 Global mark remembers only the line number

    Bear with me as this is the first thing I've ever done with Intellij-IDEA plugin development.

    I tested this and I believe I fixed the problem. The cause of the problem was that the code was checking if the mark was in a different file but if it was, it was using the editor of the current file to go to the line of the mark. I changed the code so that it opens the file of the mark first, then jumps to its line number.

    I need a VirtualFile so that I can get the Editor to open. The Mark stores the path of the file it's in, but the path is not enough information to get a VirtualFile. I also need the "protocol" of the file. So, I had to change the structure of the Mark and add a "protocol" field to it.

    I had to update the save/load logic to use this new field, too. This way, when you restart Intellij-IDEA, the marks can still be used. For old marks, I defaulted the "protocol" to the value of "file".

    One thing I couldn't figure out how to do is add a test case to check that this is working correctly. This is not due to a lack of effort. In fact, I tried to write the test case first. But I have been unable to find any examples anywhere of testing multiple Editors, and that's what's involved to fix this issue. Because of this, this issue may be best used as a reference to fix the problem instead of worthy of being used in production. Either way, I'd love to know how to write such a test.

    opened by DanKaplanSES 12
  • Matchit: Add more Rider file types

    Matchit: Add more Rider file types

    Rider supports a few other file types that are flavors of HTML/XML:

    • Asp: templating language for .NET web apps, Razor's predecessor
    • UXML: XML files for Unity game development
    • Xaml: XML files for .NET Core UI development

    I should have included these in https://github.com/JetBrains/ideavim/pull/579, but I'm not a C# guy so they're new to me. 🙂

    opened by myzeiri 0
  • Bump org.eclipse.jgit from 6.1.0.202203080745-r to 6.4.0.202211300538-r

    Bump org.eclipse.jgit from 6.1.0.202203080745-r to 6.4.0.202211300538-r

    Bumps org.eclipse.jgit from 6.1.0.202203080745-r to 6.4.0.202211300538-r.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 0
  • Bump junit-jupiter-api from 5.8.1 to 5.9.1

    Bump junit-jupiter-api from 5.8.1 to 5.9.1

    Bumps junit-jupiter-api from 5.8.1 to 5.9.1.

    Release notes

    Sourced from junit-jupiter-api's releases.

    JUnit 5.9.1 = Platform 1.9.1 + Jupiter 5.9.1 + Vintage 5.9.1

    See Release Notes.

    JUnit 5.9.0 = Platform 1.9.0 + Jupiter 5.9.0 + Vintage 5.9.0

    See Release Notes.

    JUnit 5.9.0-RC1 = Platform 1.9.0-RC1 + Jupiter 5.9.0-RC1 + Vintage 5.9.0-RC1

    See Release Notes.

    JUnit 5.9.0-M1 = Platform 1.9.0-M1 + Jupiter 5.9.0-M1 + Vintage 5.9.0-M1

    See Release Notes.

    JUnit 5.8.2 = Platform 1.8.2 + Jupiter 5.8.2 + Vintage 5.8.2

    See Release Notes.

    Commits
    • 732a540 Release 5.9.1
    • 88bf48d Prepare release notes for 5.9.1
    • d75e34d Update scope for 5.9.1
    • 9823f73 Link to all 5.9 milestone pages
    • 76719bb Increase timeout for GraalVM test
    • 2a80984 Install GraalVM for main CI build on Linux
    • 79f47f5 Refactor OpenTestReportGeneratingListener to work in native images
    • 7229385 Add failing integration test for execution on GraalVM native image
    • 343170f Fix running tests in documentation from IntelliJ IDEA
    • 352d06b Attempt to stabilize test on Windows
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 0
  • Bump github-api from 1.305 to 1.313

    Bump github-api from 1.305 to 1.313

    Bumps github-api from 1.305 to 1.313.

    Release notes

    Sourced from github-api's releases.

    v1.313 🌈

    Changes

    v1.308 🌈

    Changes

    v1.307 🌈

    Changes

    Dependencies

    ... (truncated)

    Commits
    • 9f1636f [maven-release-plugin] prepare release github-api-1.313
    • 3f5c0a9 Roll javadoc back further
    • df93ad8 [maven-release-plugin] prepare for next development iteration
    • 728fdcb [maven-release-plugin] prepare release github-api-1.312
    • b0029fa Merge pull request #1529 from bitwiseman/issue/packages
    • c77eccb Rollback javadoc to unblock release
    • 506134f [maven-release-plugin] prepare for next development iteration
    • ced3119 [maven-release-plugin] prepare release github-api-1.311
    • 0acea13 [maven-release-plugin] prepare for next development iteration
    • 87cdfc6 [maven-release-plugin] prepare release github-api-1.310
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 0
  • Fix vim-surround not working with multiple cursors

    Fix vim-surround not working with multiple cursors

    Fixes multiple cursors with vim-surround commands cs, ds, S (but not ys).

    https://user-images.githubusercontent.com/3685160/174427769-e523bc89-0040-46f1-98d3-ae8f628df4a5.mp4

    I don't know if this is a good solution and there likely edge cases that break it, but I use multiple cursors every day and having at least some solution that makes vim-surround work in most cases is better than having it not work at all.

    Unfortunately I have not figured out how to make ys work (I didn't even know that particular command existed until I looked at the source).

    If you know of a better overall solution and/or a way to make ys work too, I'd be happy to improve this.

    I also haven't added unit tests yet. I'm opening it as a draft for discussion, if / once you are happy with the implementation I will write some tests before it's merged in.

    opened by chylex 3
Owner
JetBrains
JetBrains open source projects
JetBrains
IntelliJ IDEA Community Edition & IntelliJ Platform

IntelliJ IDEA Community Edition These instructions will help you build IntelliJ IDEA Community Edition from source code, which is the basis for Intell

JetBrains 14.8k Jan 7, 2023
A plugin to add Silverstripe template support to PHPStorm and other JetBrains IDEs.

Idea Silverstripe Plugin ⚠️ Work in progress ⚠️ This plugin adds Silverstripe template support to PHPStorm and other JetBrains IDEs. Platform requirem

Loz Calver 25 Sep 27, 2021
IntelliJ Platform plugin that shows the file name of the currently open file in the status bar.

IntelliJ Platform plugin that shows the file name of the currently open file in the status bar. Clicking shows a list of recent files.

Christoffer Hammarström 4 May 9, 2022
Vim-like editing in Eclipse

Vim-like editing in Eclipse Vrapper is an Eclipse plugin which acts as a wrapper for Eclipse text editors to provide a Vim-like input scheme for movin

Vrapper team 1.1k Jan 1, 2023
Expose eclipse features inside of vim.

Welcome to Eclim on GitHub Overview The primary goal of eclim is to bring Eclipse functionality to the Vim editor. For more details, please visit ecli

Eric Van Dewoestine 1k Nov 3, 2022
A library for IDEs and Code Editors to compile java projects faster dynamically

A library for IDEs and Code Editors to compile java projects faster dynamically

omega ui 2 Feb 22, 2022
IntelliJ Platform A full-featured WYSIWYG editor for markdown

markdown-editor IntelliJ Platform A full-featured WYSIWYG editor for markdown English Document 中文文档 Useful Links Custom Style Features Support three e

null 101 Dec 19, 2022
Markdown language support for IntelliJ IDEA (abandonned).

idea-markdown Markdown language support for IntelliJ IDEA, RubyMine, PhpStorm, WebStorm, PyCharm, AppCode and Android Studio. This plugin is no more m

null 602 Dec 30, 2022
TypeQL plugin for JetBrains

JetBrains-Graql-Plugin Basic support for the Graql language (http://grakn.ai) Features Syntax highlighting/validation Find usages support Basic code c

TypeDB OSI 9 Feb 13, 2022
An object mapping jetbrains plugin, it will automatically generate the get/set code between the two objects.

BeanMappingKey 简体中文 | English 一键生成两个实体类之间的字段映射代码,用于代替 BeanUtil 与 MapStruct 等工具。 使用指南 在 Java 开发的过程中,经常会使用众多包装型的对象如:BO、VO、DTO,它们之间往往只有两三个字段的差异, 而对它们进行相互

Rookie 60 Dec 14, 2022
Tiger language plugin for IntelliJ-based IDEs (including CLion)

Tiger IDEA Tiger language plugin for IntelliJ-based IDEs (including CLion). From the marketplace Search "Tiger" in the Preferences => Plugins section

Adrien Navratil 7 Dec 15, 2022
IntelliJ IDEA Community Edition & IntelliJ Platform

IntelliJ IDEA Community Edition These instructions will help you build IntelliJ IDEA Community Edition from source code, which is the basis for Intell

JetBrains 14.8k Jan 7, 2023
Spotless-intellij-gradle - An IntelliJ plugin to allow running the Spotless gradle task from within the IDE.

Spotless Intellij Gradle An IntelliJ plugin to allow running the spotless gradle task from within the IDE on the current file selected in the editor.

Ryan Gurney 30 Dec 17, 2022
A plugin to add Silverstripe template support to PHPStorm and other JetBrains IDEs.

Idea Silverstripe Plugin ⚠️ Work in progress ⚠️ This plugin adds Silverstripe template support to PHPStorm and other JetBrains IDEs. Platform requirem

Loz Calver 25 Sep 27, 2021
IntelliJ Platform plugin that shows the file name of the currently open file in the status bar.

IntelliJ Platform plugin that shows the file name of the currently open file in the status bar. Clicking shows a list of recent files.

Christoffer Hammarström 4 May 9, 2022
Vim-like editing in Eclipse

Vim-like editing in Eclipse Vrapper is an Eclipse plugin which acts as a wrapper for Eclipse text editors to provide a Vim-like input scheme for movin

Vrapper team 1.1k Jan 1, 2023
Expose eclipse features inside of vim.

Welcome to Eclim on GitHub Overview The primary goal of eclim is to bring Eclipse functionality to the Vim editor. For more details, please visit ecli

Eric Van Dewoestine 1k Nov 3, 2022
Threat Emulation and Red Teaming Framework.

The Remote Hacker Probe is a Remote Access and Post Exploitation Framework coded in C++/Java. Installation & Usage Download Java 11+. Most preferrably

QuantumCored 179 Jan 5, 2023
A simple and scalable Android bot emulation framework, as presented at Black Hat Europe 2021's Arsenal, as well as atHack 2021's Arsenal

m3 A simple and scalable Android bot emulation framework. A detailed explanation can be found here. This project was first published at Black Hat Euro

null 22 Aug 20, 2022
A library for IDEs and Code Editors to compile java projects faster dynamically

A library for IDEs and Code Editors to compile java projects faster dynamically

omega ui 2 Feb 22, 2022