LESVIM
LESVIM
hosts custom Nvim configuration for all the platforms, focused on JavaScript, TypeScript, Rust and Lua
ยท
Report Bug
ยท
Request Feature
Table of Contents
About The Project
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.
Getting Started
Recommendation
-
We highly recommend using
Linux
orMac
as your operating system. -
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.
-
Using
starship
as you 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
orGitUI
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
exa
as als
command in terminal:A modern replacement for โlsโ.
I personally set
ll
alias toexa --tree --level=2 -a --long --header --accessed
with this functions infish
shell:function ll --wraps=ls --wraps=exa --description 'List contents of directory using exa tree' exa --tree --level=2 -a --long --header --accessed --git $argv end
-
Using
zoxide
as acd
command in terminal:A smarter cd command. Supports all major shells.
-
Using
RipGrep
as a replacement forgrep
:ripgrep recursively searches directories for a regex pattern while respecting your gitignore
-
Using
Bat
as a replacement forcat
:A cat(1) clone with wings.
-
Using
fd
as a replacement forfind
:A simple, fast, and user-friendly alternative to 'find'
Prerequisites
-
Install Rust
-
Install Node JS
-
Install Deno
-
Install Neovim
- please install the nightly version of Neovim and install LuaJit.
-
Install
Cascadia Code
,Hack Nerd
andAdobe Arabic
fonts -
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/dpript/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
andRust
LSPs are installed and attached to the relevant buffer when you execute thenvim
command on your proper root project;-
For installing
tsserver
LSP just run:npm install -g typescript typescript-language-server
. You can read the rest of its doc here -
For installing
sumneko_lua
LSP read this doc and this docbriefly i used this way for mac and linux:
- Install ninja
- Make sure you have C++17
- Execute these commands line by line in terminal
To be noticed your executables bin PATH of sumneko should be placed at
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
~/.config/sumneko .. "/bin/" .. system_name .. "/lua-language-server" (your system_name is macOS or Linux or Windows)
-
Installation
-
Copy or clone this repo to
.config/nvim
:git clone https://github.com/MiaadTeam/lesvim.git ~/.config/nvim
-
Install plugins :
-
:PackerInstall
-
:PackerCompile
Please quit and reopen Neovim and execute
:PackerUpdate
and:PackerCompile
again
-
-
After launching Neovim, install these
TreeSitter
lib with:TSInstall
::TSInstall comment css fish graphql javascript lua regex scss toml tsx vim http json
-
And any other you want
Usage
Wezterm
-
Tabs and Pane's creation deletion:
command + shift + N
orsuper + shift + N
shortcut to create a new terminal window.command + t
orsuper + t
shortcut to create a new terminal tab.command + w
orsuper + w
shortcut to close the current terminal tab.command + '
orsuper + '
shortcut to create a new vertical terminal split pane.command + /
orsuper + /
shortcut to create new horizontal terminal split pane.command + x
orsuper + x
shortcut to close the current terminal pane.command + z
orsuper + z
shortcut to toggle the current terminal pane zoom.
-
Pane navigation
command + ctrl + h
orsuper + ctrl + h
goes to the left available pane.command + ctrl + l
orsuper + ctrl + l
goes to the right available pane.command + ctrl + k
orsuper + ctrl + k
goes to the top available pane.command + ctrl + j
orsuper + ctrl + j
goes to the bottom available pane.command + shift + T
orsuper + shift + T
shows tab navigator options.
-
Pane resizing
command + shift + H
orsuper + shift + H
increase right available pane to left.command + shift + L
orsuper + shift + L
increase left available pane to right.command + shift + K
orsuper + shift + K
increase the bottom available pane to the top.command + shift + J
orsuper + shift + J
increase the top available pane to the bottom.
-
Searching
command + shift + F
orsuper + shift + F
search for the string "hash" matches regardless of case.command + shift + space
orsuper + 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.
Vim or Neovim
-
Core:
-
Relative Neovim number is set to true.
For instance, you can easily jump between lines with a quick glance by pressing
<number>j|k
. -
As mentioned in the setup section, we manage plugins with Packer.
A use-package inspired plugin manager for Neovim. Uses native packages, supports Luarocks dependencies, written in Lua, allows for expressive config
-
We used
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 wait for a few seconds,
which-key
shows you an awesome hint for continuing press-related keys. -
Leader Key:
The
leader
is often set tospace
key, so when you pressspace
and wait for a few secondwhich-key
show all grouped and singleton of its binding keys. The following section briefly introduces a few of them:leader + e
toggleNvim Tree
explorer and immediately find the current active buffer file in the tree.leader + /
comment just one line inNormal and Visual
mode.(commenting keybinding has been explained below)leader + c
close current active buffer.leader + w
manipulate splited buffers in current window.(create and modify 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 HOP plugin (like sneak but much better)leader + q
quit nvimleader + t
show lsp action menuleader + r
format current buffer.leader + 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 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 telescopet
search text in all files in current cwdg
search and replace text with ripgrep in current cwdw
search and replace word under cursor with ripgrep in current cwdl
search and replace text in active with ripgrep
leader + b
buffer things:j
pick buffer by first characterf
find buffer in telescopew
wipe buffer except the current oner
close all buffer to rightl
close all buffer to leftd
sort all buffer by directoryn
sort all buffer by languaget
sort all buffer by tabs
leader + g
is for git stuff:b
checkout branch with telescopec
checkout commit with telescopeC
checkout commit for current file with telescopej
jump to the next hunkk
jump to the previous hunkl
show git blame of current lineo
open changed files in telescopep
preview hunkr
reset current hunkR
reset current buffers
stage current hunku
unstage hunk
leader + l
for lsp things:a
show code action for the word is under cursor if it availabled
show document diagnosticsf
for format document with attached lsp'si
show configured and attached lspsj
jump to next diagnostic in documentk
jump to previous diagnostic in documentq
select first actions in code actions (quick fixed)r
rename word with referenced with lsp (just like F2 in vscode)S
show workspace symbols with telescopes
show document symbols with telescopet
find document or project troublesw
show workspace diagnostics
leader + p
is for packer things:i
install package if new package availablec
compile packer and createplugin/packer_compiled.lua
files
sysnc packages with git reposu
update packagesr
clean unused packageS
packer status
leader + z
for spell stuff:p
an special command that fixed spell and jump to the next misspelled wordt
toggle spell checker to on and off
leader + m
for markdown toolsp
start/stop the live server for preview current markdown file in the default browsert
preview markdown directly in a modal window in the terminal
-
Insert MODE
keybinds:press
ii
in either Insert or Visual mode to enter Normal mode (Can be changed in /lua/keymap/escape.lua)
LSP
- Press
gd
to jump to the definition word under the cursor. - Press
gi
to jump to the implementation word under the cursor. - Press
gr
to show where this word is referenced and used. - Press
K
(CAPITAL K orshift + k
) to show declarations of the word under the cursor. - Press
ctrl + k
to show the signature of the word is available. - Press
[d
to jump to the next diagnostic of the opened buffers. - Press
]d
to jump to the previous diagnostic of the opened buffers.
Plugins
-
We use
packer
for manage plugins:A use-package inspired plugin manager for Neovim. Uses native packages, supports Luarocks dependencies, written in Lua, allows for expressive config
-
We use
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.
-
We use
windline
for the status line:Animation status line, floating window status line. Using lua + luv would make some wind.
-
We use
Telescope
as a finder modal:Find, Filter, Preview, Pick. All Lua, all the time.
-
We use
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. -
We use
alpha-nvim
for Dashboard like things:a Lua powered greeter like vim-startify / dashboard-nvim
-
We use
Comment
andnvim-ts-context-commentstring
form commenting code:๐ง ๐ช Smart and powerful comment plugin for Neovim. Supports commentstring, dot repeat, left-right/up-down motions, hooks, and more.Neovim treesitter plugin for setting the commentstring based on the cursor location in a file.
-
We use
format.nvim
for formatting document:Neovim Lua plugin to format the current buffer with external executables
-
We use
fugitive
as a git ui for vim:fugitive.vim: A Git wrapper so awesome, it should be illegal
-
We use
nvim-cursorline
for the highlighted word:A plugin for neovim that highlights cursor words and lines
-
We use
renamer
for search and rename a variable|method and etc:VS Code-like renaming UI for Neovim, written in Lua.
-
We use
nvim-spectre
for search and with ripgrep:Find the enemy and replace them with dark power.
-
We use
bracey
for HTTP live server:live edit HTML, CSS, and javascript in vim
-
We use
markdown-preview
for preview markdown in browser:markdown preview plugin for (neo)vim
-
We use
nvim-ts-autotag
for close and rename HTML tags:Use treesitter to auto-close and auto-rename HTML tag
Show your support
Give a