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

https://github.com/milanglacier/nvim


https://github.com/milanglacier/nvim

Last synced: 6 months ago
JSON representation

Awesome Lists containing this project

README

          

- [Features](#features)
- [Modern Devtools Integration](#modern-devtools-integration)
- [Powerful Text Edit Plugins](#powerful-text-edit-plugins)
- [Tailored for Data Science](#tailored-for-data-science)
- [Seamless Integration with Vscode](#seamless-integration-with-vscode)
- [Be Wild](#be-wild)
- [Showcase](#showcase)
- [Dependencies](#dependencies)
- [python deps](#python-deps)
- [r deps](#r-deps)
- [lua deps](#lua-deps)
- [vimscript deps](#vimscript-deps)
- [markdown deps](#markdown-deps)
- [sql deps](#sql-deps)
- [bash deps](#bash-deps)
- [latex deps](#latex-deps)
- [cpp deps](#cpp-deps)
- [general purpose deps](#general-purpose-deps)
- [Keymaps](#keymaps)
- [Builtin keymaps](#builtin-keymaps)
- [Builtin movement keymaps](#builtin-movement-keymaps)
- [Builtin window keymaps](#builtin-window-keymaps)
- [Builtin tab keymaps](#builtin-tab-keymaps)
- [Builtin buffer keymaps](#builtin-buffer-keymaps)
- [Builtin navigation keymaps](#builtin-navigation-keymaps)
- [Builtin miscellenous keymaps](#builtin-miscellenous-keymaps)
- [UI keymaps](#ui-keymaps)
- [Pretty quickfix list keymaps](#pretty-quickfix-list-keymaps)
- [Utils keymaps](#utils-keymaps)
- [File explorer keymaps](#file-explorer-keymaps)
- [Window layout keymaps](#window-layout-keymaps)
- [Text Edit keymaps](#text-edit-keymaps)
- [Align text keymaps](#align-text-keymaps)
- [Comment keymaps](#comment-keymaps)
- [Text objects for functions keymaps](#text-objects-for-functions-keymaps)
- [Quick navigation keymaps](#quick-navigation-keymaps)
- [Text objects enhancement keymaps](#text-objects-enhancement-keymaps)
- [Block text movement](#block-text-movement)
- [Surround pairs keymaps](#surround-pairs-keymaps)
- [substitution keymaps](#substitution-keymaps)
- [Other text objects keymaps](#other-text-objects-keymaps)
- [Integration with other tools](#integration-with-other-tools)
- [Terminal emulator keymaps](#terminal-emulator-keymaps)
- [Git keymaps](#git-keymaps)
- [Search and Replace keymaps](#search-and-replace-keymaps)
- [Minuet keymaps](#minuet-keymaps)
- [REPL keymaps](#repl-keymaps)
- [Treesitter keymaps](#treesitter-keymaps)
- [Syntax based text objects keymaps](#syntax-based-text-objects-keymaps)
- [Syntaxa based navigations keymaps](#syntaxa-based-navigations-keymaps)
- [Miscellenous](#miscellenous)
- [Searcher keymaps](#searcher-keymaps)
- [Language Server Protocol keymaps](#language-server-protocol-keymaps)
- [Autocompletion keymaps](#autocompletion-keymaps)
- [Debugger Adapter Protocol keymaps](#debugger-adapter-protocol-keymaps)
- [orgmode keymaps](#orgmode-keymaps)
- [Filetype Specific Keymaps](#filetype-specific-keymaps)
- [R keymaps](#r-keymaps)
- [Builtin keymaps for R](#builtin-keymaps-for-r)
- [REPL keymaps for R](#repl-keymaps-for-r)
- [Python keymaps](#python-keymaps)
- [Builtin keymaps for Python](#builtin-keymaps-for-python)
- [REPL keymaps for Python](#repl-keymaps-for-python)
- [Edit string codeblock](#edit-string-codeblock)
- [Rmarkdown keymaps](#rmarkdown-keymaps)
- [Builtin keymaps for Rmarkdown](#builtin-keymaps-for-rmarkdown)
- [Text objects keymaps for Rmarkdown](#text-objects-keymaps-for-rmarkdown)
- [Rmarkdown preview keymaps](#rmarkdown-preview-keymaps)
- [Markdown keymaps](#markdown-keymaps)
- [Latex keymaps](#latex-keymaps)
- [Dist Module](#dist-module)
- [Patches Module](#patches-module)
- [Other Notes](#other-notes)
- [Discussion](#discussion)

# Features

## Modern Devtools Integration

Built on modern devtools including LSP and treesitter. Treesitter delivers
AST-level highlighting, text objects, and navigations, while LSP offers features
like auto completion, go to definition and reference, and code diagnostics. By
harnessing the power of both Ctags and LSP, this configuration brings a harmonic
blend of old-school and modern development tools.

## Powerful Text Edit Plugins

Vim's exceptional text editing capabilities are further amplified by a host of
powerful plugins focusing on text editing. (Remember it is pure text editing
makes vim vim.)

## Tailored for Data Science

This configuration is specifically tailored toward data science toolsets,
including python, R, SQL, Latex, rmarkdown, and quarto.

## Seamless Integration with Vscode

Curated configuration working together with vscode thanks to
[vscode-neovim](https://github.com/vscode-neovim/vscode-neovim). Access all the
familiar neovim keybindings, including translations of equivalent commands in
vscode, even when working with complex graphical content like Jupyter notebooks.
And many neovim plugins, such as treesitter, can be embedded seamlessly in
vscode, allowing for a smooth and uninterrupted workflow.

**NOTE**: If you plan to use this configuration with `vscode-neovim`, please use
the [forked repo](https://github.com/milanglacier/vscode-neovim) as I decided to
maintain the two configs separately. If you wish to use neovim both in the
terminal and in vscode, we suggest creating two folders in `~/.config` or your
specified `$XDG_CONFIG` path. One is `~/.config/nvim`, which uses the default
configuration in the `master` branch, and the other is
`~/.config/vscode-neovim`, which uses the configuration in the `vscode` branch.
This takes advantage of the `NVIM_APPNAME` feature in `nvim 0.9`. Refer to the
vscode-neovim repo for further details.

Then, Set `vscode-neovim.NVIM_APPNAME` to `vscode-neovim` in vscode settings.

## Be Wild

Randomly select a theme from a curated list each time you start up and
automatically switches between day and night themes at scheduled time.
Additionally, the displayed verses on the welcome screen is also randomized with
each launch. With neovim, you can have a fresh experience every time. Be casual
and wild!

# Showcase

![welcome-screen](assets/welcome-screen.png)

- The welcome screen displays two verses randomly selected from my curated
collection. You can select new verses and color schemes at random or access
frequently used commands from this screen.

![lsp](./assets/lsp-ctags.png)

- This screenshot showcases writing Lua code with smart autocompletion through
both language server (LSP) and universal-ctags (ctags). This combination
seamlessly blends old-school and modern tools. The bottom window shows the
occurrence of referenced symbols that you specify (via `lsp find references`),
while the right window shows the symbol outline of the current file (via
`lsp document symbols`).

![literate-programming](./assets/literate-programming.png)

- This screenshot demonstrates the use of literate programming in neovim, which
is highly beneficial for data science workflows. You can write code in both
Python and R with intelligent autocompletion from both LSP and Ctags in quarto
or markdown files. Moreover, you can send your code to both R and Python REPL
simultaneously.

![dap](./assets/dap-python.png)

- This screenshot demonstrates how to debug Python program in neovim. Stepping
through the code and watching variables and stack frames, just like in vscode.

# Dependencies

You are responsible for installing the dependencies, but most of them are
optional. They consist mainly of language servers and linters that correspond to
their respective languages. You can choose the ones you need and leave out the
others. Even if certain dependencies are absent, neovim will still operate and
display notifications instead of halting completely.

If your system lacks a proper package manager, such as with Windows, or if the
packages are out of date, as with Debian, you can use `Mason.nvim`, a neovim
plugin specifically to install some of the dependencies. Dependencies marked
with a `*` can be installed through `Mason.nvim`. To install these packages
within neovim, enter `:Mason` in the prompt, and a popup window will appear with
the intuitive interface of `Mason`. From there, you can easily install packages.

This configuration has an optional dependency `efm-langserver`, which can be
installed via `mason`. However, it needs to be separately configured outside of
neovim. An example configuration for `efm` is provided in the `dist` folder. To
use this example configuration, simply copy the folder to `~/.config/`.

## general purpose deps

1. `universal-ctags`
2. A C compiler. Required to install treesitter parsers.
3. `lazygit`: this is only required if want to use `lazygit` in neovim (which is
binded to `og`).
4. `fzf`: this is only required if you are using `fzf-lua` as your fuzzy finder.
You don't need it you are using `telescope`.
5. `ripgrep`

## python deps

1. `python`.
2. `debugpy`: this module should be included by the `python` at the top of your
`$PATH`.
3. `ipython`
4. `black*`
5. `efm-langserver*`
6. `basedpyright*`

## r deps

1. `r-language-server`: this is a R package that should be installed by the `r`
at the top of your `$PATH`
2. `radian`

## lua deps

1. `lua-language-server*`
2. `stylua*`
3. `selene*`
4. `efm-langserver*`

## vimscript deps

1. `vim-language-server*`

## markdown deps

1. `prettierd*`
2. `efm-langserver*`

## sql deps

1. `sqls*`
2. `sql-formatter*`

## bash deps

1. `bash-language-server*`
2. `shellcheck*`

## latex deps

1. `texlab*`
2. `latexindent*`: while this package is shipped with `texlive`, `perl` shipped
by macOS cannot run this program, so I use a `homebrew` installed
`latexindent` instead.

## cpp deps

1. `clangd*`: Apple's `xcode` command line tools ship this for you.

# Keymaps

NOTE: this only includes keymaps defined by myself, and some of the default
plugins keymaps that I used frequently.

The `` key is ``, the `` key is `` or
``.

In case you forget the keymaps you can always use `fk`
(`:FzfLua keymaps` or `:Telescope keymaps`) to find all keymaps.

## Builtin keymaps

### Builtin movement keymaps

| Mode | LHS | RHS/Functionality |
| ---- | ------------ | --------------------------------- |
| ic | `` | `` |
| ic | `` | `` |
| ic | `` | `` |
| ic | `` | `` |
| ic | `` | Go to Beginning of the line |
| ic | `` | Go to end of the line |
| ic | `` | `` |
| ic | `` | Del chars from cursor to line end |
| ic | `` | Delete a char forwardly |
| c | `` | Move cursor to next word |
| c | `` | Move cursor to previous word |
| it | `jk` | Switch to normal mode |
| i | `` | Tag completion |
| i | `` | File completion |
| i | `` | Document word completion |

### Builtin window keymaps

| Mode | LHS | RHS/Functionality |
| ---- | ------------- | ------------------------------------ |
| n | `` | Move current win to prev tab |
| n | `` | Move current win to next tab |
| n | `` | Go to next win |
| n | `` | Go to Prev win |
| n | `` | Move this win to new tab |
| n | `` | Del this win |
| n | `` | Vertically split current win |
| n | `` | Horizontally split current win |
| n | `` | Go to win to the left |
| n | `` | Go to win to the below |
| n | `` | Go to win to the above |
| n | `` | Go to win to the right |
| n | `` | Move current win to the left |
| n | `` | Move current win to the below |
| n | `` | Move current win to the above |
| n | `` | Move current win to the right |
| n | `` | Make current win the only win |
| n | `` | Balance the win height/width |
| n | `` | Maximize current win's width |
| n | `` | Maximize current win's height |
| n | `` | Decrease current win's width |
| n | `>` | Increase current win's width |
| n | `` | Increase current win's height |
| n | `` | Decrease current win's height |
| n | `` | Downward scroll the float win |
| n | `` | Upward scroll the float win |
| n | `wf` | Move current win to prev tab |
| n | `wb` | Move current win to next tab |
| n | `ww` | Go to next win |
| n | `wp` | Go to Prev win |
| n | `wT` | Move this win to new tab |
| n | `wq` | Del this win |
| n | `wv` | Vertically split current win |
| n | `ws` | Horizontally split current win |
| n | `wh` | Go to win to the left |
| n | `wj` | Go to win to the below |
| n | `wk` | Go to win to the above |
| n | `wl` | Go to win to the right |
| n | `wH` | Move current win to the left |
| n | `wJ` | Move current win to the below |
| n | `wK` | Move current win to the above |
| n | `wL` | Move current win to the right |
| n | `wo` | Make current win the only win |
| n | `w=` | Balance the win height/width |
| n | `w]` | Downward scroll the float win |
| n | `w[` | Upward scroll the float win |
| n | `w\|` | Maximize current win's width |
| n | `w_` | Maximize current win's height |
| n | `w]` | Jump to `tags` in a new window |
| n | `wg]` | Select a tag to jump in a new window |

### Builtin tab keymaps

| Mode | LHS | RHS/Functionality |
| ---- | ---------------- | -------------------------------- |
| n | `[` | Go to next tab |
| n | `]` | Go to prev tab |
| n | `n` | Create a new tab |
| n | `c` | Close current tab |
| n | `o` | Close other tabs except this one |
| n | `h` | Move tab to the left |
| n | `l` | Move tab to the right |
| n | `1` | Go to 1st tab |
| n | `2` | Go to 2nd tab |
| n | `3` | Go to 3rd tab |
| n | `4` | Go to 4th tab |
| n | `5` | Go to 5th tab |
| n | `6` | Go to 6th tab |
| n | `7` | Go to 7th tab |
| n | `8` | Go to 8th tab |
| n | `9` | Go to 9th tab |

### Builtin buffer keymaps

| Mode | LHS | RHS/Functionality |
| ---- | ------------ | ---------------------- |
| n | `bd` | Delete current buffer |
| n | `bw` | Wipeout current buffer |
| n | `bp` | Prev buffer |
| n | `bn` | Next buffer |

### Builtin navigation keymaps

| Mode | LHS | RHS/Functionality |
| ---- | ---- | --------------------------------------------------------- |
| n | `]b` | Next buffer |
| n | `[b` | Previous buffer |
| n | `]q` | Next quickfix list entry |
| n | `[q` | Prev quickfix list entry |
| n | `]Q` | Set current quickfix list as newer one in qflist history |
| n | `[Q` | Set current quickfix list as older one in qflist history |
| n | `]t` | Go to next tag location for currently searched symbol |
| n | `[t` | Go to previous tag location for currently searched symbol |

## Builtin miscellenous keymaps

| Mode | LHS | RHS/Functionality |
| ---- | ------------- | ------------------------------------------------------ |
| n | `` | `` |
| n | `mt` | search current word from tags file and send to loclist |
| n | `mdc` | Set working dir as current file's dir |
| n | `mdu` | Set working dir up one level from current working dir |
| n | `mc` | Pick a color scheme |
| n | `th` | Toggle highlight serach (see `:h hlsearch`) |
| n | `tn` | Toggle display line number |
| n | `tH` | Toggle cmdheight between 0 or 1 (see `:h cmdheight`) |
| n | `tw` | Toggle wrap (see `:h wrap`) |
| n | `tc` | set `conceallevel` between 0 and 2 (see `:h wrap`) |

## UI keymaps

### Pretty quickfix list keymaps

The following keymaps rely on
[Trouble.nvim](https://github.com/folke/trouble.nvim.git)

| Mode | LHS | RHS/Functionality |
| ---- | ------------ | --------------------------------------------------- |
| n | `xw` | Toggle display of workspace diagnostics via Trouble |
| n | `xd` | Toggle display of document diagnostics via Trouble |
| n | `xl` | Toggle display of loclist via Trouble |
| n | `xq` | Toggle display of quickfix list via Trouble |
| n | `xr` | Toggle display of lsp references via Trouble |

## Utils keymaps

### File explorer keymaps

The following keymaps rely on
[neo-tree.nvim](https://github.com/nvim-neo-tree/neo-tree.nvim)

| Mode | LHS | RHS/Functionality |
| ---- | ------------ | -------------------------------------- |
| n | `et` | Toggle file explorer via NeoTree |
| n | `et` | Toggle git status explorer via NeoTree |

### Window layout keymaps

The following keymaps rely on
[winshift.nvim](https://github.com/sindrets/winshift.nvim)

| Mode | LHS | RHS/Functionality |
| ---- | ------------ | ------------------------ |
| n | `wm` | Rearrange windows layout |

## Text Edit keymaps

### Align text keymaps

The following keymaps rely on
[vim-easy-align](https://github.com/junegunn/vim-easy-align)

| Mode | LHS | RHS/Functionality |
| ---- | --- | ----------------------------------------------------------------- |
| nv | ga | Align the motion / text object / selected text by input separator |

### Comment keymaps

The following keymaps rely on
[mini.comment](https://github.com/echasnovski/mini.nvim)

| Mode | LHS | RHS/Functionality |
| ---- | --- | ------------------------------------------------------------ |
| nv | gc | Comment / uncomment the motion / text object / selected text |
| n | gcc | Comment /uncomment current line |
| o | gc | Text object: a commented text block |

### Text objects for functions keymaps

The following keymaps rely on [dsf.vim](https://github.com/AndrewRadev/dsf.vim)

| Mode | LHS | RHS/Functionality |
| ---- | ---- | ----------------------------------------------------- |
| n | dsf | Delete a function call, don't delete the arguments |
| n | dsnf | Delete next function call, don't delete the arguments |
| n | csf | Change a function call, keep arguments the same |
| n | csnf | Change next function call, keep arguments the same |

### Quick navigation keymaps

The following keymaps rely on [vim-sneak](https://github.com/justinmk/vim-sneak)

| Mode | LHS | RHS/Functionality |
| ---- | --- | --------------------------------------- |
| nvo | f | Find the next input character |
| nvo | F | Find the previous input character |
| nvo | t | Guess from `t` vs `f` for vanilla vim |
| nvo | T | Guess from `T` vs `F` for vanilla vim |
| nv | s | Find the next 2 input chars |
| o | z | Motion: Find the next 2 input chars |
| n | S | Find the previous 2 input chars |
| ov | Z | Motion: Find the previous 2 input chars |

### Text objects enhancement keymaps

The following keymaps rely on
[mini.ai](https://github.com/echasnovski/mini.nvim)

| Mode | LHS | RHS/Functionality |
| ---- | ---- | ------------------------------------------------------------- |
| ov | an | Text object: find the next following "around" text object |
| ov | aN | Text object: find the previous following "around" text object |
| ov | in | Text object: find the next following "inner" text object |
| ov | iN | Text object: find the previous following "inner" text object |
| nov | `g(` | Motion: go to the start of the following "around" text object |
| nov | `g)` | Motion: go to the end of the following "around" text object |

### Block text movement

The following keymaps rely on
[mini.move](https://github.com/echasnovski/mini.nvim)

| Mode | LHS | RHS/Functionality |
| ---- | ------- | ---------------------------- |
| v | `` | Move left the block of text |
| v | `` | Move down the block of text |
| v | `` | Move up the block of text |
| v | `` | Move right the block of text |

### Surround pairs keymaps

The following keymaps rely on
[mini.surround](https://github.com/echasnovski/mini.nvim)

| Mode | LHS | RHS/Functionality |
| ---- | --- | ---------------------------------------------------------- |
| n | yss | Add a surround pair for the whole line |
| n | ys | Add a surround pair for the following motion / text object |
| n | yS | Add a surround pair from cursor to line end |
| v | S | Add a surround pair for selected text |
| n | cs | Change the surround pair |
| n | ds | Delete the surround pair |

### substitution keymaps

The following keymaps rely on
[substitute.nvim](https://github.com/gbprod/substitute.nvim)

| Mode | LHS | RHS/Functionality |
| ---- | --- | ------------------------------------------------------------------------------------------------------ |
| nv | gs | Substitute the motion / text object / selected text by latest pasted text, don't cut the replaced text |
| n | gss | Similar to `gs`, operate on the whole line |
| n | gS | Similar to `gs`, operate on text from cursor to line end |

### Other text objects keymaps

The following keymaps rely on
[vim-textobj-beween](https://github.com/thinca/vim-textobj-between)

| Mode | LHS | RHS/Functionality |
| ---- | --- | ---------------------------------------------------- |
| ov | ab | Text object: around text between the input character |
| ov | ib | Text object: inner text between the input character |

The following keymaps rely on
[vim-textobj-chainmember](https://github.com/D4KU/vim-textobj-chainmember)

| Mode | LHS | RHS/Functionality |
| ---- | --- | ----------------------------------------------------- |
| ov | a. | Text object: around a chain of chained method calls |
| ov | i. | Text object: inner of a chain of chained method calls |

## Integration with other tools

### Terminal keymaps

The following keymaps rely on
[yarepl.nvim](https://github.com/milanglacier/yarepl.nvim)

| Mode | LHS | RHS/Functionality |
| ---- | ------------ | -------------------------------------------------------- |
| n | `ot` | open the `n`th terminal, e.g `ot`, `2ot` |
| n | `t0` | Hide current terminal |
| n | `t1` | Open or focus on current terminal |

### Git keymaps

The following keymaps rely on
[gitsigns.nvim](https://github.com/lewis6991/gitsigns.nvim)

| Mode | LHS | RHS/Functionality |
| ---- | ------------ | --------------------------------------------- |
| n | `gp` | Preview current git diff hunk |
| n | `gv` | Preview current git diff hunk as virtual text |
| n | `ga` | Git actions |
| n | `gB` | Git blame current file |
| n | `gb` | Git blame current line |
| n | `gs` | Stage / Unstage current git diff hunk |
| n | `gr` | Reset current git diff hunk |
| n | `gq` | Send git diff hunks to qflist |
| n | `]h` | Go to next git diff hunk |
| n | `[h` | Go to previous git diff hunk |

| Mode | LHS | RHS/Functionality |
| ---- | ------------ | ----------------- |
| n | `og` | Open Lazygit |

The following keymaps rely on
[mini.nvim](htpps://https://github.com/echasnovski/mini.nvim)

| Mode | LHS | RHS/Functionality |
| ---- | ------------ | -------------------------------------------------------- |
| n | `gd` | Show diff |
| n | `gD` | Show staged diff |
| n | `gl` | Show log |
| n | `gL` | Show log of current buffer |
| n | `gc` | commit |
| n | `gc` | commit ammend |
| nv | `gg` | DWIM (refer to `mini-git`'s doc for `show_at_cursor()`') |

### Search and Replace keymaps

The following keymaps rely on
[grug-far.nvim](https://github.com/MagicDuck/grug-far.nvim)

| Mode | LHS | RHS/Functionality |
| ---- | ------------ | ---------------------------------------------------------------------------------- |
| nv | `/` | Open search and replace UI in a new tab |
| nv | `ss` | search and replace with current word or selected text in horizontal split |
| nv | `ss` | search and replace with current selected word or selected text in vertical split |
| nv | `st` | search and replace with current selected word or selected text in new tab |
| nv | `sf` | search and replace with current selected word or selected text within current file |

### Minuet keymaps

The following keymaps rely on `Minuet`, a code completion plugin as an
alternative to github copilot. Minuet allows you to select your preferred LLM
for code completion.

| Mode | LHS | RHS/Functionality |
| ---- | ------- | ---------------------------------------------------------- |
| i | `` | Invoke `minuet` completion or cycle to next completion |
| i | `` | Invoke `minuet` completion or cycle to previous completion |
| i | `` | Accept line |
| i | `` | Accept n lines of completion |
| i | `` | Accept whole completion |
| i | `` | Reject completion |

## REPL keymaps

Note: with no numerical argument, the REPL is default for the first REPL.

| Mode | LHS | RHS/Functionality |
| ---- | ----------------- | ----------------------------------------------------------------------------------------------- |
| n | `tR` | Toggle float win for REPL |
| n | `rs` | Start REPL `i`, e.g. `rs` to start REPL 1 and `3rs` to start REPL `3` |
| n | `rf` | Focus on the window of REPL attached or REPL `i`, e.g. `rf`, `2rf` |
| n | `rs` | Swap two REPLs. |
| n | `rv` | View REPLs in fuzzy finder (fzf or telescope). |
| n | `rh` | Hide the window of REPL attached or REPL `i`, e.g. `rf`, `2rf` |
| n | `ra` | Attach current buffer to a REPL |
| n | `rd` | Detach current buffer to any REPL |
| n | `rq` | Exit REPL attached or REPL `i`, usage the same as above |
| n | `rc` | Clear invalid REPLs |

| Mode | LHS | RHS/Functionality |
| ---- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| nv | `s` | Send the motion / text object / selected text to the REPL attached or repl `i`, e.g. `sap` or `3ap` |
| n | `ss` | Send current line to the REPL attached or REPL `i`, e.g. `ss` or `3ss` |

## Treesitter keymaps

### Syntax based text objects keymaps

| Mode | LHS | RHS/Functionality |
| ---- | ---- | ------------------------------------------- |
| ov | af | Text object: around a function definition |
| ov | if | Text object: inner of a function definition |
| ov | ak | Text object: the same as `aC` |
| ov | ik | Text object: the same as `iC` |
| ov | al | Text object: around a loop |
| ov | il | Text object: inner of a loop |
| ov | ac | Text object: around if-else conditions |
| ov | ic | Text object: inner of if-else conditions |
| ov | ae | Text object: around a function call |
| ov | `aA` | Text object: around a parameter(argument) |
| ov | `iA` | Text object: inner of a parameter(argument) |

### Syntaxa based navigations keymaps

| Mode | LHS | RHS/Functionality |
| ---- | ---- | ------------------------------------------- |
| n | `]f` | Go to the start of next function definition |
| n | `]k` | The same as `]c` |
| n | `]l` | Go to the start of next loop |
| n | `]c` | Go to the start of next if-else conditions |

| Mode | LHS | RHS/Functionality |
| ---- | ---- | ----------------------------------------- |
| n | `]F` | Go to the end of next function definition |
| n | `]K` | The same as `]C` |
| n | `]L` | Go to the end of next loop |
| n | `]C` | Go to the end of next if-else conditions |

| Mode | LHS | RHS/Functionality |
| ---- | ---- | ----------------------------------------------- |
| n | `[f` | Go to the start of previous function definition |
| n | `[k` | The same as `[c` |
| n | `[l` | Go to the start of previous loop |
| n | `[c` | Go to the start of previous if-else conditions |

| Mode | LHS | RHS/Functionality |
| ---- | ---- | --------------------------------------------- |
| n | `[F` | Go to the end of previous function definition |
| n | `[K` | The same as `[C` |
| n | `[L` | Go to the end of previous loop |
| n | `[C` | Go to the end of previous if-else conditions |

### Miscellenous

| Mode | LHS | RHS/Functionality |
| ---- | ------- | ------------------------------------------------- |
| n | `g` | Jump to the start of the selected treesitter node |
| n | `g` | Jump to the end of the selected treesitter node |
| vo | `` | Select region based on treesitter node |

## Searcher keymaps

The following keymaps rely on

- [fzf.lua](https://github.com/ibhagwan/fzf-luahttps://github.com/ibhagwan/fzf-lua)
or [telescope.nvim](https://github.com/nvim-telescope/telescope.nvim),
- [snacks.nvim](https://github.com/folke/snacks.nvim),
- [project.nvim](https://github.com/ahmedkhalf/project.nvim)

| Mode | LHS | RHS/Functionality |
| ---- | ------------ | ------------------------------------ |
| n | `ff` | Preview files in current working dir |
| n | `fg` | Search current working dir via grep |
| n | `fb` | Preview buffers |
| n | `fh` | Preview vimhelp |
| n | `fo` | Preview recently visited (old) files |
| n | `fp` | Show recently visited projects |
| n | `fk` | Show keymaps |
| n | `fc` | Show commands |
| n | `fC` | Show command history |
| n | `fs` | Show lsp document symbols |
| n | `fr` | Show registers |
| n | `fj` | Show jumplist |
| n | `fn` | Show notifications |
| n | `fT` | Show treesitter nodes |
| n | `ft` | Show tags |
| n | `fe` | Show available searchers |

## Language Server Protocol keymaps

The following keymaps rely on
[nvim-lspconfig](https://github.com/neovim/nvim-lspconfig)

| Mode | LHS | RHS/Functionality |
| ---- | ------------ | ------------------------------------------- |
| n | `lt` | Go to current symbol's type definition |
| n | `la` | LSP code actions |
| n | `ls` | Show signature help |
| n | `lf` | Format document |
| n | `K` | Hover (Show doc of symbol under the cursor) |

| Mode | LHS | RHS/Functionality |
| ---- | ------------ | -------------------------------------- |
| n | `gr` | Show references of current symbol |
| n | `gd` | Show definitions of current symbol |
| n | `li` | Show implementations of current symbol |
| n | `ld` | Show diagnostics of current project |

| Mode | LHS | RHS/Functionality |
| ---- | ------------ | -------------------------------------------- |
| n | `ln` | Rename current symbol |
| n | `gh` | Hover (show documentation of) current symbol |
| n | `[d` | Go to previous diagnostics location |
| n | `]d` | Go to previous diagnostics location |

| Mode | LHS | RHS/Functionality |
| ---- | ------- | ------------------- |
| i | `` | Show signature help |
| i | `` | Hover |

The following keymaps rely on
[aerial.nvim](https://github.com/stevearc/aerial.nvim)

| Mode | LHS | RHS/Functionality |
| ---- | ------------ | -------------------------------------- |
| n | `lo` | Toggle the outline of document symbols |

## Autocompletion keymaps

The following keymaps rely on [nvim-cmp](https://github.com/hrsh7th/nvim-cmp)

| Mode | LHS | RHS/Functionality |
| ---- | --------- | ---------------------------------------------------------------------- |
| `i` | `` | Scoll up the documentation |
| `i` | `` | Scoll down the documentation |
| `i` | `` | Select next candidate |
| `i` | `` | Select previous candidate |
| `i` | `` | Manually invoke the completion |
| `i` | `` | Select the candidate / expand the snippet / go to next slot in snippet |
| `i` | `` | Select previous candidate / go to previous slot in snippet |
| `i` | `` | Abort the completion |

## Debugger Adapter Protocol keymaps

| Mode | LHS | RHS/Functionality |
| ---- | ------------ | -------------------------------------------- |
| `n` | `` | Continue |
| `n` | `` | Pause |
| `n` | `` | Close |
| `n` | `` | Run to cursor |
| `n` | `` | Toggle break point |
| `n` | `` | Set conditional breakpoint |
| `n` | `` | Step over |
| `n` | `` | Step into |
| `n` | `` | Step out |
| n | `dh` | Hover the DAP information for current symbol |
| n | `dr` | Toggle the REPL of the DAP session |
| n | `du` | Toggle the fancy UI (side panel) of DAP |
| n | `dc` | Show available DAP commands |
| n | `dC` | Show available DAP configurations |
| n | `db` | List breakpoints |
| n | `dv` | List DAP variables |
| n | `df` | List DAP frames |

## orgmode keymaps

| Mode | LHS | RHS/Functionality |
| ---- | ------------ | ----------------- |
| n | `oa` | Open org agenda |
| n | `oc` | Open org capture |

## Filetype Specific Keymaps

### R keymaps

#### Builtin keymaps for R

| Mode | LHS | RHS/Functionality |
| ---- | ------------ | ------------------------------ |
| ov | `ac` | Text objects: a code chunk |
| ov | `ic` | Text objects: inner code chunk |

#### REPL keymaps for R

The following keymaps rely on
[yarepl.nvim](https://github.com/milanglacier/yarepl.nvim)

| Mode | LHS | RHS/Functionality |
| ---- | ----------------- | ----------------- |
| n | `