LESVIM
hosts custom Nvim configuration for all the platforms, focused on JavaScript, TypeScript, Rust and Lua
ยท
Report Bug
ยท
Request Feature
We want to create an awesome Development Environment's so a big part of this document is not about Neovim, we briefly talk about the terminal emulator and prompt and other terminal tools, that make possible the whole Development Life live in Terminal.
We highly recommend using Linux
or Mac
as your operating system.
Please install the nightly build of Neovim
, You need at least version 0.8
.
Using Wezterm
as your default Terminal emulator.
It is a GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust
It's my wezterm.lua
, you should put it in $HOME/.config/wezterm/wezterm.lua
:
Using Fish SHELL
as your default Shell.
It is a user-friendly command-line shell.
It's my config.fish
, you should put it in $HOME/.config/fish/config.fish
:
please note that you should be install eza
zoxide
and starship
to avoid throwing error for functions
and init
command in the config file
Using starship
as your default Shell prompt.
It is the minimal, blazing-fast, and infinitely customizable prompt for any shell!
It's my starship.toml
, you should put it in $HOME/.config/starship.toml
Using lazygit
or GitUI
for interacting with GIT it's is:
Simple terminal UI for git commands,
Blazing ๐ฅ fast terminal-UI for git written in rust ๐ฆ
It's my GitUI
VIM Like
keybinding, you should put it in $HOME/.config/gitui/key_bindings.ron
Using eza
as a ls
command in the terminal:
A modern replacement for โlsโ.
I personally set ll
alias to eza --tree --level=2 -a --long --header --accessed
with this functions in fish
shell:
function ll --wraps=ls --wraps=eza --description 'List contents of directory using eza tree'
eza --tree --level=2 -a --long --header --accessed --git $argv
end
Using zoxide
as a cd
command in terminal:
A smarter cd command. Supports all major shells.
Using RipGrep
as a replacement for grep
:
ripgrep recursively searches directories for a regex pattern while respecting your gitignore
Using Bat
as a replacement for cat
:
A cat(1) clone with wings.
Using fd
as a replacement for find
:
A simple, fast, and user-friendly alternative to 'find'
Using gnu-sed
sed (stream editor) is a non-interactive command-line text editor:
sed is commonly used to filter text, i.e., it takes text input, performs some operation (or set of operations) on it, and outputs the modified text. sed is typically used for extracting part of a file using pattern matching or substituting multiple occurrences of a string within a file.
MacOs:
you need run brew install gnu-sed
you can read a little bit more about the above utils in this article if you want.
Install Rust
Install Node JS
Install Deno
Install Neovim
Install Cascadia Code
, Hack Nerd
and Adobe Arabic
fonts
Install Meslo Nerd Font patched
MesloLGS NF
font available to all
applications on your system.If you decide to use the luffy
windline
config, install Fira Code iCursive S12
.
Installing the Formatter
The major problem regarding the performance of IDE or IDE-Like is owing to the process of formatting documents. So we aim to speed up this process as much as possible.
We are trying to format documents with utils written in rust RUST
Install dprint
and set it to your $PATH
(Pluggable and configurable code formatting platform written in Rust.)
It's my dprint.json
file, you should put it in $HOME/.config/dotfiles/dprint/dprint.json
Install stylua
and set it to your $PATH
(An opinionated Lua code formatter written in rust)
It's my stylua.toml
file, you should put it in $HOME/.config/dotfiles/stylua.toml
Install prettier
globally: npm i -g prettier
(Sorry for using this poorly performing package, however, we need it just for a few filetypes)
Install LSPs
Deno
and Rust
LSPs are installed and attached to the relevant buffer when you execute the nvim
command on your proper root project. if you want to use denolsp
just create a deno.json
file in the root of you project, and run the nvim
command on the root working directory.
For installing tsserver
LSP just run: npm install -g typescript typescript-language-server
. You can read the rest of its doc here
For installing cssls
LSP just run: npm i -g vscode-langservers-extracted
. You can read the rest of its doc here
For installing emmet-ls
LSP just run: npm install -g emmet-ls
. You can read the rest of its doc here
briefly i used this way for mac and linux:
git clone https://github.com/sumneko/lua-language-server ~/.config/sumneko
cd ~/.config/sumneko
git submodule update --init --recursive
cd 3rd/luamake
./compile/install.sh
cd ../..
./3rd/luamake/luamake rebuild
To be noticed your executables bin PATH of sumneko should be placed at ~/.config/sumneko/bin/lua-language-server
Copy or clone this repo to .config/nvim
:
git clone https://github.com/MiaadTeam/lesvim.git ~/.config/nvim
Install plugins :
:Lazy install
:Lazy check
Please quit and reopen Neovim and execute :Lazy update
and :Lazy sync
again
After launching Neovim, install these TreeSitter
lib with :TSInstall
:
:TSInstall comment css fish graphql javascript typescript markdown lua regex scss toml tsx vim http json dockerfile
And any other you want
Tabs and Pane's creation deletion
command + shift + N
or super + shift + N
shortcut to create a new terminal window.command + ctrl + f
or super + ctrl + f
toggle full screen windows.command + shift + L
or super + shift + L
show launcher.command + t
or super + t
shortcut to create a new terminal tab.command + w
or super + w
shortcut to close the current terminal tab.command + '
or super + '
shortcut to create a new vertical terminal split pane.command + /
or super + /
shortcut to create new horizontal terminal split pane.command + x
or super + x
shortcut to close the current terminal pane.command + z
or super + z
shortcut to toggle the current terminal pane zoom.Tabs navigation
command + ,
or super + ,
goes to the right available tab.command + m
or super + m
goes to the left available tab.command shift + T
or super + shift + T
show tabs navigator menu.Pane navigation
command + ctrl + h
or super + ctrl + h
goes to the left available pane.command + ctrl + l
or super + ctrl + l
goes to the right available pane.command + ctrl + k
or super + ctrl + k
goes to the top available pane.command + ctrl + j
or super + ctrl + j
goes to the bottom available pane.Pane cycles
command + [
or super + [
goes to the next available pane.command + ]
or super + ]
goes to the prev available pane.Pane resizing
command + shift + H
or super + shift + H
increase right available pane to left.command + shift + L
or super + shift + L
increase left available pane to right.command + shift + K
or super + shift + K
increase the bottom available pane to the top.command + shift + J
or super + shift + J
increase the top available pane to the bottom.Searching
command + shift + F
or super + shift + F
search for the string "hash" matches regardless of case.command + shift + space
or super + shift + space
go to quick search tools.You might have already noticed that all the shortcuts here begin with command
or super
key except the ctrl + tab
which is switched between available tabs, so we try not to use command
or super
key in vim
shortkey.
Core:
For instance, you can easily jump between lines with a glance by pressing <number>j|k
.
A use-package inspired plugin manager for Neovim. Uses native packages, supports Luarocks dependencies, written in Lua, allows for expressive config
tokyonight
as a theme.๐ A clean, dark Neovim theme written in Lua, with support for LSP, treesitter, and lots of plugins. It includes additional themes for Kitty, Alacrity, iTerm, and Fish
Keybinding:
If you press any key which has something bound to it and waits for a few seconds, which-key
shows you an awesome hint for continuing press-related keys.
Scrolling
<C-u>
, <C-d>
, <C-b>
, <C-f>
, <C-y>
, <C-e>
, zt
, zz
, zb
.Leader Key:
The leader
is often set to space
key, so when you press space
and wait for a few second which-key
show all grouped and singleton of its binding keys. The following section briefly introduces a few of them:
leader + e
toggle Nvim Tree
explorer and immediately find the currently active buffer file in the tree.leader + /
comment just one line in Normal and Visual
mode. (commenting keybinding has been explained below)leader + c
close current active buffer.ctrl + w
manipulate splited buffers in the current window.(create and modify the slipt window explained below)leader + f
open Telescope and find any file fuzzy in CWD.leader + h
jump to any word with the help of the HOP plugin (like sneak but much better)leader + q
quit nvimleader + t
show lsp action menuleader + r
format and regex thingsf
format current bufferr
display regex pattern in popups
display regex pattern in split windowleader + H
HTTP request thingsr
run the request under the cursor.p
preview the request cURL command.l
re-run the last request.leader + s
searching sections:b
searching branch and checkout to it.c
searching color schema and set it.C
searching command and execute it.f
find a file in this CWD.h
searching in all help.k
searching in all keymaps.M
finding in all MAN pages and open itp
searching all color schemes with previewR
searching in registersr
open recent files with the telescopet
search text in all files in the current CWDg
search and replace text with ripgrep in current CWDw
search and replace word under the cursor with ripgrep in current CWDl
search and replace text in active with ripgrepleader + b
buffer things:j
pick buffer by the first characterf
find buffer in the telescopew
wipe buffer except for the current oner
close all buffer to the rightl
close all buffer to leftd
sort all buffer by directoryn
sort all buffer by languaget
sort all buffer by tabsleader + g
is for git stuff:b
checkout branch with the telescopec
checkout commit with the telescopeC
checkout commit for the current file with the telescopej
jump to the next hunkk
jump to the previous hunkl
show git blame of current lineo
open changed files in the telescopep
preview hunkr
reset current hunkR
reset the current buffers
stage current hunku
unstage hunkleader + l
for lsp things:a
show code action for the word is under the cursor if it is availabled
show document diagnosticsf
for format document with attached LSPsi
show configured and attached LSPsj
jump to the next diagnostic in the documentk
jump to the previous diagnostic in the documentq
select first actions in code actions (quick fixed)r
rename word with referenced with LSP (just like F2 in vscode)S
shows workspace symbols with the telescopes
show document symbols with the telescopet
find document or project troublesw
show workspace diagnosticsleader + p
is for Lazy Plugins :i
install the package if a new package is availablec
check plugins for available updatesl
log plugins last release notesr
restore plugins to prior commitsp
plugins profiled
debugging pluginss
sync packages with git reposu
update packagesx
clean unused packageh
lazy plugin helpleader + z
for spell stuff:p
a special command that fixed a spell and jumps to the next misspelled wordt
toggle spell checker to on and offleader + m
for markdown toolsp
start/stop the live server to preview the current markdown file in the default browsert
preview markdown directly in a modal window in the terminalInsert MODE
keybinds:
press jk | kj
in either Insert or Visual mode to enter Normal mode (Can be changed in /lua/keymap/escape.lua)
gd
to jump to the definition word under the cursor.gi
to jump to the implementation word under the cursor.gr
to show where this word is referenced and used.K
(CAPITAL K or shift + k
) to show declarations of the word under the cursor.ctrl + k
to show the signature of the word is available.[d
to jump to the next diagnostic of the opened buffers.]d
to jump to the previous diagnostic of the opened buffers.copilot
just enter : Copilot setup
in the command line. everything should work fine if you have an invite to GitHub Copilot project.<C-j>
or ctrl + j
.We tried to use Lua plugins as much as possible
Some of the plugins have a unique configuration, some of them just copied configuration from its readme file, and some others we want's to add the best config we can piece by piece in the future
lazy
for manage plugins:
๐ค A modern plugin manager for Neovim
plenary
as dependencies for many plugins and Lua utils:
plenary: full; complete; entire; absolute; unqualified. All the Lua functions I don't want to write twice.
popup
as a Popup tools :
[WIP] An implementation of the Popup API from vim in Neovim. Hope to upstream when complete
windline
for the status line:
Animation status line, floating window status line. Using lua + luv would make some wind.
Telescope
as a finder modal:
Find, Filter, Preview, Pick. All Lua, all the time.
which-key.nvim
for amazing keybinding:
๐ฅ Create key bindings that stick. WhichKey is a Lua plugin for Neovim 0.5 that displays a popup with possible keybindings of the command you started typing.
alpha-nvim
for Dashboard like things:
a Lua powered greeter like vim-startify / dashboard-nvim
format.nvim
for formatting document:
Neovim Lua plugin to format the current buffer with external executables
fugitive
as a git ui for vim:
fugitive.vim: A Git wrapper so awesome, it should be illegal
nvim-cursorline
for the highlighted word:
A plugin for neovim that highlights cursor words and lines
renamer
for search and rename a variable|method and etc:
VS Code-like renaming UI for Neovim, written in Lua.
nvim-spectre
for search and with ripgrep:
Find the enemy and replace them with dark power.
bracey
for HTTP live server:
live edit HTML, CSS, and javascript in vim
markdown-preview
for preview markdown in browser:
markdown preview plugin for (neo)vim
nvim-ts-autotag
for close and rename HTML tags:
Use treesitter to auto-close and auto-rename HTML tag
vim-surround
for manage word inside parentheses/quotes/XML-tags etc :
surround.vim: Delete/change/add parentheses/quotes/XML-tags/much more with ease
hop.nvim
for motion beetween words:
Neovim motions on speed!
nvim-ts-rainbow
for coloring matches parentheses/braces and etc in variety of rainbow color:
Rainbow parentheses for neovim using tree-sitter. Also at https://sr.ht/~p00f/nvim-ts-rainbow
indent-blankline.nvim
for coloring indent blankline:
Indent guides for Neovim
winshift.nvim
for managing Windows:
Rearrange your windows with ease.
gitsigns.nvim
for git integration:
Git integration for buffers
nvim-treesitter
Highlight, edit, and navigate code using a fast incremental parsing library:
Nvim Treesitter configurations and abstraction layer
nvim-treesitter-textobjects
Additional textobjects for treesitter:
Syntax aware text-objects, select, move, swap, and peek support.
nvim-treesitter-context
Show code context in the above:
Lightweight alternative to context.vim implemented with nvim-treesitter.
nvim-lspconfig
Collection of configurations for built-in LSP client:
Quickstart configurations for the Nvim LSP client
lspkind-nvim
Pictograms for built-in LSP client:
vscode-like pictograms for neovim LSP completion items
lspsaga.nvim
a lsp plugin:
A light-weight LSP plugin based on neovim built-in LSP with highly a performant UI.
trouble.nvim
a diagnostics tools:
๐ฆ A pretty diagnostics, references, telescope results, quick-fix and location list to help you solve all the trouble your code is causing.
nvim-cmp
Completion plugin :
A completion plugin for neovim coded in Lua.
cmp-nvim-lsp
Completion plugin for LSP:
nvim-cmp source for neovim builtin LSP client
cmp-buffer
Completion plugin for buffer:
nvim-cmp source for buffer words
cmp-path
Completion plugin for PATH:
nvim-cmp source for path
cmp-cmdline
Completion plugin for command-line:
nvim-cmp source for vim's cmdline
nvim-snippy
for handling Snippets:
Snippet plugin for Neovim
cmp-snippy
for handling nvim-snippy in nvim-cmp:
nvim-snippy completion source for nvim-cmp.
registers.nvim
for handling vim registers:
๐ Neovim plugin to preview the contents of the registers
nvim-autopairs
for handling autopairs:
autopairs for neovim written by lua
nvim-toggleterm.lua
for managing multiple terminal:
A neovim lua plugin to help easily manage multiple terminal windows
consolation.nvim
a built-in neovim terminal:
A general-purpose terminal wrapper and management plugin for neovim, written in lua
nvim-code-action-menu
a better code action:
Pop-up menu for code actions to show meta-information and diff preview
nvim-bufferline.lua
a buffer line to show nice data in the buffer header:
A snazzy ๐ buffer line (with tabpage integration) for Neovim built using lua.
nvim-tree.lua
a tree like file explorer:
A file explorer tree for neovim written in Lua
project.nvim
a project management:
๐๏ธ project.nvim is an all-in-one neovim plugin written in Lua that provides superior project management.
filetype.nvim
speed up neovim startup:
Easily speed up your neovim startup time!
twilight.nvim
dims inactive portions of the code you're editing:
๐ Twilight is a Lua plugin for Neovim 0.5 that dims inactive portions of the code you're editing using TreeSitter.
formatter.nvim
for format documents:
A format runner for neovim, written in Lua.
nvim-ts-context-commentstring
for correctly handling code commenting:
Neovim treesitter plugin for setting the commentstring based on the cursor location in a file.
Comment.nvim
for code commenting:
๐ง ๐ช // Smart and powerful comment plugin for neovim. Supports treesitter, dot repeat, left-right/up-down motions, hooks, and more
stabilize.nvim
for fixing a little jump when a modal open/close from the bottom or top:
Neovim plugin to stabilize buffer content on window open/close events.
glow.nvim
for preview markdown directly in neovim:
A markdown preview directly in your neovim.
rest.nvim
for sending http request:
A fast Neovim HTTP client written in Lua
nvim-hlslens
for better search highlights in buffer:
nvim-hlslens helps you better glance at matched information, and seamlessly jump between matched instances.
rust-tools.nvim
rust development utils:
Extra rust tools for writing applications in neovim using the native LSP. This plugin adds extra functionality to rust analyzer.
crates.nvim
for getting information on cargo crates in toml files:
A neovim plugin that helps manage crates.io dependencies
nvim-dap
a debugging tools:
Debug Adapter Protocol client implementation for Neovim (>= 0.5)
nvim-colorizer.lua
a color highlighter:
A high-performance color highlighter for Neovim which has no external dependencies! Written in performant Luajit.
nvim_context_v
extra virtual text:
Shows the virtual text of the current context after functions, methods, statements, etc.
vim-yin-yang
low contrast theme:
Yin-Yang is a black and white color scheme for Vim and is heavily inspired by preto and base16-grayscale.
better-escape.nvim
for better escape with jk
or kj
:
Escape from insert mode without delay when typing
numb.nvim
for peeking lines just when you intend :
numb.nvim is a Neovim plugin that peeks lines of the buffer in a non-obtrusive way.
nvim-regexplainer
for display regex pattern :
Describe the regexp under the cursor
folke/noice.nvim
for replaces the UI for messages
, cmdline
and the popupmenu
:
๐ฅ Highly experimental plugin that completely replaces the UI for messages, cmdline and the popupmenu.
cbochs/portal.nvim
for veiw jumplist in modal :
Look at you, sailing through the [jumplist] majestically, like an eagle... piloting a blimp.
copilot.vim
for AI code suggestion :
GitHub Copilot is an AI pair programmer which suggests line completions and entire function bodies as you type.
Give a โญ๏ธ if this project helped you!