Skip to content

vscode extension with neovim text objects + LSP whichkey + touchcursor keyboard layout + minimal zsh/yazi setup (zsh.exe supported) (yazi comes with a neovim IDE)

License

Notifications You must be signed in to change notification settings

YeferYV/RetroNvim

Repository files navigation

demo.mp4

Neovim text objects + LSP whichkey + touchcursor keyboard layout + minimal zsh/yazi setup (zsh.exe supported) (yazi comes with a neovim IDE)



 Install 

 Keyboard-Layout 

 Wiki 

 Dependencies 


Table of Contents
  1. Neovim keymaps
  2. Keybindings.json
  3. Terminal
  4. If Touchcursor Keyboard Layout Started
  5. Installation
  6. Vim Cheatsheets / Tutorials
  7. Related projects

Neovim text object that starts with a/i

text-object keymap requires repeat action key finds and autojumps? text-object name description inner / outer
ia, aa . yes _argument whole argument/parameter of a function outer includes comma
ib, ab . yes _braces find the nearest inside of () [] {} outer includes braces
iB, aB . yes _brackets find the nearest inside of {} :help iB outer includes brackets
ie, ae vscode-neovim . line from start to end of line without beginning whitespaces (line wise) outer includes begining whitespaces
if, af vscode-neovim . yes _function_call like function args but only when a function is called outer includes the function called
ih, ah vscode-neovim . yes _html_attribute attribute in html/xml like href="foobar.com" inner is only the value inside the quotes trailing comma and space
ii, ai . indent_noblanks surrounding lines with same or higher indentation delimited by blanklines outer includes line above
iI, aI vscode-neovim . indent surrounding lines with same or higher indentation outer includes line above and below
ik, ak vscode-neovim . yes _key key of key-value pair, or left side of a assignment outer includes spaces
il, al vscode-neovim . yes +last go to last mini.ai text-object (which start with _) requires i/a example vilk
im, am vscode-neovim . yes _number numbers, similar to <C-a> inner: only pure digits, outer: number including minus sign and decimal point
in, an vscode-neovim . yes +next go to Next mini.ai text-object (which start with _) requires i/a example viNk
io, ao vscode-neovim . yes _whitespaces whitespace beetween characters outer includes surroundings
ip, ap . paragraph blanklines can also be treat as paragraphs when focused on a blankline outer includes below lines
iq, aq . yes _quotes inside of ` ` or ' ' or " " outer includes openning and closing quotes
is, as . sentence sentence delimited by dots of blanklines :help sentence outer includes spaces
it, at . yes _tag inside of a html/jsx tag outer includes openning and closing tags
iu, au vscode-neovim . _subword like iw, but treating -, _, and . as word delimiters and only part of camelCase outer includes trailing _,-, or space
iv, av vscode-neovim . yes _value value of key-value pair, or right side of a assignment outer includes trailing commas or semicolons or spaces
iw, aw . word from cursor to end of word (delimited by punctuation or space) outer includes whitespace ending
iW, aW . WORD from cursor to end of WORD (includes punctuation) outer includes whitespace ending
ix, ax vscode-neovim . yes _Hex hexadecimal number or color outer includes hash #
iy, ay vscode-neovim . same_indent surrounding lines with only same indent (delimited by blankspaces or commented lines) outer includes blankspaces
i?, a? vscode-neovim . yes _user_prompt will ask you for enter the delimiters of a text object (useful for dot repeteability) outer includes surroundings
i(, i), a(, a) . yes ( or ) inside () outer includes surroundings
i[, i], a[, a] . yes [ or ] inside [] outer includes surroundings
i{, i}, a{, a} . yes { or } inside {} outer includes surroundings
i<, i>, a<, a> . yes < or > inside <> outer includes surroundings
i`, a` . yes apostrophe inside ` ` outer includes surroundings
i<punctuation>, a<punctuation> vscode-neovim . yes <punctuation> inside <punctuation><punctuation> outer includes surroundings

Neovim text-object/motions that starts with g

text-object keymap requires mode repeat action key repeat jump key text-object description normal mode operating-pending mode visual mode examples in normal mode
g</g> vscode-neovim n,o,x . prev/next find text-object not required finds and jumps uses selection cg>??? replaces last search with ??? forwardly
g;/g, n go backward/forward in :changes jumps g; go to last change
g. vscode-neovim n,o,x jump to last change jumps won't jump uses selection vg. selects from cursor position until last change
ga vscode-neovim n,x +align followed by textobject/motion uses selected region gaip= or vipga= aligns a paragraph by =
gb vscode-neovim n,x . +blackhole register followed by textobject/motion deletes selection gbip or vipgb deletes a paragraph without copying
gB vscode-neovim n,x . blackhole linewise text-object not required deletes line gB. deletes two lines without saving it in the register
gc n,o,x . +comment (vgc in normal mode will select a block comment) followed by textobject/motion won't jump uses selection gcip or vipgc comments a paragraph
gC vscode-neovim n,o,x . block comment (supports selection vgC or just gC) select text-object under cursor won't jump reselects vgC selects current block of comment
gd n go to definition jumps gd go to definition of word under cursor
gD vscode-neovim x git diff/hunk (vscode selects from cursor position to end of diff) won't jump reselects vgh selects modified code
ge/gE n,o,x previous end of word/WORD (WORD omits punctuation) jumps uses cursor position uses selection vge selects from cursor position until previous end of word
gf n,x go to file under cursor jumps uses selection gf open in a tab the path under cursor
gg/G n,o,x . first/last line jumps uses cursor position uses selection vgg selects until first line
gi n,x last position of cursor in insert mode finds and jumps uses selection vgi selects until last insertion
gj/gk n,o,x . go down/up when wrapped jumps uses cursor position uses selection vgj selects one line down
gJ n,x . join below lines joins uses selection vgJ joins selected lines into one line
gm vscode-neovim n,x +multiply (duplicate text) operator won't jump uses selection gnap or vapgm duplicates paragraph without replacing clipboard
gM n,x go to middle line jumps uses selection vgM selects until middle of the line
gp/gn vscode-neovim n,o,x . ;forward ,backward +prev/+next textobj (only textobj with _ prefix) finds and jumps followed by textobject uses selection vgniq selects from cursor position until next quotation
gpc / gnc vscode-neovim n,o,x . ;forward ,backward previous/next comment finds and jumps jumps uses selection vgnc selects from cursor position until next comment
gpd / gnd vscode-neovim n,o,x . ;forward ,backward previous/next diagnostic finds and jumps jumps uses selection vgnd selects from cursor position until next diagnostic
gpf / gnf vscode-neovim n,o,x . ;forward ,backward previous/next fold (only inside neovim) finds and jumps jumps uses selection vgnf selects from cursor position until next fold
gpH / gnH vscode-neovim n,o,x . ;forward ,backward previous/next git hunk finds and jumps jumps uses selection vgnH selects from cursor position until next git hunk
gpr / gnr vscode-neovim n,o,x . ;forward ,backward previous/next reference (only inside vscode) finds and jumps jumps uses selection vgnr selects from cursor position until next reference
gq n,x . +format selection/comments 80chars (LSP overrides it) requires a textobject applies to selection gqip or vipgq formats a paragraph
gr vscode-neovim n,x . +replace (with register) operator followed by text-object/motion applies to selection griw or viwgr replaces word with register (yanked text)
gs vscode-neovim n,x . +sort Operator followed by text-object/motion uses selection gsip or vipgs sorts a paragraph
gS vscode-neovim n,x . split/join arguments toggles inside {},[],() followed by operator vipgS joins selected lines in one line
gt/gT vscode-neovim n,x . ;ending ,beginning +go to end/start of textobj followed by text-object selects form cursor position vgtiq selects until end of quotation
gu/gU n,x . +to lowercase/uppercase requires a text-object applies to selection guip or vipgu lowercases a paragraph
gv n,x last selected finds and jumps reselects vgv selects last selection
gw n,x . split/join comments/lines 80chars (keeps cursor position) requires a text-object applies to selection gwip or vipgw split/join a paragraph limited by 80 characters
gx vscode-neovim n,x . +exchange (text) Operator followed by text-object/motion uses selection gxiw or viwgx exchanges word with another gxiw or viwgx or .
gy/gY vscode-neovim n . redo register (dot to paste forward/bacward) paste gy..... paste deleted lines by history
g-/g+ vscode-neovim n,x . decrement/increment number selects number under cursor uses selected number g+.. or 3g+ increments by 3
g<Up>/g<Down> vscode-neovim n,x numbers ascending/descending selects number under cursor uses selected number g<Up> increases selected numbers ascendingly
= n,x . +autoindent followed by text-object uses selection == autoindents line
</> n,x . +indent left/right followed by text-object uses selection << indents to left a line
0/$ n,o,x . start/end of line jumps uses selection d$j. deletes two end-of-lines
^ n,o,x . start of line (non-blankline) jumps uses selection d^ deletes until start of line (after whitespace)
% n,o,x matching character: '()', '{}', '[]' finds and jumps finds and jumps d% deletes until bracket
(/) n,o,x . prev/next sentence jumps uses selection d(. deletes until start of sentence (two times)
{/} n,o,x . prev/next empty line (before a paragraph) jumps uses selection d{. deletes until next empty line (two times)
[[/]] n,o,x . prev/next section jumps uses selection d[[ deletes until start of section
b/w n,o,x . prev/next word jumps uses selection db deletes until start of word
B/W n,o,x . prev/next WORD jumps uses selection dW. deletes 2 WORDS
e/E n,o,x . end of word/WORD jumps uses selection de deletes until end of word
f cvim n,o,x . search with labels like flash.nvim jumps uses selection f??? then press the label
f/F n,o,x . ;forward ,backward move to next/prev char (f to repeat_jump on vscode-neovim) jumps uses selection df, deletes until a next ,
t/T n,o,x . ;forward ,backward move before next/prev char (f to repeat_jump on vscode-neovim) jumps uses selection dt, deletes before next ,
s o . surround (only on vscodevim) uses cursor position ysiw" or viwS" adds " to word, ds" deletes ", cs"' replaces "
s vscode-neovim n,x . +surround (followed by a=add, d=delete, r=replace) followed by textobject/motion (only add) uses selection (only add) saiw" or viwsa" adds " to word, sd" deletes ", sr"' replaces "
U n,x U whichkey.repeatMostRecent (inside neovim repeats :<command>) <s-space>gjUUUUU repeats go to next git-change
Y n,x yank until end of line uses selection v^Y yanks line
<space><space>p vscode-neovim n,x . Paste after (secondary clipboard) uses selection viw<space><space>p replaces word with a second clipboard
<space><space>P vscode-neovim n,x . Paste before (secondary clipboard) uses selection viw<space><space>P replaces word with a second clipboard
<space><space>y vscode-neovim n,x yank (secondary clipboard) uses selection viw<space><space>y yanks word using the second clipboard
<space><space>Y vscode-neovim n,x yank until end of line (secondary clipboard) uses selection v<space><space>Y yanks until end of line using the second clipboard
<space><space>j vscode-neovim n,x,o ;forward ,backward prev ColumnMove jumps uses selection v<space><space>j selects until start of column
<space><space>k vscode-neovim n,x,o ;forward ,backward next ColumnMove jumps uses selection v<space><space>k selects until end of coumn
<space>o n focus file explorer jumps <space>o focus explorer when normal mode

Native neovim ctrl keys

Key Combination mode Description
ctrl+a n,v increase number under cursor
ctrl+c v stops selection
ctrl+d n,v scroll down by half page
ctrl+e n,v scroll down by line
ctrl+i n jump to next in :jumps
ctrl+o n jump to previous in :jumps
ctrl+r n redo (u to undo)
ctrl+s n,v replace text (using sed syntax)(only replaces selected region on visual mode)(neovim only)
ctrl+u n,v scroll up by half page
ctrl+v n,v visual block mode
ctrl+w n,v See vscode-window-commands.vim
ctrl+x n,v decrease number under cursor
ctrl+y n,v scroll up by line
ctrl+/ n,v comment line (only inside vscode)

File Explorer keymaps

Key Combination Description
a Create new file or folder (path/to/file creates 2 folders and 1 file)
d delete file
gg focus first file
G focus last file
h Collapse list
j Move down
k Move up
l or enter open directory/file passing focus
o or space open without passing focus replacing current tab
O open without passing focus in a new tab
p paste file
q close sidebar visibility
r Rename file
v Open selected file to the side and toggle sidebar visibility
V Open selected file to the bottom and toggle sidebar visibility
x cut file
y copy file
/ search
Down Focus down and preview file
Up Focus up and preview file
shift+j Move focus down 10 times in list view
shift+k Move focus up 10 times in list view
shift+l Open and toggle sidebar visibility
<unmapped letter> find (by first <unmapped letter> of file/folder) and jump

Editor keymaps (keybindings.json)

Key Combination mode Description
ctrl+\ n,i Toggle panel (terminal) visibility
escape n clear search highlight
shift+space n Show whichkey menu (Windows, Linux, Mac)
alt+space n Show whichkey menu (Linux, Mac)
alt+c i Copy
alt+v i Paste
jk i enter vim normal mode
alt+h i,x enter vim normal mode
alt+h or shift+h n cursorLeft 10 times
alt+j or shift+j n cursorDown 10 times
alt+k or shift+k n cursorUp 10 times
alt+l or shift+l n cursorRigth 10 times
alt+v n Type V
alt+s or left n Go to previous editor
alt+f or right n Go to next editor
alt+left or alt+down n Decrease view size of current window or terminal
alt+right or alt+up n Increase view size of current window or terminal
ctrl+h n Navigate to left window
ctrl+j n Navigate to down window
ctrl+k n Navigate to up window
ctrl+l n Navigate to right window
shift+q n Close active editor
shift+r n Format and save
ctrl+alt+left n,i,x select left word (on multi cursor)
ctrl+alt+right n,i,x select right word (on multi cursor)
<ctr+x><ctrl+o> i to expand emmet-ls (neovim only)

Suggestion keymaps

Key Combination mode Description
ctrl+space i Toggle suggestion widget
ctrl+shift+space i Toggle suggestion details (when inside widget)
ctrl+shift+space i Toggle parameter hints (when inside parameters)
ctrl+h i Toggle suggestion focus (when inside widget)
ctrl+d i Select next page (when inside suggestion details)
ctrl+u i Select prev page (when inside suggestion details)
ctrl+j i Select next suggestion
ctrl+k i Select prev suggestion
ctrl+l i Accept selected suggestion
tab i go to next snippet stop or next suggestion
shift+tab i go to prev snippet stop or prev suggestion
alt+] i Show next inline suggestion
alt+[ i Show previous inline suggestion
alt+j i inline suggestion accept next word
alt+k i inline suggestion accept next line
alt+l i Commit inline suggestion
alt+. i expand snippet (neovim only)
alt+; i next snippet stop (neovim only)
alt+, i previous snippet stop (neovim only)
ctrl+c i exit snippet session (neovim only)

Terminal keymaps

Key Combination Description
alt+c Copy selection in terminal
alt+v Paste in terminal
alt+y send sequence to open yazi
alt+shift+d Scroll terminal to next command
alt+shift+e Scroll terminal to previous command
alt+e Scroll terminal up
alt+d Scroll terminal down
alt+q Scroll terminal up by page
alt+a Scroll terminal down by page
alt+t Scroll terminal to top
alt+g Scroll terminal to bottom
alt+ctrl+r select from shell history
Up prev shell history (shell builtin)
Down next shell history (shell builtin)
ctrl+d exit signal (shell builtin)
ctrl+c cancel signal (shell builtin)
ctrl+r search shell history (shell builtin)
ctrl+backspace delete word (shell builtin)
Home jump to start of line (powershelll and bash only)
End jump to end of line (powershelll and bash only)
ctrl+left jump backward word (powershelll and bash only)
ctrl+right jump forward word (powershelll and bash only)
ctrl+alt+shift+? show shortcuts (powershelll only)
bind -P show shortcuts (bash only, emacs keybindings by default)

zsh keymaps

keymap description
<tab> show (dash/path) options or complete path
<tab><tab> enter completion menu
<esc><esc> tmux-copy-mode-like / normal-mode (inside neovim terminal)
vi<enter> open retronvim's neovim IDE (<space> to open whichkey)
y<enter> open yazi (changes directory on exit)
alt+o open yazi (even while writing commands)
alt+h or <esc> enter vim-mode
alt+j previous history and enter vim-mode
alt+k next history and enter vim-mode
alt+l complete suggestion and enter vim-mode
ctrl+r search history with fzf
ctrl+l clear screen
ctrl+alt+l clear screen (inside neovim terminal)

If Touchcursor Keyboard Layout Started

layer qwerty

@grl 1    2    3    4    5    6    7    8    9    0    -    =    bspc
tab  q    w    e    r    t    y    u    i    o    p    [    ]    \
@cap a    s    d    f    g    h    j    k    l    ;    '    ret
lsft z    x    c    v    b    n    m    ,    .    /    rsft
lctl lmet @alt           @spc           @sft rmet rctl

layer touchcursor (press and hold space to enter the layer)

_    f1   f2   f3   f4   f5   f6   f7   f8   f9   f10  f11  f12  _
_    @¿   _    _    _    @m🡠  @M↓  @m↓  @m↑  @M↑  @m🡪  _    _    _
_    del  spc  bspc @clr _    @🡠   @↓   @↑   @🡪   @yaz _    _
_    @ñ   _    caps _    _    pgup home end  pgdn _    _
_    _    _              _              _    _    _
key description example / keymap
@grl tap: backtick/grave, hold and press 1 = qwerty layer, hold and press 2 = dvorak layer `+2 = dvorak
@cap tap for escape, hold for LeftCtrl cap+l = ctrl+l
@sft tap for backspace, hold for LeftShift RAlt+l = shift+l
@alt tap for middle click, hold for LeftAlt LAlt+l = LAlt+l
@spc tap for space, hold for touchcursor layer, release for qwerty layer space+jj = DownArrow + DownArrow
@yaz open yazi_cd on any shell space+;
@clr clear screen on any shell space+f
@¿ unicode ¿ space+q
unicode ñ space+z
@m🡠 mouse scrolling left space+t
@m🡪 mouse scrolling right space+p
@m↑ mouse scrolling up space+i
@m↓ mouse scrolling down space+u
@M↑ mouse fast scrolling up space+y
@M↓ mouse fast scrolling down space+p
spc space key space+s
bspc backspace key space+d
home home key space+m
end end key space+,
pgup pageup key space+n
pgdn pagedown key space+.
@🡠 left arrow key space+h
@↓ down arrow key space+j
@↑ up arrow key space+k
@🡪 right arrow key space+l
caps toggles capslock space+c

Installation

  • On Windows 10/11 before installing retronvim extension you need to enable Developer Mode to be able to create the ~/.vscode/extensions/yeferyv.retronvim symlink. Go to Settings > System > For Developers > Developer Mode > On and relaunch vscode

    https://neacsu.net/posts/win_symlinks
  • RetroNvim installs cvim a vscodevim fork with flash.nvim support and whichkey a menu for keymaps vscode extensions as optional dependencies

  • some text-objects requires install vscode-neovim (tested on vscode-neovim version v1.18.17, neovim version v0.11.0 and retronvim version v0.3.0, future versions may be incompatible with retronvim's init.lua file) and uninstall/disable cvim extension, you may need to relaunch vscode, alternatively use nvim -u ~/.vscode/extensions/yeferyv.retronvim/nvim/init.lua a neovim IDE used inside yazi

Manual Install

  • Linux/MacOS:

    curl -L pixi.sh/install.sh | bash
    source ~/.zshrc
    pixi global install git nodejs nvim yazi
    git clone --recursive https://github.com/yeferyv/retronvim
    cd retronvim
    npx vsce package --out retronvim.vsix
    code --install-extension retronvim.vsix

    Windows 10/11:

    winget install git.git openjs.nodejs neovim.neovim sxyazi.yazi microsoft.vcredist.2015+.x64 # microsoft.visualstudiocode # then relaunch terminal
    git clone --recursive https://github.com/yeferyv/retronvim
    cd retronvim
    npx vsce package --out retronvim.vsix
    code --install-extension retronvim.vsix

VSCode Marketplace

Trobleshotting

  • remove the ~/.vscode/extensions/yeferyv.retronvim symlink and relaunch vscode
  • remove vscode-neovim.neovimExecutablePaths.linux vscode-neovim.neovimExecutablePaths.win32 vscode-neovim.neovimExecutablePaths.darwin from settings.json and relaunch vscode
  • remove terminal.integrated.env.linux terminal.integrated.env.osx terminal.integrated.env.windows from settings.json and relaunch vscode
  • open vscode command palette and type: Output: Show Output Channels > vscode-neovim logs

Terminal dependencies (optional)

  • To install terminal dependencies after installing retronvim extension, open whichkey > +Install Dependencies > install <your package manager> > <your package manager> install lazygit startship zsh > relaunch vscode

Vim Cheatsheets / Tutorials

Related projects

About

vscode extension with neovim text objects + LSP whichkey + touchcursor keyboard layout + minimal zsh/yazi setup (zsh.exe supported) (yazi comes with a neovim IDE)

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •