"{ Custom key mappings " Save key strokes (now we do not need to press shift to enter command mode). " Vim-sneak has also mapped `;`, so using the below mapping will break the map " used by vim-sneak nnoremap ; : xnoremap ; : " Quicker way to open command window nnoremap q; q: " Turn the word under cursor to upper case inoremap viwUea " Turn the current word into title case inoremap b~lea " Paste non-linewise text above or below current cursor, " see https://stackoverflow.com/a/1346777/6064933 nnoremap p m`op`` nnoremap P m`Op`` " Shortcut for faster save and quit nnoremap w :update " Saves the file if modified and quit nnoremap q :x " Quit all opened buffers nnoremap Q :qa " Navigation in the location and quickfix list nnoremap [l :lpreviouszv nnoremap ]l :lnextzv nnoremap [L :lfirstzv nnoremap ]L :llastzv nnoremap [q :cpreviouszv nnoremap ]q :cnextzv nnoremap [Q :cfirstzv nnoremap ]Q :clastzv " Close location list or quickfix list if they are present, " see https://superuser.com/q/355325/736190 nnoremap \x :windo lclose cclose " Close a buffer and switching to another buffer, do not close the " window, see https://stackoverflow.com/q/4465095/6064933 nnoremap \d :bprevious bdelete # " Insert a blank line below or above current line (do not move the cursor), " see https://stackoverflow.com/a/16136133/6064933 nnoremap oo printf('m`%so``', v:count1) nnoremap OO printf('m`%sO``', v:count1) " Insert a space after current character nnoremap ah " Yank from current cursor position to the end of the line (make it " consistent with the behavior of D, C) nnoremap Y y$ " Move the cursor based on physical lines, not the actual lines. nnoremap j (v:count == 0 ? 'gj' : 'j') nnoremap k (v:count == 0 ? 'gk' : 'k') nnoremap ^ g^ nnoremap 0 g0 " Do not include white space characters when using $ in visual mode, " see https://vi.stackexchange.com/q/12607/15292 xnoremap $ g_ " Jump to matching pairs easily in normal mode nnoremap % " Go to start or end of line easier nnoremap H ^ xnoremap H ^ nnoremap L g_ xnoremap L g_ " Fast window switching, inspiration from " https://stackoverflow.com/a/4373470/6064933 nnoremap h nnoremap l nnoremap j nnoremap k " Continuous visual shifting (does not exit Visual mode), `gv` means " to reselect previous visual area, see https://superuser.com/q/310417/736190 xnoremap < >gv " When completion menu is shown, use to select an item and do not add an " annoying newline. Otherwise, is what it is. For more info , see " https://superuser.com/a/941082/736190 and " https://unix.stackexchange.com/q/162528/221410 " inoremap ((pumvisible())?("\"):("\")) " Use to close auto-completion menu " inoremap ((pumvisible())?("\"):("\")) " Tab-complete, see https://vi.stackexchange.com/q/19675/15292. inoremap pumvisible() ? "\" : "\" inoremap pumvisible() ? "\" : "\" " Edit and reload init.vim quickly nnoremap ev :tabnew $MYVIMRC tcd %:h nnoremap sv :silent update $MYVIMRC source $MYVIMRC \ call v:lua.vim.notify("Nvim config successfully reloaded!", 'info', {'title': 'nvim-config', 'timeout': 2500}) " Reselect the text that has just been pasted, see also https://stackoverflow.com/a/4317090/6064933. nnoremap v printf('`[%s`]', getregtype()[0]) " Search in selected region xnoremap / :call feedkeys('/\%>'.(line("'<")-1).'l\%<'.(line("'>")+1)."l") " Find and replace (like Sublime Text 3) nnoremap :%s/ xnoremap :s/ " Change current working directory locally and print cwd after that, " see https://vim.fandom.com/wiki/Set_working_directory_to_the_current_file nnoremap cd :lcd %:p:h:pwd " Use Esc to quit builtin terminal tnoremap " Toggle spell checking (autosave does not play well with z=, so we disable it " when we are doing spell checking) nnoremap :set spell! :AutoSaveToggle inoremap :set spell! :AutoSaveToggle " Decrease indent level in insert mode with shift+tab inoremap < :call utils#StripTrailingWhitespaces() " check the syntax group of current cursor position nnoremap st :call utils#SynGroup() " Clear highlighting if maparg('', 'n') ==# '' nnoremap :nohlsearch=has('diff')?'diffupdate':'' endif " Copy entire buffer. nnoremap y :%y " Toggle cursor column nnoremap cl :call utils#ToggleCursorCol() " Move current line up and down nnoremap call utils#SwitchLine(line('.'), 'up') nnoremap call utils#SwitchLine(line('.'), 'down') " Move current visual-line selection up and down xnoremap :call utils#MoveSelection('up') xnoremap :call utils#MoveSelection('down') " Replace visual selection with text in register, but not contaminate the " register, see also https://stackoverflow.com/q/10723700/6064933. xnoremap p "_cp nnoremap gb :call buf_utils#GoToBuffer(v:count, 'forward') nnoremap gB :call buf_utils#GoToBuffer(v:count, 'backward') nnoremap h nnoremap l nnoremap k nnoremap j " Text objects for URL xnoremap iu :call text_obj#URL() onoremap iu :call text_obj#URL() " Text objects for entire buffer xnoremap iB :call text_obj#Buffer() onoremap iB :call text_obj#Buffer() " Do not move my cursor when joining lines. nnoremap J mzJ`z " Break inserted text into smaller undo units. for ch in [',', '.', '!', '?', ';', ':'] execute printf('inoremap %s %su', ch, ch) endfor "}