Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/marcoieni/intellimacs

Spacemacs' like key bindings for IntelliJ platform.
https://github.com/marcoieni/intellimacs

ideavim intellij spacemacs vim

Last synced: 27 days ago
JSON representation

Spacemacs' like key bindings for IntelliJ platform.

Awesome Lists containing this project

README

        

#+TITLE: Intellimacs

[[http://spacemacs.org][file:https://cdn.rawgit.com/syl20bnr/spacemacs/442d025779da2f62fc86c2082703697714db6514/assets/spacemacs-badge.svg]]

[[file:docs/preview.gif]]

* Presentation
This project tries to mimic [[http://spacemacs.org][Spacemacs]] key bindings in IDEs based on the [[https://www.jetbrains.com][IntelliJ]]
platform, i.e. IntelliJ IDEA, PyCharm, CLion, PhpStorm, WebStorm, RubyMine,
AppCode, DataGrip, GoLand, Rider, Cursive, and Android Studio.

For instance, ~SPC f f~ in Spacemacs opens a file, so it makes sense to map it
to the "GotoFile" IntelliJ action.

* How it works
This project can be seen as a set of configuration files for the [[https://plugins.jetbrains.com/plugin/164-ideavim][IdeaVim]] plugin,
which enables vim emulation inside IntelliJ platform.
=~/.ideavimrc= is the file where IdeaVim lets you add Vim initialization
commands, i.e. this file is like =~/.vimrc= for vim.

IdeaVim parses the [[https://github.com/JetBrains/ideavim/blob/master/src/com/maddyhome/idea/vim/package-info.java][most common]] vim commands, together with the custom
=:action {name}= command, used to execute arbitrary IDE actions.
To list all IDE actions use the command =:actionlist [pattern]=.

Intellimacs provides different files, which can be included individually in
your own =.ideavimrc=, in order to get only the functionalities you want.

* Key bindings
Intellimacs is composed of three modules:
- spacemacs :: Contains Spacemacs settings and key bindings
that can be replicated with a similar behaviour in the IntelliJ platform.
- extra :: Contains settings and key bindings not present in
Spacemacs, but that may be useful in the IntelliJ platform.
- major :: Contains key bindings that start with ~SPC m~, that may
or may not be present in some Spacemacs major mode.

Furthermore, Intellimacs provides some of the features of Spacemacs hybrid
mode, which may be enabled by sourcing the file =~/.intellimacs/hybrid.vim=.

Read [[file:docs/KEYBINDINGS.org][KEYBINDINGS.org]] to see all 200+ available key bindings.

* Installation
1. Go to the IDE's plugin manager (File -> Settings -> Plugins) and install
the following plugins:
- [[https://plugins.jetbrains.com/plugin/164-ideavim][IdeaVim]]: vim emulation
- (Optional) [[https://plugins.jetbrains.com/plugin/15976-which-key][Which-Key]]: menu that shows the available commands as you type
2. Clone this repository in your home directory:
#+begin_src sh
git clone https://github.com/MarcoIeni/intellimacs ~/.intellimacs
#+end_src
3. In your home directory, create the file =.ideavimrc= and edit it in order to
include the modules you want by sourcing the relative source files.
In the following there is an example of =.ideavimrc= file that includes all
the functionalities offered by Intellimacs.
In this file you can also include your own vim commands.
#+begin_src vimrc
source ~/.intellimacs/spacemacs.vim

" (Optional) Enable other Intellimacs modules
source ~/.intellimacs/extra.vim
source ~/.intellimacs/major.vim
source ~/.intellimacs/hybrid.vim

" (Optional) Enable which-key plugin
source ~/.intellimacs/which-key.vim

" (Optional) My own vim commands
nnoremap Y y$

" (Optional) Comma for major mode
nmap , m
vmap , m

" (Optional) Add/edit actions
nnoremap gl :action Vcs.Show.Log
vnoremap gl :action Vcs.Show.Log
#+end_src
4. (optional) source your vimrc file by adding the line =source ~/.vimrc= in
=.ideavimrc= (you may break something).

* Update
In order to update run =git pull= inside the intellimacs directory.

Read [[file:docs/CHANGELOG.org][CHANGELOG.org]] to see what changed.

* Suggested plugins
[[file:docs/PLUGINS.org][PLUGINS.org]] contains a list of useful plugins that help to replicate the Spacemacs experience.

* Tips

** Go back to code
The key bindings work only when you are inside the code.
For example, if you are inside the project window they don't work.
Press ~~ to focus the last visited code window and you will be able to
use spacemacs key bindings again.

** Scroll menus without arrow keys
In order to scroll menus without using arrow keys, press ~SPC f e d~ to go to
IDE's settings and set a custom shortcut for the actions =Down= and =Up= in the
menu =Keymap -> Editor Actions=.
For example, you can bind them respectively to =Ctrl + j= and =Ctrl + k=.
If you have some conflicts, search the editor action the key is assigned to,
right click and remove the binding.

** Open a file in Emacs with keyboard shortcut
In order to open a file in Emacs with a keyboard shortcut follow [[https://www.jetbrains.com/help/idea/using-emacs-as-an-external-editor.html][this]] guide.

* Resources
- [[https://github.com/JetBrains/ideavim][IdeaVim]]
- [[https://resources.jetbrains.com/storage/products/intellij-idea/docs/IntelliJIDEA_ReferenceCard.pdf][Intellij default keymap]]
- [[https://www.jetbrains.com/help/idea/sharing-your-ide-settings.html#settings-repository][Share IDE settings]]

* Contributions
Intellimacs needs _you_ to keep it up to date and propose great and useful key
bindings.

Before contributing, be sure to read [[file:docs/CONTRIBUTING.org][CONTRIBUTING.org]] first!

* Related projects
- [[https://github.com/MarcoIeni/spaceclipse][Spaceclipse]] - Spacemacs' like key bindings for Eclipse
- [[https://github.com/SpaceVim/SpaceVim][SpaceVim]] - A community-driven modular vim distribution
- [[https://github.com/VSpaceCode/VSpaceCode][VSpaceCode]] - Spacemacs' like key bindings for Visual Studio Code (thanks for
the inspiration)

* Related projects (No Spacemacs keys)
- [[https://glimpse.ieni.dev][Glimpse]] - Mnemonic key bindings for VSCode commands