Lin Rongbin's (Neo)Vim Distribution
MIT License
Deprecated: Leave vim behind, switch to neovim only for its best performance, editing experience and powerful community. Please use lin.nvim for neovim, it's the next generation of my neovim distribution. This project is no long actively developed, while PR and bug fix is still welcomed.
lin.vim is a highly configured vim/neovim distribution integrated tons of utilities for development, inspired by spf13-vim.
Aim to be out of box, IDE-like editing experience, high performance, light weight and friendly to both vim and neovim users. Focus on and only on editing, no compile/package/debug.
Solve below issues:
git clone https://github.com/linrongbin16/lin.vim ~/.vim && cd ~/.vim && ./install.sh
Notice:
The install.sh
will automatically install below dependencies with system package manager:
For now supported platforms are:
apt
as software installer.dnf
as software installer.pacman
as software installer.brew
as software installer, please install Xcode and homebrew as pre-requirements.Install Visual Studio with below 2 components:
Install 64-bit Git for Windows Setup with below 3 options:
git.exe
and linux builtin commands (such as bash.exe
, cp.exe
, mv.exe
, cd.exe
, ls.exe
, etc) to $env:Path
.Install other 64-bit dependencies:
gvim_{x.y.z}_x64.exe
): add gvim.exe
to $env:Path
nvim-win64.msi
): add nvim.exe
to $env:Path
cmake-{x.y.z}-windows-x86_64.msi
): add cmake.exe
to $env:Path
make-{x.y}-bin.zip
): add make.exe
to$env:Path
python-{x.y.z}-amd64.exe
): manually copy python.exe
to python3.exe
, then add python3.exe
to $env:Path
(Since windows python3 installer only provide python.exe
).rustup-init.exe (64-bit)
): add rustc.exe
, cargo.exe
to $env:Path
go{x.y.z}.windows-amd64.msi
): add go.exe
to $env:Path
node-v{x.y.z}-x64.msi
): add node.exe
, npm.exe
to $env:Path
ctags-p{x.y.d.z}-x64.zip
): add ctags.exe
, readtags.exe
to $env:Path
Install Hack NFM.
Run powershell commands as administrator:
git clone https://github.com/linrongbin16/lin.vim $env:UserProfile\.vim && cd $env:UserProfile\.vim && .\install.ps1
Notice:
C:\Windows\System32\bash.exe
could lead you to WSL instead of the bash.exe
from Git for Windows. Make sure git path is ahead of C:\Windows\System32
, so git bash will be first detected (wsl.exe
could connect to WSL as well so no need to worry about losing C:\Windows\System32\bash.exe
).vim.exe
, make sure gvim.exe
(from vim-win32-installer) path is ahead of git, so vim.exe
from vim-win32-installer will be first detected. You could also only use gvim.exe
to avoid the old-version vim.gvim --version
to find its libpython3.lib version.python.exe
or python3.exe
, this could lead you to the wrong python from windows store.The install.sh
(and install.ps1
) provide 3 installation modes:
./install.sh
, it install all features for best user experience, which consumes unignorable CPU, memory, disk and graphics../install.sh --limit
, it disable extra highlights, colorschemes, language support and editing enhancements../install.sh --basic
, it only install pure vim configurations, without any third party softwares or vim plugins.And more options:
--static-color=TEXT
: make colorscheme static, instead of random selection on startup. For example: --static-color=darkblue
.--disable-color
: disable extra colorschemes, and random selection on startup.--disable-highlight
: disable extra highlights. Such as RGB and same word mark under cursor, etc.--disable-language
: disable language support. Such as auto complete and language servers, etc.--disable-editing
: disable editing enhancements. Such as easy comment, cursor motion, etc.--disable-plugin=TEXT
: disable specific vim plugin in format 'organization/repository', this is a multiple option. For example: --disable-plugin=RRethy/vim-hexokinase --disable-plugin=alvan/vim-closetag
.--disable-vim
: don't install .vimrc file for vim, could use neovim only.--disable-neovim
: don't install nvim/init.vim file for neovim, could use vim only.Notice:
The install.ps1
especially provide two more options for Windows:
--depends=TEXT
: download and install specific dependency in 3rd step of windows installation. Use --depends=all
to run for all dependencies. For example: --depends=vim
, --depends=universal-ctags
.--nerdfont=TEXT
: download specific nerd font. For example: --nerdfont=Hack
, --nerdfont=SourceCodePro
.Use a package manager (such as chocolatey and scoop) could be a better choice, just make sure they're available in
$env:Path
.
For distribution, please re-install by:
cd ~/.vim
git pull origin master
./install.sh
For vim plugins, please open (neo)vim and update by:
:PlugUpdate!
In this section, vim editing mode are specified with:
Meta-key (M
), alt-key (A
) on Windows/Linux, and command-key (D
) on macOS are collectively refered as:
M
F1
🇳 - Toggle file explorer, see Simple but pretty UI.F2
🇳 - Toggle undo tree.F3
🇳 - Toggle outline/tags, see Outlines and Terminal.F4
🇳 - Switch between C/C++ headers and sources.F7
🇳 - Toggle git blame info on current line.F8
🇳 - Open markdown preview.F9
🇳 - Toggle terminal.F10
🇳 - Toggle buffers explorer.Control+? keys are configured following most editors' behaviour under windows:
<C-a>
🇳 🇻 🇮 - Select all.<C-c>
🇳 🇻 🇮 - Copy to clipboard.<C-x>
🇳 🇻 🇮 - Cut to clipboard.<C-v>
🇳 🇻 🇮 - Paste from clipboard.<C-s>
🇳 🇻 🇮 - Save file.<C-y>
🇳 🇻 🇮 - Redo.<C-z>
🇳 🇻 🇮 - Undo.<C-q>
🇳 - Turn into visual block mode, same as vim's original ctrl+v (since we remapped it to paste).Additionally for macOS, command+? keys are configured following the same behaviour (control+? keys are also enabled):
<D-a>
🇳 🇻 🇮 - Same as <C-a>
.<D-c>
🇳 🇻 🇮 - Same as <C-c>
.<D-x>
🇳 🇻 🇮 - Same as <C-x>
.<D-v>
🇳 🇻 🇮 - Same as <C-v>
.<D-s>
🇳 🇻 🇮 - Same as <C-s>
.<D-y>
🇳 🇻 🇮 - Same as <C-y>
.<D-z>
🇳 🇻 🇮 - Same as <C-z>
.Copy/paste across different vim instances through remote ssh could be difficult, so introduce two shortcuts using local cache:
<Leader>y
🇻 - Copy visual selected text to cache.<Leader>p
🇳 - Paste from cache to current cursor.You could configure all global key mappings in ~/.vim/settings.vim.
File explorer is support by fern.vim (switched to nvim-tree.lua on neovim 0.7+).
Navigation:
h
🇳 - Collapse directory.l
🇳 - Expand directory or open file.<CR>
🇳 - Cd into directory.<BS>
🇳 - Go to upper directory and leave directory.e
🇳 - Open file in split
.E
🇳 - Open file in vsplit
.t
🇳 - Open file in new tab.Create/rename/delete:
N
/a
🇳 - Create new file. Notice a
is not working on fern.vim, since it's forcely mapped to <Plug>(fern-action-choice)
instead of <Plug>(fern-action-new-file)
.A
🇳 - Create new directory. Notice nvim-tree.lua need an additional slash /
(or \
) after directory name (see: nvim-tree.lua - Tips & tricks), while fern.vim just need directory name itself.m
/r
🇳 - Move or rename file/directory.d
🇳 - Trash file/directory to system trash-bin, only for windows/macOS.D
🇳 - Delete file/directory, usually rm
.Copy/paste/cut:
C
🇳 - Copy file/directory into an internal clipboard, just like in Windows ctrl+c.X
🇳 - Cut file/directory into an internal clipboard, just like in Windows ctrl+x.V
🇳 - Paste file/directory from an internal clipboard to current directory, just like in Windows ctrl+v.Adjust explorer width:
<M-.>
/<M-Right>
/<C-.>
/<C-Right>
🇳 - Make explorer bigger size.<M-,>
/<M-Left>
/<C-,>
/<C-Left>
🇳 - Make explorer smaller size.Other:
R
🇳 - Refresh file explorer.s
🇳 - Open file in system file manager(such as Finder in macOS).?
🇳 - Toggle help.For neovim 0.7+ only:
I
🇳 - Toggle file info.H
🇳 - Toggle hidden dot files.<
🇳 - Goto previous(up) sibling.>
🇳 - Goto next(down) sibling.K
🇳 - Goto first(top) sibling.J
🇳 - Goto last(bottom) sibling.P
🇳 - Goto parent(upper) directory.y
🇳 - Copy file name as literal.Y
🇳 - Copy absolute file path as literal.]c
🇳 - Goto next(down) git chunk.[c
🇳 - Goto previous(up) git chunk.You could editing ~/.vim/repository/lambdalisue/fern.vim.vim (or ~/.vim/repository/kyazdani42/nvim-tree.lua.vim) to customize key mappings. Please refer to fern.vim - wiki - Mappings (or :help nvim-tree-mappings) for more information.
Notice that on different platforms,terminals and GUI clients, some ctrl/meta+keys could been overwritten. So introduced several ways of mappings to make sure for the availibility.
<Leader>bn
/<M-.>
/<C-.>
/<M-Right>
/<C-Right>
🇳 - Go to next(right) buffer.<Leader>bp
/<M-,>
/<C-,>
/<M-Left>
/<C-Left>
🇳 - Go to previous(left) buffer.<Leader>bd
🇳 - Close current buffer without closing vim window.Navigation:
<M-1>
/<C-1>
🇳 - Go to buffer-1.<M-2>
/<C-2>
🇳 - Go to buffer-2.<M-3>
/<C-3>
🇳 - Go to buffer-3.<M-4>
/<C-4>
🇳 - Go to buffer-4.<M-5>
/<C-5>
🇳 - Go to buffer-5.<M-6>
/<C-6>
🇳 - Go to buffer-6.<M-7>
/<C-7>
🇳 - Go to buffer-7.<M-8>
/<C-8>
🇳 - Go to buffer-8.<M-9>
/<C-9>
🇳 - Go to buffer-9.<M-0>
/<C-0>
🇳 - Go to buffer-10 (or the last buffer on neovim 0.7+).For neovim 0.7+ only:
<M-S-Right>
/<C-S-Right>
🇳 - Re-order(move) current buffer to next(right) position.<M-S-Left>
/<C-S-Left>
🇳 - Re-order(move) current buffer to previous(left) position.<LeftMouse>
🇳 - Go to target buffer.<MiddleMouse>
🇳 - Close target buffer.Support by vim-buffet (switched to barbar.nvim on neovim 0.5+).
By default Hack Nerd Font Mono is enabled. Please install other nerd fonts and edit ~/.vim/settings.vim to customize fonts.
<C-n>
/<Down>
🇮 - Navigate to next suggestion.<C-p>
/<Up>
🇮 - Navigate to previous suggestion.<TAB>
/<CR>
🇮 - Confirm current suggestion.<ESC>
/<C-[>
🇮 - Close suggestion.<C-f>
🇮 - Navigate to next(right) snippet placeholder.<C-b>
🇮 - Navigate to previous(left) snippet placeholder.[d
🇳 - Go to previous(up) diagnostic location.]d
🇳 - Go to next(down) diagnostic location.gd
🇳 - Go to definition.gD
/gl
🇳 - Go to declaration.gy
/gt
🇳 - Go to type definition.gi
🇳 - Go to implemention.gr
🇳 - Go to references.K
🇳 - Show hover information.<Leader>rs
🇳 - Rename symbol.<Leader>cf
🇳 - Format code on whole buffer in normal mode.<Leader>cf
🇻 - Format selected code in visual mode.<Leader>ca
🇳 - Run code actions under cursor in normal mode.<Leader>ca
🇻 - Run code actions on selected code in visual mode.<Leader>qf
🇳 - Apply quick fix for diagnostics on current line.<Leader>cl
🇳 - Run the CodeLens on current line.]c
🇳 - Go to next(down) git chunk in current buffer.[c
🇳 - Go to previous(up) git chunk in current buffer.<Leader>gb
🇳 - Toggle git blame info for current line (for neovim 0.5+).Search engine use fzf.vim and integrated with coc.nvim with coc-fzf. All fzf commands are configured with prefix Fzf, for example :Files
are renamed to :FzfFiles
, :Rg
are renamed to :FzfRg
.
<Space>gr
🇳 - Search text by self-defined command :LinVimFzfRg
.<Space>gw
🇳 - Search word text under cursor by self-defined command :LinVimFzfRgCWord
.<Space>l
🇳 - Search lines on opened buffers by :FzfLines
.<Space>t
🇳 - Search tags by :FzfTags
.<Space>y
🇳 - Search yank history by :CocFzfList yank
.<Space>sh
🇳 - Search searched history by :FzfHistory/
.<Space>ch
🇳 - Search vim command history by :FzfHistory:
.<Space>f
/<C-p>
🇳 - Search files by :FzfFiles
.<Space>b
🇳 - Search opened buffers by :FzfBuffers
.<Space>hf
🇳 - Search history files (v:oldfiles) and opened buffers by :FzfHistory
.<Space>gc
🇳 - Search git commits by :FzfCommits
.<Space>gf
🇳 - Search git files rby :FzfGFile
.<Space>gs
🇳 - Search git status (also diff files by preview) by :FzfGFiles?
.<Space>mk
🇳 - Search marks by :FzfMarks
.<Space>mp
🇳 - Search normal mode vim key mappings by :FzfMaps
.<Space>vc
🇳 - Search vim commands by :FzfCommands
.<Space>ht
🇳 - Search help tags by :FzfHelptags
.Key mappings are configured with prefix char c
after <Space>
.
<Space>cs
🇳 - Search coc symbols by :CocFzfList symbols
.<Space>cd
🇳 - Search coc diagnostics by :CocFzfList diagnostics
.<Space>co
🇳 - Search coc outlines(tags) by :CocFzfList outline
.<Space>cc
🇳 - Search coc commands by :CocFzfList commands
.<Space>cl
🇳 - Search coc location by :CocFzfList location
.Please visit fzf.vim and coc-fzf for more information.
Linewise comment:
gcc
🇳 - Toggle current line.[count]gcc
🇳 - Toggle [count] number of lines.gc{motion}
🇳 - Toggle two lines with motion(jk).gc[count]{motion}
🇳 - Toggle region with [count](optional) times motion.gc
🇻 - Toggle selected region in virual mode.Blockwise comment (for neovim only):
gbc
🇳 - Toggle current line.[count]gbc
🇳 - Toggle [count] number of lines.gb{motion}
🇳 - Toggle two lines with motion.gb[count]{motion}
🇳 - Toggle region with [count](optional) times motion.gb
🇻 - Toggle selected region in virual mode.Support by tcomment_vim (switched to Comment.nvim on neovim).
See Fast cursor movement.
<Leader>f{char}
🇳 - Move by a single {char}.<Leader>s{char}{char}
🇳 - Move by two consequent {char}{char}.<Leader>w
🇳 - Move by word.<Leader>l
🇳 - Move by line.Support by vim-easymotion (switched to hop.nvim on neovim 0.5+).
(Neo)vim word movement cannot recognize real literal word, such as camel case, mixed digits, characters, punctuations, etc. So introduce better word motions:
<Leader>w
/<Leader>W
🇳 - word/WORD forward(right), exclusive.<Leader>bb
/<Leader>B
🇳 - word/WORD backward(left), exclusive.<Leader>e
/<Leader>E
🇳 - Forward to the end of word/WORD, inclusive.<Leader>ge
/<Leader>gE
🇳 - Backward to the end of word/WORD, inclusive.Support by vim-wordmotion.
Better repeat(.
) operation, support by vim-repeat.
Better surrounding(quotes) editing, support by vim-surround.
Better matching include HTML tags, if-endif, and other things, support by vim-matchup.
Auto pair and close html tags, support by auto-pairs (switched to nvim-autopairs on neovim 0.5+) and vim-closetag.
Please check vim entry ~/.vimrc (~/_vimrc on windows), and neovim entry ~/.config/nvim/init.vim (~/AppData/Local/nvim/init.vim on windows). They load below vim files:
For basic install mode, there's only standalone vim settings, see More Options.
Please open issue/PR for anything about lin.vim.
Like lin.vim? Consider
Or