Skip to content

Instantly share code, notes, and snippets.

@johnnymillergh
Last active October 10, 2024 01:05
Show Gist options
  • Save johnnymillergh/a45b557af27fcbf8880172c3ece81726 to your computer and use it in GitHub Desktop.
Save johnnymillergh/a45b557af27fcbf8880172c3ece81726 to your computer and use it in GitHub Desktop.
Vim
" IdeaVim Wiki https://github.com/JetBrains/ideavim/wiki
" Find more examples here: https://jb.gg/share-ideavimrc
" The Essential IdeaVim Remaps https://towardsdatascience.com/the-essential-ideavim-remaps-291d4cd3971b
let mapleader=" "
""" Common settings
set showmode
set scrolloff=5
" Do incremental searching.
set incsearch
set nu
""" Idea specific settings
" Join next line of text with current line with shift + j.
set ideajoin
set clipboard=unnamedplus,unnamed
set keep-english-in-normal
" set ideastrictmode
" Stay in the mode in which the editing started
set idearefactormode=keep
""" Emulated Plugins
" Activate emulated plugin. https://github.com/JetBrains/ideavim/wiki/Emulated-plugins
set surround
set multiple-cursors
set commentary
set argtextobj
set easymotion
set textobj-entire
set ReplaceWithRegister
set exchange
" Trying the new syntax
set highlightedyank
" Activate the plugin: Which-Key
set which-key
set notimeout
" let g:WhichKey_ShowVimActions = "true"
" set timeoutlen=7000
""" Mappings
" Inspired by https://goudham.me/my-second-brain/my-ideavim-config.html
map <leader>F <Plug>(easymotion-s)
map <leader>f <Plug>(easymotion-f)
" Navigate project errors
map [e <Action>(GotoPreviousError)
map ]e <Action>(GotoNextError)
" Navigate git changes
map [c <Action>(VcsShowPrevChangeMarker)
map ]c <Action>(VcsShowNextChangeMarker)
" Navigate methods
map [m <Action>(MethodUp)
map ]m <Action>(MethodDown)
" Tab navigation
map <Tab> <Action>(NextTab)
map <S-Tab> <Action>(PreviousTab)
" LSP stuff
map <leader>oi <Action>(OptimizeImports)
map <leader>fc <Action>(ReformatCode)
map <leader>re <Action>(RenameElement)
map gt <Action>(GotoTest)
map gs <Action>(GotoSuperMethod)
map gi <Action>(GotoImplementation)
" Debugging stuff
map <leader>tb <Action>(ToggleLineBreakpoint)
map <leader>vb <Action>(ViewBreakpoints)
map <leader>cd <Action>(ContextDebug)
map <leader>rc <Action>(RunClass)
map <leader>runconf <Action>(ChooseRunConfiguration)
" Hello terminal :D
map <leader>t <Action>(ActivateTerminalToolWindow)
" Bye bye
map <leader>q <Action>(CloseContent)
map <leader>Q <Action>(CloseAllEditors)
map <leader>h <Action>(HideAllWindows)
" Open ideavimrc
map <leader>; :e ~/.config/ideavim/ideavimrc<CR>
" Zen mode
map <leader>zz <Action>(ToggleZenMode)
" Vim search is simply outclassed here
map / <Action>(Find)
""" Shortcuts handler for conflicts between JetBrains and Vim
sethandler <C-;> a:vim
sethandler <C-S-;> a:vim
sethandler <C-A> a:vim
sethandler <C-C> a:ide
sethandler <C-D> a:ide
sethandler <C-E> a:ide
sethandler <C-F> a:ide
sethandler <C-H> a:vim
sethandler <C-K> a:ide
sethandler <C-L> a:vim
sethandler <C-R> a:vim
sethandler <C-S> a:vim
sethandler <C-T> a:ide
sethandler <C-U> a:vim
sethandler <C-V> a:ide
sethandler <C-W> a:vim
sethandler <C-X> a:ide
sethandler <C-Y> a:ide
" IdeaVim Wiki https://github.com/JetBrains/ideavim/wiki
" Find more examples here: https://jb.gg/share-ideavimrc
" The Essential IdeaVim Remaps https://towardsdatascience.com/the-essential-ideavim-remaps-291d4cd3971b
let mapleader=" "
""" Common settings
set showmode
set scrolloff=5
" Do incremental searching.
set incsearch
set nu
""" Idea specific settings
" Join next line of text with current line with shift + j.
set ideajoin
set clipboard+=unnamedplus
set keep-english-in-normal
" set ideastrictmode
" Stay in the mode in which the editing started
set idearefactormode=keep
""" Emulated Plugins
" Activate emulated plugin. https://github.com/JetBrains/ideavim/wiki/Emulated-plugins
set surround
set multiple-cursors
set commentary
set argtextobj
set easymotion
set textobj-entire
set ReplaceWithRegister
set exchange
" Trying the new syntax
set highlightedyank
" Activate the plugin: Which-Key
set which-key
set notimeout
" let g:WhichKey_ShowVimActions = "true"
" set timeoutlen=7000
""" Mappings
" Inspired by https://goudham.me/my-second-brain/my-ideavim-config.html
map <leader>F <Plug>(easymotion-s)
map <leader>f <Plug>(easymotion-f)
" Navigate project errors
map [e <Action>(GotoPreviousError)
map ]e <Action>(GotoNextError)
" Navigate git changes
map [c <Action>(VcsShowPrevChangeMarker)
map ]c <Action>(VcsShowNextChangeMarker)
" Navigate methods
map [m <Action>(MethodUp)
map ]m <Action>(MethodDown)
" Tab navigation
map <Tab> <Action>(NextTab)
map <S-Tab> <Action>(PreviousTab)
" LSP stuff
map <leader>oi <Action>(OptimizeImports)
map <leader>fc <Action>(ReformatCode)
map <leader>re <Action>(RenameElement)
map gt <Action>(GotoTest)
map gs <Action>(GotoSuperMethod)
map gi <Action>(GotoImplementation)
" Debugging stuff
map <leader>tb <Action>(ToggleLineBreakpoint)
map <leader>vb <Action>(ViewBreakpoints)
map <leader>cd <Action>(ContextDebug)
map <leader>rc <Action>(RunClass)
map <leader>runconf <Action>(ChooseRunConfiguration)
" Hello terminal :D
map <leader>t <Action>(ActivateTerminalToolWindow)
" Bye bye
map <leader>q <Action>(CloseContent)
map <leader>Q <Action>(CloseAllEditors)
map <leader>h <Action>(HideAllWindows)
" Open ideavimrc
map <leader>; :e ~/.config/ideavim/ideavimrc<CR>
" Zen mode
map <leader>zz <Action>(ToggleZenMode)
" Vim search is simply outclassed here
map / <Action>(Find)
""" Shortcuts handler for conflicts between JetBrains and Vim
if has("macunix")
" Configuration options for macOS
echom "macOS system detected"
elseif has("unix")
echom "Unix-like system detected"
" Configuration options for Unix-like systems
elseif has("win32")
echom "Windows system detected"
" Configuration options for Windows
sethandler <C-;> a:vim
sethandler <C-S-;> a:vim
sethandler <C-A> a:vim
sethandler <C-C> a:ide
sethandler <C-D> a:ide
sethandler <C-E> a:ide
sethandler <C-F> a:ide
sethandler <C-H> a:vim
sethandler <C-K> a:ide
sethandler <C-L> a:vim
sethandler <C-R> a:vim
sethandler <C-S> a:vim
sethandler <C-T> a:ide
sethandler <C-U> a:vim
sethandler <C-V> a:ide
sethandler <C-W> a:vim
sethandler <C-X> a:ide
sethandler <C-Y> a:ide
endif

Vim Cheatsheet

Johnny Miller, Sun Oct 2 13:58:53 CST 2022

Vim (/vɪm/; a contraction of Vi IMproved) is a free and open-source, screen-based text editor program. It is an improved clone of Bill Joy's vi.

📖 References

Table of Contents

[TOC]

📚 Glossary

  • Operators let you operate in a range of text (defined by motion). These are performed in normal mode. See more: Motions and operators
  • Text objects let you operate (with an operator) in or around text blocks (objects).

🧭 Navigation

Keystroke(s) Description Note
h j k l Arrow keys (⬅️ ⬇️ ⬆️ ➡️)
b / w Previous/next word
ge / e Previous/next end of word
0 (zero) Start of line
^ Start of line (after whitespace)
$ End of line
gg First line
G Last line
:n Go to line n
nG Go to line n
zz Center this line in editor window
zt Top this line in editor window
zb Bottom this line
H Move to top of screen
M Move to middle of screen
L Move to bottom of screen
/pattern Search for pattern
?pattern Search backward for pattern
n Next matching search pattern
N Previous match
gd Go to definition JetBrains
{ / } Jump to previous/next paragraph Visual mode

📝 Editing

Keystroke(s) Description Note
a Append
A Append from end of line
i Insert
o / O Next line Add blank line below/above current line
J Join next line of text with current line JetBrains plugin: ideajoin
s Delete char and insert
S Delete line and insert
C Delete until end of line and insert
cc Delete whole line and insert
dd Delete line (Cut) The deleted texts will be copied in Vim’s clipboard
2dd Delete 2 lines (Cut)
dw Delete to next word
db Delete to beginning of word
ciw Change (replace) entire word. (Delete current word that pointed by cursor)
cw / ce Change (replace) to the end of the word.
u Undo changes
<C-R> Redo changes <C-R> = ctrl + r
Esc / <C-[> Exit insert mode <C-[> = ctrl + [
<C-C> Exit insert mode (corrupt), and abort current command <C-C> = ctrl + c
< / > Indent right/left Visual mode. Operators
= Autoindent

📋 Clipboard

Keystroke(s) Description Note
x Delete character (Cut) The deleted character will be copied in Vim’s clipboard
dd Delete line (Cut) Copy in Vim’s clipboard
yy Yank line (Copy) Copy in Vim’s clipboard
p Paste from Vim’s clipboard
P Paste before from Vim’s clipboard
"*p / "+p Paste from system clipboard
"*y / "+y Paste to system clipboard

👀 Mode Switching

Keystroke(s) Description Note
v Enter visual mode
V Enter visual line mode
<C-V> Enter visual block mode
a Enter insert node and append text after where cursor is
i Enter insert node and insert text before where cursor is
Esc / <C-[> Exit insert mode <C-[> = ctrl + [

💬 Text Objects

Text objects let you operate (with an operator) in or around text blocks (objects).

v i p
Operator [i]nside or [a]round Text object
Keystroke(s) Description Note
vip Select paragraph
yip Yank inner paragraph
ciw Change (replace) entire word
ggvG Select all text. (Go to top, visual mode, go to bottom)

🏷 Marks

Keystroke(s) Description Note
m{a-z} Set mark {a-z} at cursor position
m{A-Z} A capital mark {A-Z} sets a global mark and will work between files
``{a-zA-Z}` Move cursor to the position where the mark was set
'{a-zA-Z} Move cursor to the start of the line where the mark was set
'' Go back to the previous jump location
:marks List marks
:delmarks {a-zA-Z} Delete specific marks
:delm abc Delete marks a, b and c
:delm! Delete all marks but not marks A-Z

Vimium Cheatsheet

Vimium is a browser extension that provides keyboard-based navigation and control of the web in the spirit of the Vim editor.

📖 References

🧭 Navigation

Keystroke(s) Description Note
? Show the help dialog for a list of all available keys
h j k l Arrow keys (⬅️ ⬇️ ⬆️ ➡️)
gg Scroll to top of the page
G Scroll to bottom of the page
d Scroll down half a page
u Scroll up half a page
f Open a link in the current tab
F Open a link in a new tab
r Reload page
gs View source
i Enter insert mode -- all commands will be ignored until you hit Esc to exit
yy Copy the current url to the clipboard
yf Copy a link url to the clipboard
o Open URL, bookmark, or history entry
O Open URL, bookmark, history entry in a new tab
b Open bookmark
B Open bookmark in a new tab
/ Enter find mode -- type your search query and hit enter to search, or Esc to cancel
n / N Next/previous matching search pattern
H Go back in history
L Go forward in history
J Go one tab left
K Go one tab right
^ Visit the previously-visited tab
t Create new tab
yt Yank (duplicate) current tab
x Close current tab
X Restore closed tab (i.e. unwind the 'x' command)
T Search through your open tabs
W Move current tab to new window
<a-p> Pin/unpin current tab
ge Edit the current URL
gE Edit the current URL and open in a new tab

To activate search completion, type o to activate vomnibar and then type the search completion keyword as defined in settings (such as 'g') and press space.

Keystroke(s) Description Note
w https://www.wikipedia.org/w/index.php?title=Special:Search&search=%s Wikipedia
g https://www.google.com/search?q=%s Google
l https://www.google.com/search?q=%s&btnI I'm feeling lucky...
yt https://www.youtube.com/results?search_query=%s YouTube
gm https://www.google.com/maps?q=%s Google Maps
b https://www.bing.com/search?q=%s Bing
yd https://yandex.com/search/?text=%s Yandex
d https://duckduckgo.com/?q=%s DuckDuckGo
az https://www.amazon.com/s/?field-keywords=%s Amazon
gh https://github.com/search?q=%s GitHub
{
"settingsVersion": "1.67",
"exclusionRules": [
{
"pattern": "https?://mail.google.com/*",
"passKeys": ""
}
],
"filterLinkHints": false,
"waitForEnterForFilteredHints": true,
"hideHud": false,
"keyMappings": "# Insert your preferred key mappings here.\nmap wl closeTabsOnLeft\nmap wr closeTabsOnRight\nmap wo closeOtherTabs",
"linkHintCharacters": "sadfjklewcmpgh",
"linkHintNumbers": "0123456789",
"newTabUrl": "about:newtab",
"nextPatterns": "next,more,newer,>,›,→,»,≫,>>",
"previousPatterns": "prev,previous,back,older,<,‹,←,«,≪,<<",
"regexFindMode": false,
"ignoreKeyboardLayout": false,
"scrollStepSize": 60,
"smoothScroll": true,
"grabBackFocus": false,
"searchEngines": "w: https://www.wikipedia.org/w/index.php?title=Special:Search&search=%s Wikipedia\n\n# More examples.\n#\n# (Vimium supports search completion Wikipedia, as\n# above, and for these.)\n#\ng: https://www.google.com/search?q=%s Google\nl: https://www.google.com/search?q=%s&btnI I'm feeling lucky...\nyt: https://www.youtube.com/results?search_query=%s YouTube\ngm: https://www.google.com/maps?q=%s Google Maps\nb: https://www.bing.com/search?q=%s Bing\nyd: https://yandex.com/search/?text=%s Yandex\nd: https://duckduckgo.com/?q=%s DuckDuckGo\naz: https://www.amazon.com/s/?field-keywords=%s Amazon\nqw: https://www.qwant.com/?q=%s Qwant\ngh: https://github.com/search?q=%s GitHub\nrd: https://www.reddit.com/search/?q=%s Reddit\ndk: https://hub.docker.com/search?q=%s DockerHub",
"searchUrl": "https://www.google.com/search?q=",
"userDefinedLinkHintCss": "/*\nhttps://github.com/dracula/vimium\nDracula theme for Vimium\nby Trollwut ([email protected]). This code is in the public domain.\nTo use:\n 1. Copy the code.\n 2. Go to the Vimium options.\n 3. Click Show Advanced Options.\n 4. Under Advanced Options, scroll down to CSS for link hints.\n 5. Paste the code in the text field.\n 6. Click Save Changes.\n 7. Go to the website of your choice (or, if you have it open already, reload it) and check out the results.\n*/\n\n/* Link hint boxes */\ndiv > .vimiumHintMarker {\n background: #282a36;\n font-size: 12px;\n border: 0.25em solid #ffb86c;\n border-radius: 0.34em;\n box-shadow: 0em 0.1em 0.6em 0.1em rgba(0, 0, 0, 0.4);\n}\n\n/* Link hint text */\ndiv > .vimiumHintMarker span {\n color: #f8f8f2;\n font-size: inherit;\n text-shadow: none;\n}\n\n/* Link hint matching characters */\ndiv > .vimiumHintMarker > .matchingCharacter {\n color: #6272a4;\n}\n\n/* HUD (\"heads-up display\") bar */\ndiv.vimiumHUD {\n background: #282a36;\n border: 1px solid #6272a4;\n}\n\ndiv.vimiumHUD .vimiumHUDSearchArea {\n background: #282a36;\n}\n\ndiv.vimiumHUD .hud-find {\n background: #282a36;\n border: none;\n color: #f8f8f2;\n}\n\ndiv.vimiumHUD span#hud-find-input{\n color: #f8f8f2; /* 'Foreground' color */\n}\n\ndiv.vimiumHUD span#hud-match-count {\n color: #6272a4; /* 'Comment' color */\n}\n\ndiv.vimiumHUD .vimiumHUDSearchAreaInner {\n color: #6272a4; /* 'Comment' color */\n}\n\n#vomnibar{\n background-color: #44475A;\n}\n\n#vomnibar input {\n color: #f8f8f2;\n font: -moz-window;\n /*font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;*/\n font-size: 20px;\n height: 34px;\n margin-bottom: 0;\n padding: 4px;\n background-color: #282a36;\n border-radius: 3px;\n border: 1px solid #6272a4;\n box-shadow: #bd93f9 0px 0px 1px;\n width: 100%;\n outline: none;\n box-sizing: border-box;\n}\n\n#vomnibar .vomnibarSearchArea {\n display: block;\n padding: 10px;\n background-color: #6272a4;\n border-radius: 4px 4px 0 0;\n border-bottom: 0px solid #bd93f9;\n}\n\n#vomnibar ul {\n background-color: #44475a;\n border-radius: 0 0 4px 4px;\n list-style: none;\n padding-top: 0;\n padding-bottom: 0;\n margin-block-start: 2px;\n margin-block-end: 0px;\n}\n\n#vomnibar li {\n border-bottom: 1px solid #6272a4;\n line-height: 1.1em;\n padding: 7px 10px;\n font-size: 16px;\n color: #f8f8f2;\n position: relative;\n display: list-item;\n margin: auto;\n}\n\n#vomnibar li .vomnibarBottomHalf {\n font-size: 15px;\n margin-top: 3px;\n padding: 2px 0;\n}\n\n#vomnibar li .vomnibarSource {\n color: #bd93f9;\n margin-right: 4px;\n}\n#vomnibar li .vomnibarRelevancy {\n position: absolute;\n right: 0;\n top: 0;\n padding: 5px;\n background-color: #282a36;\n color: #f8f8f2;\n font-family: monospace;\n width: 100px;\n overflow: hidden;\n}\n\n#vomnibar li .vomnibarUrl {\n white-space: nowrap;\n color: #50fa7b;\n}\n\n#vomnibar li .vomnibarMatch {\n font-weight: bold;\n color: #ffb86c;\n}\n\n#vomnibar li em, #vomnibar li .vomnibarTitle {\n color: #f8f8f2;\n margin-left: 4px;\n font-weight: normal;\n}\n#vomnibar li em { font-style: italic; }\n#vomnibar li em .vomnibarMatch, #vomnibar li .vomnibarTitle .vomnibarMatch {\n color: #ffb86c;\n}\n\n#vomnibar li.vomnibarSelected {\n background-color: #6272a4;\n font-weight: normal;\n}\n\n#vomnibarInput::selection {\n background-color: #8be9fd;\n}"
}
@itachi-19
Copy link

Thank you for making this. Found it to be really helpful.👍

@SerkanSipahi
Copy link

SerkanSipahi commented Oct 3, 2022

First of all thank you!

What "Shortcuts handler for conflicts between JetBrains and Vim" this does exactly? Which conflicts you are solving with it?
https://gist.github.com/johnnymillergh/a45b557af27fcbf8880172c3ece81726#file-ideavimrc-L31-L49

@johnnymillergh
Copy link
Author

johnnymillergh commented Oct 4, 2022

First of all thank you!

What "Shortcuts handler for conflicts between JetBrains and Vim" this does exactly? Which conflicts you are solving with it? johnnymillergh/a45b557af27fcbf8880172c3ece81726#file-ideavimrc-L31-L49

These are to resolve shortcuts like ctrl + d, which causes conflict on the Windows platform, not on macOS.
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment