{"id":13427816,"url":"https://github.com/JetBrains/ideavim","last_synced_at":"2025-03-16T00:32:39.653Z","repository":{"id":37848103,"uuid":"1459486","full_name":"JetBrains/ideavim","owner":"JetBrains","description":"IdeaVim – A Vim engine for JetBrains IDEs","archived":false,"fork":false,"pushed_at":"2024-05-28T21:15:19.000Z","size":112906,"stargazers_count":8841,"open_issues_count":7,"forks_count":722,"subscribers_count":176,"default_branch":"master","last_synced_at":"2024-05-29T02:35:06.584Z","etag":null,"topics":["ideavim","intellij","intellij-platform","intellij-plugin","jb-official","jetbrains","kotlin","vim"],"latest_commit_sha":null,"homepage":"https://lp.jetbrains.com/ideavim/","language":"Kotlin","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JetBrains.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.md","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2011-03-09T15:22:27.000Z","updated_at":"2024-06-02T21:07:07.689Z","dependencies_parsed_at":"2024-06-02T21:27:09.139Z","dependency_job_id":null,"html_url":"https://github.com/JetBrains/ideavim","commit_stats":null,"previous_names":[],"tags_count":143,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JetBrains%2Fideavim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JetBrains%2Fideavim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JetBrains%2Fideavim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JetBrains%2Fideavim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JetBrains","download_url":"https://codeload.github.com/JetBrains/ideavim/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221631818,"owners_count":16855013,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ideavim","intellij","intellij-platform","intellij-plugin","jb-official","jetbrains","kotlin","vim"],"created_at":"2024-07-31T01:00:40.820Z","updated_at":"2025-03-16T00:32:39.645Z","avatar_url":"https://github.com/JetBrains.png","language":"Kotlin","readme":"\u003cimg src=\"src/main/resources/META-INF/pluginIcon.svg\" width=\"80\" height=\"80\" alt=\"icon\" align=\"left\"/\u003e\n\nIdeaVim\n===\n\n[![Official JetBrains Project][jb-official-svg]][jb-official]\n[![Contributions welcome][contributions-welcome-svg]][contributions-welcome]\n[![Downloads][plugin-downloads-svg]][plugin-repo]\n[![Rating][plugin-rating-svg]][plugin-repo]\n[![Version][plugin-version-svg]][plugin-repo]\n[![Gitter][gitter-svg]][gitter]\n[![codecov](https://codecov.io/gh/JetBrains/ideavim/branch/master/graph/badge.svg)](https://codecov.io/gh/JetBrains/ideavim)\n[![Twitter][twitter-svg]][twitter]\n\nIdeaVim is a Vim engine for JetBrains IDEs.\n\n##### Contact maintainers:\n* [Bug tracker](https://youtrack.jetbrains.com/issues/VIM)\n* [@IdeaVim](https://twitter.com/ideavim) on Twitter\n* [Chat on gitter](https://gitter.im/JetBrains/ideavim)\n* [IdeaVim Channel](https://jb.gg/bi6zp7) on [JetBrains Server](https://discord.gg/jetbrains)\n\n##### Resources:\n\n* [Plugin homepage](https://lp.jetbrains.com/ideavim/)\n* [Plugin on Marketplace](https://plugins.jetbrains.com/plugin/164-ideavim)\n* [Changelog](CHANGES.md)\n* [Continuous integration builds](https://ideavim.teamcity.com/)\n\n#### Compatibility\n\nIntelliJ IDEA, PyCharm, CLion, PhpStorm, WebStorm, RubyMine, DataGrip, GoLand, Rider, Cursive,\nAndroid Studio and other IntelliJ platform based IDEs.\n\nSetup\n------------\n\n- IdeaVim can be installed via `Settings | Plugins`.\nSee the [detailed instructions](https://www.jetbrains.com/help/idea/managing-plugins.html#).\n\n- Use `Tools | Vim` in the menu to enable or disable vim.\n\n- Use the `~/.ideavimrc` file as an analog of `~/.vimrc` ([learn more](#Files)). The XDG standard is supported, as well.\n\n- Shortcut conflicts can be resolved by using:\n     - On Linux \u0026 Windows: `File | Settings | Editor | Vim` \u0026 `File | Settings | Keymap`,\n     - On macOS: `Preferences | Editor | Vim` \u0026 `Preferences | Keymap`,\n     - Regular Vim mappings in the  `~/.ideavimrc` file.\n\nGet Early Access\n-------------------\n\nWould you like to try new features and fixes? Join the Early Access Program and\nreceive EAP builds as updates!  \n\n1. Click the  IdeaVim icon \u003cimg src=\"src/main/resources/META-INF/pluginIcon_noBorders.svg\" width=\"16\" height=\"16\" alt=\"icon\"/\u003e\nin the status bar  | `Early Access Program` | `Subscribe to EAP`\n\n\nOr subscribe to EAP updates manually:\n\n1. Open `Settings | Plugins`\n2. Click the gear icon :gear:, select `Manage Plugin Repositories`, and add the following url:\n```\nhttps://plugins.jetbrains.com/plugins/eap/ideavim\n```\n\nSee [the changelog](CHANGES.md) for the list of unreleased features.\n\nIt is important to distinguish EAP builds from traditional pre-release software.\nPlease note that the quality of EAP versions may at times be way below even\nusual beta standards.\n\nYou can always leave your feedback with:\n* [@IdeaVim](https://twitter.com/ideavim) in Twitter\n* [Bug tracker](https://youtrack.jetbrains.com/issues/VIM)\n\n\nSummary of Supported Vim Features\n---------------------------------\n\nHere are some examples of supported vim features and commands:\n\n* Normal / insert / visual / select / etc. modes\n* Motion / deletion / change / window / etc. commands\n* Key mappings\n* Marks / Macros / Digraphs / Registers\n* Some [set commands](https://github.com/JetBrains/ideavim/wiki/set-commands)\n* Full Vim regexps for search and search/replace\n* Vim web help\n* `~/.ideavimrc` configuration file\n\n[IdeaVim plugins](https://github.com/JetBrains/ideavim/wiki/IdeaVim-Plugins):\n\n* vim-easymotion\n* NERDTree\n* vim-surround\n* vim-multiple-cursors\n* vim-commentary\n* argtextobj.vim\n* vim-textobj-entire\n* ReplaceWithRegister\n* vim-exchange\n* vim-highlightedyank\n* vim-paragraph-motion\n* vim-indent-object\n* match.it  \netc\n\nSee also:\n\n* [Top feature requests and bugs](https://youtrack.jetbrains.com/issues/VIM?q=%23Unresolved+sort+by%3A+votes)\n* [Vimscript support roadmap](vimscript-info/VIMSCRIPT_ROADMAP.md)\n* [List of supported in-build functions](vimscript-info/FUNCTIONS_INFO.MD)\n\nFiles\n-----\n\n* `~/.ideavimrc`\n    * Your IdeaVim-specific Vim initialization commands\n    \n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eExample\u003c/strong\u003e (click to see)\u003c/summary\u003e\n\n```vim\n\"\"\" Map leader to space ---------------------\nlet mapleader=\" \"\n\n\"\"\" Plugins  --------------------------------\nset surround\nset multiple-cursors\nset commentary\nset argtextobj\nset easymotion\nset textobj-entire\nset ReplaceWithRegister\n\n\"\"\" Plugin settings -------------------------\nlet g:argtextobj_pairs=\"[:],(:),\u003c:\u003e\"\n\n\"\"\" Common settings -------------------------\nset showmode\nset so=5\nset incsearch\nset nu\n\n\"\"\" Idea specific settings ------------------\nset ideajoin\nset ideastatusicon=gray\nset idearefactormode=keep\n\n\"\"\" Mappings --------------------------------\nmap \u003cleader\u003ef \u003cPlug\u003e(easymotion-s)\nmap \u003cleader\u003ee \u003cPlug\u003e(easymotion-f)\n\nmap \u003cleader\u003ed \u003cAction\u003e(Debug)\nmap \u003cleader\u003er \u003cAction\u003e(RenameElement)\nmap \u003cleader\u003ec \u003cAction\u003e(Stop)\nmap \u003cleader\u003ez \u003cAction\u003e(ToggleDistractionFreeMode)\n\nmap \u003cleader\u003es \u003cAction\u003e(SelectInProjectView)\nmap \u003cleader\u003ea \u003cAction\u003e(Annotate)\nmap \u003cleader\u003eh \u003cAction\u003e(Vcs.ShowTabbedFileHistory)\nmap \u003cS-Space\u003e \u003cAction\u003e(GotoNextError)\n\nmap \u003cleader\u003eb \u003cAction\u003e(ToggleLineBreakpoint)\nmap \u003cleader\u003eo \u003cAction\u003e(FileStructurePopup)\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eSuggested options\u003c/strong\u003e (click to see)\u003c/summary\u003e\n\nHere is also a list of the suggested options from [defaults.vim](https://github.com/vim/vim/blob/master/runtime/defaults.vim)\n\n```vim\n\" Show a few lines of context around the cursor. Note that this makes the\n\" text scroll if you mouse-click near the start or end of the window.\nset scrolloff=5\n\n\" Do incremental searching.\nset incsearch\n\n\" Don't use Ex mode, use Q for formatting.\nmap Q gq\n```\n\u003c/details\u003e\n\n\nYou can read your `~/.vimrc` file from `~/.ideavimrc` with this command:\n\n    source ~/.vimrc\n\nAlso note that if you have overridden the `user.home` JVM option, this\nwill affect where IdeaVim looks for your `.ideavimrc` file. For example, if you\nhave `-Duser.home=/my/alternate/home` then IdeaVim will source\n`/my/alternate/home/.ideavimrc` instead of `~/.ideavimrc`.\n\nAlternatively, you can set up initialization commands using [XDG](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) standard.\nPut your settings to `$XDG_CONFIG_HOME/ideavim/ideavimrc` file.\n\n\nIdeaVim Plugins\n--------------------\n\nSee [doc/IdeaVim Plugins.md](https://github.com/JetBrains/ideavim/wiki/IdeaVim-Plugins)\n\nExecuting IDE Actions\n---------------------\n\nIdeaVim adds various commands for listing and executing arbitrary IDE actions as\nEx commands or via `:map` command mappings:\n\n### Executing actions:\n* `\u003cAction\u003e({action_id})`\n    * For the mappings you can use a special `\u003cAction\u003e` keyword. Don't forget the parentheses.\n    * E.g. `map gh \u003cAction\u003e(ShowErrorDescription)`  \u003c- execute hover on `gh`.\n    * :warning: Mappings to `\u003cAction\u003e` don't work with `noremap`. \n      If you know the case when it's needed, please [let us know](https://github.com/JetBrains/ideavim#contact-maintainers).\n* `:action {action_id}`\n    * Execute an action by `{action_id}`. Works from Ex command line.\n    * Please don't use `:action` in mappings. Use `\u003cAction\u003e` instead.\n\n### Finding action IDs:\n\n* IJ provides `IdeaVim: track action IDs` command to show the id of the executed actions.\n  This command can be found in \"Search everywhere\" (double `shift`).\n\n    \u003cdetails\u003e\n        \u003csummary\u003e\u003cstrong\u003e\"Track action IDs\" Details\u003c/strong\u003e (click to see)\u003c/summary\u003e\n        \u003cpicture\u003e\n            \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"assets/readme/track_action_dark.gif\"\u003e\n            \u003cimg src=\"assets/readme/track_action_light.gif\" alt=\"track action ids\"/\u003e\n        \u003c/picture\u003e\n    \u003c/details\u003e\n\n\n* `:actionlist [pattern]`\n    * Find IDE actions by id or keymap pattern (E.g. `:actionlist extract`, `:actionlist \u003cC-D`)\n\n##### Examples:\n\n```vim\n\" Map \\r to the Reformat Code action\n:map \\r \u003cAction\u003e(ReformatCode)\n\n\" Map \u003cleader\u003ed to start debug\n:map \u003cleader\u003ed \u003cAction\u003e(Debug)\n\n\" Map \\b to toggle the breakpoint on the current line\n:map \\b \u003cAction\u003e(ToggleLineBreakpoint)\n```\n\n##### Some popular actions:\n\n```\nShowHoverInfo - Quick Documentation and Error Description\nQuickImplementations - Quick Definition\n```\n\nVim Script\n------------\n\nIdeaVim can execute custom scripts that are written with Vim Script.\nAt the moment we support all language features, but not all of the built-in functions and options are supported.\n\nAdditionally, you may be interested in the\n[Vim Script Discussion](https://github.com/JetBrains/ideavim/discussions/357) or\n[Vim Script Roadmap](https://github.com/JetBrains/ideavim/blob/master/vimscript-info/VIMSCRIPT_ROADMAP.md).\n\n\n### IDE specific options\n\nYou can evaluate the `has('ide')` function call and get `1` if it was called with IdeaVim or `0` if the function was called from Vim/NeoVim.  \nThe option `\u0026ide` contains the name and edition of your IDE, for example, \"IntelliJ IDEA Ultimate Edition\".  \nTo see its value for the current IDE you are using, execute the `:echo \u0026ide` command.  \nTo write an IDE-specific configuration, use Vim's regexp match operators `=~?` (case-insensitive) / `=~#`  (case-sensitive)\n\n**Example config:**\n\n```vim\n\" options and mappings that are supported by both Vim and IdeaVim\nset nu\nset relativenumber\n\nif has('ide')\n  \" mappings and options that exist only in IdeaVim\n  map \u003cleader\u003ef \u003cAction\u003e(GotoFile)\n  map \u003cleader\u003eg \u003cAction\u003e(FindInPath)\n  map \u003cleader\u003eb \u003cAction\u003e(Switcher)\n\n  if \u0026ide =~? 'intellij idea'\n    if \u0026ide =~? 'community'\n      \" some mappings and options for IntelliJ IDEA Community Edition\n    elseif \u0026ide =~? 'ultimate'\n      \" some mappings and options for IntelliJ IDEA Ultimate Edition\n    endif\n  elseif \u0026ide =~? 'pycharm'\n    \" PyCharm specific mappings and options\n  endif\nelse\n  \" some mappings for Vim/Neovim\n  nnoremap \u003cleader\u003ef \u003ccmd\u003eTelescope find_files\u003ccr\u003e\nendif\n```\n\n:gem: Contributing\n------------\n\nThe power of contributing drives IdeaVim :muscle:. Even small contributions matter!\n\nSee the contribution guide in [CONTRIBUTING.md](CONTRIBUTING.md) to start bringing your value to the project.\n\n😎 In 2025, we launched a rewards program. See the guide for details.\n\nAuthors\n-------\n\nSee [AUTHORS.md](AUTHORS.md)\nfor a list of authors and contributors.\n\nIdeaVim tips and tricks\n-------\n\n- Use the power of IJ and Vim:\n    - `set ideajoin` to enable join via the IDE. See the [examples](https://jb.gg/f9zji9).\n    - Make sure `ideaput` is enabled for `clipboard` to enable native IJ insertion in Vim.\n    - Sync IJ bookmarks and IdeaVim global marks: `set ideamarks` (works for marks with capital letters only)\n    - Check out more [ex commands](https://github.com/JetBrains/ideavim/wiki/set-commands).\n\n- Use your vim settings with IdeaVim. Put `source ~/.vimrc` in `~/.ideavimrc`.\n- Control the status bar icon via the [`ideastatusicon` option](https://github.com/JetBrains/ideavim/wiki/set-commands).\n- Not familiar with the default behaviour during a refactoring? See the [`idearefactormode` option](https://github.com/JetBrains/ideavim/wiki/set-commands).\n\nSome facts about Vim\n-------\n\nLet’s relax and have some fun now! Here are a few things we've found interesting during development\nand would like to share with you.\n\n- There are no such commands as `dd`, `yy`, or `cc`. For example, `dd` is not a separate command for deleting the line,\nbut a `d` command with a `d` motion.  \nWait, but there isn't a `d` motion in Vim! That’s right, and that’s why Vim has a dedicated set of commands\nfor which it checks whether the \n[command equals to motion](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/normal.c#L6468)\nand if so, it executes `_` motion instead.  \n`_` is an interesting motion that isn't even documented in vi, and it refers to the current line.\nSo, commands like `dd`, `yy`, and similar ones are simply translated to `d_`, `y_`, etc.\n[Here](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/normal.c#L6502)\nis the source of this knowledge.\n\n- `x`, `D`, and `\u0026` are not separate commands either. They are synonyms of `dl`, `d$`, and `:s\\r`, respectively.\n[Here](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/normal.c#L5365)\nis the full list of synonyms.\n\n- You can read a [post](https://github.com/JetBrains/ideavim/wiki/how-many-modes-does-vim-have) about how modes work in Vim and IdeaVim.\n\n- Have you ever used `U` after `dd`? [Don't even try](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/ops.c#L874).\n\n- A lot of variables that refer to visual mode start with two uppercase letters, e.g. `VIsual_active`. [Some examples](https://github.com/vim/vim/blob/master/src/normal.c#L17).\n  As mentioned [here](https://vi.stackexchange.com/a/42885/12441), this was done this way to avoid the clash with X11.\n\n- Other [strange things](https://github.com/vim/vim/blob/759d81549c1340185f0d92524c563bb37697ea88/src/ex_docmd.c#L1845) from vi:\n    * \":3\"       jumps to line 3\n    * \":3|...\"   prints line 3\n    * \":|\"       prints current line\n\n- Vim script doesn't skip white space before comma. `F(a ,b)` =\u003e E475.\n\n- Fancy constants for [undolevels](https://vimhelp.org/options.txt.html#%27undolevels%27):\n  \u003e The local value is set to -123456 when the global value is to be used.\n\n- Vi (not Vim) is a POSIX standard, and [has a spec](https://pubs.opengroup.org/onlinepubs/9699919799/utilities/vi.html)! Vim is mostly POSIX compliant when Vi compatibility is selected with the `'compatible'` option, but there are still some differences that can be changed with `'copoptions'`. The spec is interesting because it documents the behaviour of different commands in a stricter style than the user documentation, describing the current line and column after the command, for example. [More details can be found by reading `:help posix`](https://vimhelp.org/vi_diff.txt.html#posix).\n\n- The Vim documentation contains many easter eggs. We encounter them occasionally, but GitHub user mikesmithgh has compiled a substantial collection [here](https://github.com/mikesmithgh/vimpromptu).\n  - In addition to `:call err_teapot()`, which returns `E418: I'm a teapot`, there is also `:call err_teapot(1)`, which returns `E503: Coffee is currently not available`. Naturally, this is also supported in IdeaVim.\n\n- Insert mode has all `Ctrl` keys mapped, except `Ctrl-B`. In the documentation, it is marked as **\"CTRL-B in Insert\n  mode gone\"**. Call `:h i_CTRL-B-gone` in Vim to read why `Ctrl-B` was removed.\n\nLicense\n-------\n\nIdeaVim is licensed under the MIT license.\n\nThird-party components and licenses are listed in [ThirdPartyLicenses.md](ThirdPartyLicenses.md).\n\nAll releases before 2.0.0 were licensed under terms of GPL-2.0 or later.\nThe last commit before switch to MIT is 05852b07c6090ad40fde7d3cafe0b074604f7ac5.\nYou can read more about the license change here: https://github.com/JetBrains/ideavim/discussions/543\n\n\n\u003c!-- Badges --\u003e\n[jb-official]: https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub\n[jb-official-svg]: https://jb.gg/badges/official.svg\n\n[plugin-repo]: https://plugins.jetbrains.com/plugin/164-ideavim\n[plugin-downloads-svg]: http://img.shields.io/jetbrains/plugin/d/IdeaVIM\n[plugin-rating-svg]: http://img.shields.io/jetbrains/plugin/r/rating/IdeaVIM\n[plugin-version-svg]: https://img.shields.io/jetbrains/plugin/v/ideavim?label=version\n\n[gitter-svg]: https://badges.gitter.im/JetBrains/ideavim.svg\n[gitter]: https://gitter.im/JetBrains/ideavim?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge\n\n[twitter]: https://twitter.com/ideavim\n[twitter-svg]: https://img.shields.io/twitter/follow/ideavim?label=twitter%20%40ideavim\n\n[contributions-welcome-svg]: http://img.shields.io/badge/contributions-welcome-brightgreen\n[contributions-welcome]: https://github.com/JetBrains/ideavim/blob/master/CONTRIBUTING.md\n","funding_links":[],"categories":["Libraries","Kotlin","Navigation","[Productivity](#productivity)","Java","V. Tools for developing"],"sub_categories":["1. IDE"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJetBrains%2Fideavim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FJetBrains%2Fideavim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJetBrains%2Fideavim/lists"}