1
0
mirror of https://github.com/jdhao/nvim-config.git synced 2025-06-08 14:14:33 +02:00

29 Commits

Author SHA1 Message Date
jdhao
6df27d1c22 upgrade to neovim 0.9.2 2023-09-16 14:26:38 +02:00
jdhao
7f6627cfa1 update plugin conf for Lazy.nvim 2023-09-10 22:16:16 +02:00
jdhao
7ff11a9760 update plugin lazy loading events 2023-09-05 00:22:02 +02:00
jdhao
cc4688d089 Loosen the version check condition
Other version of nvim can still run this config, but should use with
care.
2023-09-01 21:39:08 +02:00
jdhao
8a1b3193a4 fix bufferline loading issue 2023-09-01 21:27:13 +02:00
jdhao
e92362041c fix hlslens issue when no pattern is found
The captured error message is not correct before.
2023-09-01 21:22:22 +02:00
jdhao
63ff776758 fix loading order of nvim-cmp and nvim-lsp 2023-09-01 20:52:46 +02:00
jdhao
41c8c81f21 update spell 2023-09-01 01:08:41 +02:00
jdhao
997c6286df Optimize plugin loading speed 2023-09-01 01:07:16 +02:00
jdhao
359621b126 fix multi visual line delete issue
For TextYankPost event, it includes both yank and delete, we should only
restore cursor position for yank, not for delete. Otherwise, it messes
up with text deletion when you visually select multiple lines and delete
them. See also issue reported here: https://github.com/jdhao/nvim-config/pull/222#issuecomment-1698634645
2023-09-01 00:26:08 +02:00
jdhao
4dc2d9575b disable horizontal scroll by mouse 2023-08-29 23:44:07 +02:00
jdhao
fc1c447319 fix multi-line yank issue, close #220
The previous way of keep the cursor while yanking is not perfect.
It will break multi-line yank (`{count}yy`).
2023-08-28 21:11:32 +02:00
jdhao
1391ca7ff1 feat: switch from packer.nvim to lazy.nvim 2023-08-27 23:14:31 +02:00
jdhao
6a6f8ff597 Update condition for installing vim-xkbswitch 2023-08-23 00:48:21 +02:00
jdhao
946e65662b fix nvimtree conf, close #215 2023-08-14 23:55:17 +02:00
jdhao
4a6379ca5d update git-linker conf
1. Add configuration for azure devops
2. change the mappings slightly
2023-08-09 19:52:58 +02:00
jdhao
855a88b532 fix: user lua conf reloading fails
The cache should be invalidated. This fix does not work 100%, because, e.g.,
there are other configs hiding deeper under lua/config/ directory.
A restart is the best way to reload the config.
2023-07-29 14:34:42 +02:00
jdhao
892cd49f06 doc: update doc and install guide for pylsp 2023-07-29 13:09:37 +02:00
jdhao
e53ee104ec feat: move lua conf under lua directory 2023-07-28 22:28:36 +02:00
jdhao
671c78df9b feat: more ignore files for LeaderF (#209) 2023-07-29 04:09:50 +08:00
jdhao
1608a36dd3 fix: conf is not local 2023-07-25 23:00:25 +02:00
jdhao
450f058da5 feat: support venv in Mypy
Specify the correct python executable path for mypy to work well.
2023-07-25 22:59:06 +02:00
jdhao
e2f348cb37 fix: missing nerdfonts
Since wezterm upgrade its support for Nerd Fonts 3.0, we should update
the codepoints used for some of the Unicode Icons. Their code points are
changed due to breaking changes in Nerd Fonts.
2023-07-25 22:53:20 +02:00
jdhao
fc8175d32d feat: update diagnostic mappings
Use separate key mappings to show diagnostics for the current buffer and
all opened files.
2023-07-22 15:01:41 +02:00
jdhao
4034b6b673 feat: update pylsp conf
1. support using black as formatter
2. replace obsolete pyls-isort with maintained ones
2023-07-22 14:51:27 +02:00
jdhao
67a4b6e6d0 feat: add treesitter toml 2023-07-22 14:46:10 +02:00
jdhao
bb27d93433 fix: move location indication to the right of statusline 2023-07-20 23:00:06 +02:00
jdhao
9d9c3ef32f feat: update diagnostic position in statusline
Do not show it in far right, move it to the left side for easier
visibility.
2023-07-20 22:52:55 +02:00
jdhao
00e8c77b23 Fix LeaderF bug
It will add files to buffer list even if we have not confirmed the
selection. This behavior is really annoying.
See also 27bd938a42.
2023-06-27 20:39:26 +02:00
23 changed files with 742 additions and 501 deletions

View File

@@ -13,7 +13,7 @@
<img alt="Latest release" src="https://img.shields.io/github/v/release/jdhao/nvim-config" />
</a>
<a href="https://github.com/neovim/neovim/releases/tag/stable">
<img src="https://img.shields.io/badge/Neovim-0.9.1-blueviolet.svg?style=flat-square&logo=Neovim&logoColor=green" alt="Neovim minimum version"/>
<img src="https://img.shields.io/badge/Neovim-0.9.2-blueviolet.svg?style=flat-square&logo=Neovim&logoColor=green" alt="Neovim minimum version"/>
</a>
<a href="https://github.com/jdhao/nvim-config/search?l=vim-script">
<img src="https://img.shields.io/github/languages/top/jdhao/nvim-config" alt="Top languages"/>
@@ -21,8 +21,8 @@
<a href="https://github.com/jdhao/nvim-config/graphs/commit-activity">
<img src="https://img.shields.io/github/commit-activity/m/jdhao/nvim-config?style=flat-square" />
</a>
<a href="https://github.com/jdhao/nvim-config/releases/tag/v0.9.1">
<img src="https://img.shields.io/github/commits-since/jdhao/nvim-config/v0.9.1?style=flat-square" />
<a href="https://github.com/jdhao/nvim-config/releases/tag/v0.9.2">
<img src="https://img.shields.io/github/commits-since/jdhao/nvim-config/v0.9.2?style=flat-square" />
</a>
<a href="https://github.com/jdhao/nvim-config/graphs/contributors">
<img src="https://img.shields.io/github/contributors/jdhao/nvim-config?style=flat-square" />
@@ -57,7 +57,7 @@ and how to set up on different platforms (Linux, macOS, and Windows).
# Features #
+ Plugin management via [Packer.nvim](https://github.com/wbthomason/packer.nvim).
+ Plugin management via [Lazy.nvim](https://github.com/folke/lazy.nvim).
+ Code, snippet, word auto-completion via [nvim-cmp](https://github.com/hrsh7th/nvim-cmp).
+ Language server protocol (LSP) support via [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig).
+ Git integration via [vim-fugitive](https://github.com/tpope/vim-fugitive).

View File

@@ -141,9 +141,7 @@ function! utils#Inside_git_repo() abort
if match(res, 'true') == -1
return v:false
else
" Manually trigger a special user autocmd InGitRepo (to use it for
" lazyloading of fugitive by packer.nvim).
" See also https://github.com/wbthomason/packer.nvim/discussions/534.
" Manually trigger a special user autocmd InGitRepo (used lazyloading.
doautocmd User InGitRepo
return v:true
endif

View File

@@ -71,7 +71,7 @@ set scrolloff=3
" Use mouse to select and resize windows, etc.
set mouse=nic " Enable mouse in several mode
set mousemodel=popup " Set the behaviour of mouse
set mousescroll=ver:1,hor:6
set mousescroll=ver:1,hor:0
" Disable showing current mode on command line since statusline plugins can show it.
set noshowmode

View File

@@ -7,10 +7,10 @@ lua require('plugins')
" To use these shortcuts: first activate command line with `:`, then input the
" short alias, e.g., `pi`, then press <space>, the alias will be expanded to
" the full command automatically.
call utils#Cabbrev('pi', 'PackerInstall')
call utils#Cabbrev('pud', 'PackerUpdate')
call utils#Cabbrev('pc', 'PackerClean')
call utils#Cabbrev('ps', 'PackerSync')
call utils#Cabbrev('pi', 'Lazy install')
call utils#Cabbrev('pud', 'Lazy update')
call utils#Cabbrev('pc', 'Lazy clean')
call utils#Cabbrev('ps', 'Lazy sync')
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" configurations for vim script plugin "
@@ -42,7 +42,7 @@ let g:Lf_UseMemoryCache = 0
" Ignore certain files and directories when searching files
let g:Lf_WildIgnore = {
\ 'dir': ['.git', '__pycache__', '.DS_Store'],
\ 'dir': ['.git', '__pycache__', '.DS_Store', '*_cache'],
\ 'file': ['*.exe', '*.dll', '*.so', '*.o', '*.pyc', '*.jpg', '*.png',
\ '*.gif', '*.svg', '*.ico', '*.db', '*.tgz', '*.tar.gz', '*.gz',
\ '*.zip', '*.bin', '*.pptx', '*.xlsx', '*.docx', '*.pdf', '*.tmp',
@@ -109,6 +109,20 @@ let g:Lf_PopupColorscheme = 'gruvbox_material'
" items.
let g:Lf_CommandMap = {'<C-J>': ['<C-N>'], '<C-K>': ['<C-P>']}
" do not preview results, it will add the file to buffer list
let g:Lf_PreviewResult = {
\ 'File': 0,
\ 'Buffer': 0,
\ 'Mru': 0,
\ 'Tag': 0,
\ 'BufTag': 1,
\ 'Function': 1,
\ 'Line': 0,
\ 'Colorscheme': 0,
\ 'Rg': 0,
\ 'Gtags': 0
\}
""""""""""""""""""""""""""""open-browser.vim settings"""""""""""""""""""
if g:is_win || g:is_mac
" Disable netrw's gx mapping.
@@ -387,7 +401,7 @@ function! s:wilder_init() abort
\ 'apply_incsearch_fix': 0,
\ }))
catch /^Vim\%((\a\+)\)\=:E117/
echohl Error |echomsg "Wilder.nvim missing: run :PackerSync to fix."|echohl None
echohl Error |echomsg "Wilder.nvim missing"| echohl None
endtry
endfunction

View File

@@ -65,7 +65,7 @@ pip install -U pynvim
[python-lsp-server (pylsp)](https://github.com/python-lsp/python-lsp-server) is a Python [Language Server](https://microsoft.github.io/language-server-protocol/) for completion, linting, go to definition, etc.
```
pip install 'python-lsp-server[all]' pylsp-mypy pyls-isort
pip install 'python-lsp-server[all]' pylsp-mypy python-lsp-isort python-lsp-black
```
Note the executable for pylsp is also named `pylsp`. You need to set its PATH correctly.
@@ -111,7 +111,7 @@ vim-language-server is installed in the same directory as the node executable.
### Git
Git is required by plugin manager [packer.nvim](https://github.com/wbthomason/packer.nvim) and other git-related plugins.
Git is required by plugin manager [lazy.nvim](https://github.com/folke/lazy.nvim) and other git-related plugins.
For Linux and macOS, Git is usually pre-installed.
The version of Git on the Linux system may be too old so that plugins may break.
@@ -201,22 +201,6 @@ After installing Nvim, we need to set the path to nvim correctly.
After installing nvim and all the dependencies, we will install plugin managers and set up this config.
### Install plugin manager packer.nvim
I use packer.nvim to manage my plugins. We need to install packer.nvim on our system first.
For Windows, if curl is installed, run the following command (on PowerShell):
```
git clone --depth=1 https://github.com/wbthomason/packer.nvim "$env:LOCALAPPDATA\nvim-data\site\pack\packer\opt\packer.nvim"
```
For macOS and Linux, run the following command:
```bash
git clone --depth=1 https://github.com/wbthomason/packer.nvim ~/.local/share/nvim/site/pack/packer/opt/packer.nvim
```
### How to install this configuration
On Linux and macOS, the directory is `~/.config/nvim`.
@@ -228,7 +212,7 @@ then go to this directory, and run the following command:
git clone --depth=1 https://github.com/jdhao/nvim-config.git .
```
After that, when we first open nvim, run command `:PackerSync` to install all the plugins.
After that, when we first open nvim, all the plugins will be installed automatically.
Since I use quite a lot of plugins (more than 60), it may take some time to install all of them.
[^1]: Use `echo %userprofile%` to see where your `$HOME` is.

View File

@@ -68,7 +68,7 @@ fi
# Install some Python packages used by Nvim plugins.
echo "Installing Python packages"
declare -a PY_PACKAGES=("pynvim" 'python-lsp-server[all]' "black" "vim-vint" "pyls-isort" "pylsp-mypy")
declare -a PY_PACKAGES=("pynvim" 'python-lsp-server[all]' "vim-vint" "python-lsp-isort" "pylsp-mypy" "python-lsp-black")
if [[ "$SYSTEM_PYTHON" = true ]]; then
echo "Using system Python to install $(PY_PACKAGES)"
@@ -252,13 +252,7 @@ fi
git clone --depth=1 https://github.com/jdhao/nvim-config.git "$NVIM_CONFIG_DIR"
echo "Installing packer.nvim"
if [[ ! -d ~/.local/share/nvim/site/pack/packer/opt/packer.nvim ]]; then
git clone --depth=1 https://github.com/wbthomason/packer.nvim \
~/.local/share/nvim/site/pack/packer/opt/packer.nvim
fi
echo "Installing nvim plugins, please wait"
"$NVIM_DIR/bin/nvim" -c "autocmd User PackerComplete quitall" -c "PackerSync"
"$NVIM_DIR/bin/nvim" -c "autocmd User LazyInstall quitall" -c "lua require('lazy').install()"
echo "Finished installing Nvim and its dependencies!"

View File

@@ -27,7 +27,7 @@ scoop install miniconda3
pip install -U pynvim
# Install python-language-server
pip install 'python-lsp-server[all]' pylsp-mypy pyls-isort
pip install 'python-lsp-server[all]' pylsp-mypy python-lsp-isort
# Install visual c++ redistribution
scoop install vcredist2022

View File

@@ -11,19 +11,17 @@
-- StackOverflow: https://stackoverflow.com/users/6064933/jdhao
vim.loader.enable()
local api = vim.api
local version = vim.version
-- check if we have the latest stable version of nvim
local expected_ver = "0.9.1"
local expected_ver = "0.9.2"
local ev = version.parse(expected_ver)
local actual_ver = version()
if version.cmp(ev, actual_ver) ~= 0 then
local _ver = string.format("%s.%s.%s", actual_ver.major, actual_ver.minor, actual_ver.patch)
local msg = string.format("Unsupported nvim version: expect %s, but got %s instead!", expected_ver, _ver)
api.nvim_err_writeln(msg)
return
local msg = string.format("Expect nvim %s, but got %s instead. Use at your own risk!", expected_ver, _ver)
vim.api.nvim_err_writeln(msg)
end
local core_conf_files = {
@@ -36,8 +34,14 @@ local core_conf_files = {
}
-- source all the core config files
for _, name in ipairs(core_conf_files) do
local path = string.format("%s/core/%s", vim.fn.stdpath("config"), name)
local source_cmd = "source " .. path
vim.cmd(source_cmd)
for _, file_name in ipairs(core_conf_files) do
if vim.endswith(file_name, 'vim') then
local path = string.format("%s/core/%s", vim.fn.stdpath("config"), file_name)
local source_cmd = "source " .. path
vim.cmd(source_cmd)
else
local module_name, _ = string.gsub(file_name, "%.lua", "")
package.loaded[module_name] = nil
require(module_name)
end
end

88
lazy-lock.json Normal file
View File

@@ -0,0 +1,88 @@
{
"LeaderF": { "branch": "master", "commit": "9c4451d2c1a6ea1f32e39fe52d58f6f5655b231d" },
"asyncrun.vim": { "branch": "master", "commit": "42385d54b8546c163b946fd50eed2103ef7993c9" },
"better-escape.vim": { "branch": "master", "commit": "6b16a45a839727977277f6ab11bded63e9ed86bb" },
"bufferline.nvim": { "branch": "main", "commit": "9961d87bb3ec008213c46ba14b3f384a5f520eb5" },
"catppuccin": { "branch": "main", "commit": "85e93601e0f0b48aa2c6bbfae4d0e9d7a1898280" },
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
"cmp-emoji": { "branch": "main", "commit": "19075c36d5820253d32e2478b6aaf3734aeaafa0" },
"cmp-nvim-lsp": { "branch": "main", "commit": "44b16d11215dce86f253ce0c30949813c0a90765" },
"cmp-nvim-ultisnips": { "branch": "main", "commit": "24bca5c3e137b28cd87442d4fc51a2b312dd99cc" },
"cmp-omni": { "branch": "main", "commit": "9436e6cdd7c5dfa24a99a60d9280b24dbdea3649" },
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
"committia.vim": { "branch": "master", "commit": "0b4df1a7f48ffbc23b009bd14d58ee1be541917c" },
"dashboard-nvim": { "branch": "master", "commit": "bbe0234168501b8ba46f24b4fb3cb7c5b88c0784" },
"delimitMate": { "branch": "master", "commit": "537a1da0fa5eeb88640425c37e545af933c56e1b" },
"dressing.nvim": { "branch": "master", "commit": "c1e1d5fa44fe08811b6ef4aadac2b50e602f9504" },
"edge": { "branch": "master", "commit": "a4fd4f458331d42677d992f428235c491b2016aa" },
"emmylua-nvim": { "branch": "master", "commit": "38720eb5f1dac8e87254fd944dbe0959b2e67d94" },
"everforest": { "branch": "master", "commit": "83b666410d7ae0eccf96dbbe3b4b6ac5b8172d38" },
"fidget.nvim": { "branch": "main", "commit": "0ba1e16d07627532b6cae915cc992ecac249fb97" },
"firenvim": { "branch": "master", "commit": "138424db463e6c0e862a05166a4ccc781cd7c19d" },
"gitlinker.nvim": { "branch": "master", "commit": "cc59f732f3d043b626c8702cb725c82e54d35c25" },
"gitsigns.nvim": { "branch": "main", "commit": "907ae8636016aab2f283576fc60d46ca3427e579" },
"gruvbox-material": { "branch": "master", "commit": "b5f8c6a6c1cda630c53b061b765068a0898d47a3" },
"hop.nvim": { "branch": "master", "commit": "1a1eceafe54b5081eae4cb91c723abd1d450f34b" },
"indent-blankline.nvim": { "branch": "master", "commit": "9637670896b68805430e2f72cf5d16be5b97a22a" },
"kanagawa.nvim": { "branch": "master", "commit": "a4e99f089110c6d00bc33f5497709200e914e763" },
"lazy.nvim": { "branch": "main", "commit": "2a9354c7d2368d78cbd5575a51a2af5bd8a6ad01" },
"lspkind-nvim": { "branch": "master", "commit": "57610d5ab560c073c465d6faf0c19f200cb67e6e" },
"lualine.nvim": { "branch": "master", "commit": "45e27ca739c7be6c49e5496d14fcf45a303c3a63" },
"markdown-preview.nvim": { "branch": "master", "commit": "02cc3874738bc0f86e4b91f09b8a0ac88aef8e96" },
"material.nvim": { "branch": "main", "commit": "1ecaa2d065a1ea308bd7702a77c2bf35ede8f536" },
"monokai.nvim": { "branch": "master", "commit": "b8bd44d5796503173627d7a1fc51f77ec3a08a63" },
"neoformat": { "branch": "master", "commit": "0c285d7a7c06a6ee88db70871a274797693fce42" },
"nightfox.nvim": { "branch": "main", "commit": "e886e39e592e89f316536a6f070365a9d88901c9" },
"nord.nvim": { "branch": "master", "commit": "15fbfc38a83980b93e169b32a1bf64757f1e2bf4" },
"nvim-bqf": { "branch": "main", "commit": "a906a9dfc1bd7b3ac51ac954e32e157ffad9a7cd" },
"nvim-cmp": { "branch": "main", "commit": "5dce1b778b85c717f6614e3f4da45e9f19f54435" },
"nvim-hlslens": { "branch": "main", "commit": "f0281591a59e95400babf61a96e59ba20e5c9533" },
"nvim-lspconfig": { "branch": "master", "commit": "cc388d3f6b9c7c943ae2b2dcd46ad470fd257f91" },
"nvim-notify": { "branch": "master", "commit": "94859430020f5cf32a1b97ddd9e596fed9db7981" },
"nvim-tree.lua": { "branch": "master", "commit": "94c7c810af205c0f00c8f105dcf490c8eb17658a" },
"nvim-treesitter": { "branch": "master", "commit": "bf8b089eecef9e9e8c1765f81613a2fd5e49175c" },
"nvim-web-devicons": { "branch": "master", "commit": "973ab742f143a796a779af4d786ec409116a0d87" },
"onedark.nvim": { "branch": "master", "commit": "dac8c39812dae025255c9069a260e1f69d967927" },
"onedarkpro.nvim": { "branch": "main", "commit": "fa861b992471d55f653751f1fea8769ca536a554" },
"open-browser.vim": { "branch": "master", "commit": "7d4c1d8198e889d513a030b5a83faa07606bac27" },
"plenary.nvim": { "branch": "master", "commit": "9ce85b0f7dcfe5358c0be937ad23e456907d410b" },
"rose-pine": { "branch": "main", "commit": "e29002cbee4854a9c8c4b148d8a52fae3176070f" },
"sonokai": { "branch": "master", "commit": "17308ee6d9c764bfc1e0fa97213e7a99701b4144" },
"tabular": { "branch": "master", "commit": "339091ac4dd1f17e225fe7d57b48aff55f99b23a" },
"targets.vim": { "branch": "master", "commit": "642d3a4ce306264b05ea3219920b13ea80931767" },
"telescope-symbols.nvim": { "branch": "master", "commit": "f2060117d965df4a626f068a4ebbd8ee051aa076" },
"telescope.nvim": { "branch": "master", "commit": "59812c26d826e8c717e29406267ea1260f71e103" },
"ultisnips": { "branch": "master", "commit": "24a3ebb36687b6d59a19d63173713575b486d739" },
"unicode.vim": { "branch": "master", "commit": "c8aa12b1e2e1b6254885b12bdb239ce6c885fdb1" },
"vim-auto-save": { "branch": "master", "commit": "2e3e54ea4c0fc946c21b0a4ee4c1c295ba736ee8" },
"vim-commentary": { "branch": "master", "commit": "e87cd90dc09c2a203e13af9704bd0ef79303d755" },
"vim-conflicted": { "branch": "master", "commit": "068c320796f807ac4961618e3e62316773803996" },
"vim-eunuch": { "branch": "master", "commit": "67f3dd32b4dcd1c427085f42ff5f29c7adc645c6" },
"vim-flog": { "branch": "master", "commit": "58c1d39ec42f92d23a1204b1869e5d1dece8b86c" },
"vim-fugitive": { "branch": "master", "commit": "6fcb0ad03982de646e3fecb6915e585651b9a9fb" },
"vim-grammarous": { "branch": "master", "commit": "db46357465ce587d5325e816235b5e92415f8c05" },
"vim-highlighturl": { "branch": "master", "commit": "012fee983e03913db6ba6393307eac434999b896" },
"vim-indent-object": { "branch": "master", "commit": "5c5b24c959478929b54a9e831a8e2e651a465965" },
"vim-markdown": { "branch": "master", "commit": "cc82d88e2a791f54d2b6e2b26e41f743351ac947" },
"vim-markdownfootnotes": { "branch": "master", "commit": "2b288149f48cfaf7465d25bb094ed62898f5e5b0" },
"vim-matchup": { "branch": "master", "commit": "6dbe108230c7dbbf00555b7d4d9f6a891837ef07" },
"vim-mundo": { "branch": "master", "commit": "b53d35fb5ca9923302b9ef29e618ab2db4cc675e" },
"vim-obsession": { "branch": "master", "commit": "fe9d3e1a9a50171e7d316a52e1e56d868e4c1fe5" },
"vim-python-pep8-indent": { "branch": "master", "commit": "60ba5e11a61618c0344e2db190210145083c91f8" },
"vim-pythonsense": { "branch": "master", "commit": "9200a57629c904ed2ab8c9b2e8c5649d311794ba" },
"vim-repeat": { "branch": "master", "commit": "24afe922e6a05891756ecf331f39a1f6743d3d5a" },
"vim-sandwich": { "branch": "master", "commit": "c5a2cc438ce6ea2005c556dc833732aa53cae21a" },
"vim-scriptease": { "branch": "master", "commit": "18511d389675d773994215ddb572ccdc2b72f52b" },
"vim-snippets": { "branch": "master", "commit": "ccc2fa1529d372f7ac16d5eb07a385a72b50e05d" },
"vim-swap": { "branch": "master", "commit": "9358bfdc5e377aa13e7c2c2dd8699ba32b0dcf83" },
"vim-tmux": { "branch": "master", "commit": "cfe76281efc29890548cf9eedd42ad51c7a1faf0" },
"vim-toml": { "branch": "main", "commit": "d36caa6b1cf508a4df1c691f915572fc02143258" },
"vim-xkbswitch": { "branch": "master", "commit": "42b55bfec8f6dbd715135ce582a6f769831face1" },
"vimtex": { "branch": "master", "commit": "2b8a5f16a5768b3ae1780c266b73022dbb658af1" },
"vista.vim": { "branch": "master", "commit": "40daf5e97be70a90465182fbbdfba92442bfd8e1" },
"which-key.nvim": { "branch": "main", "commit": "7ccf476ebe0445a741b64e36c78a682c1c6118b7" },
"whitespace.nvim": { "branch": "master", "commit": "f0fc9e9c4ce3f7d2166e9e5a069b64b9ca4a3f15" },
"wilder.nvim": { "branch": "master", "commit": "679f348dc90d80ff9ba0e7c470c40a4d038dcecf" },
"yanky.nvim": { "branch": "main", "commit": "4c85d8d6808d9859e72f8bd6c25302199e6a5eac" },
"zen-mode.nvim": { "branch": "main", "commit": "68f554702de63f4b7b6b6d4bcb10178f41a0acc7" }
}

View File

@@ -129,16 +129,6 @@ M.rand_colorscheme = function()
return
end
-- Load the colorscheme, because all the colorschemes are declared as opt plugins, so the colorscheme isn't loaded yet.
local status = utils.add_pack(M.colorscheme2dir[colorscheme])
if not status then
local msg = string.format("Colorscheme %s is not installed. Run PackerSync to install.", colorscheme)
vim.notify(msg, vim.log.levels.ERROR, { title = "nvim-config" })
return
end
-- Load the colorscheme and its settings
M[colorscheme]()

View File

@@ -9,7 +9,7 @@ require("bufferline").setup {
icon = "", -- this should be omitted if indicator style is not 'icon'
style = "icon",
},
buffer_close_icon = "",
buffer_close_icon = "",
modified_icon = "",
close_icon = "",
left_trunc_marker = "",

View File

@@ -2,7 +2,7 @@ local api = vim.api
local keymap = vim.keymap
local dashboard = require("dashboard")
conf = {}
local conf = {}
conf.header = {
" ",
" ",
@@ -21,25 +21,25 @@ conf.header = {
conf.center = {
{
icon = " ",
icon = "󰈞 ",
desc = "Find File ",
action = "Leaderf file --popup",
key = "<Leader> f f",
},
{
icon = " ",
icon = "󰈢 ",
desc = "Recently opened files ",
action = "Leaderf mru --popup",
key = "<Leader> f r",
},
{
icon = " ",
icon = "󰈬 ",
desc = "Project grep ",
action = "Leaderf rg --popup",
key = "<Leader> f g",
},
{
icon = " ",
icon = " ",
desc = "Open Nvim config ",
action = "tabnew $MYVIMRC | tcd %:p:h",
key = "<Leader> e v",
@@ -51,7 +51,7 @@ conf.center = {
key = "e",
},
{
icon = " ",
icon = "󰗼 ",
desc = "Quit Nvim ",
-- desc = "Quit Nvim ",
action = "qa",

View File

@@ -2,24 +2,36 @@ local keymap = vim.keymap
local gitlinker = require("gitlinker")
gitlinker.setup {
callbacks = {
["dev.azure.com"] = function(url_data)
vim.print(url_data)
local url = require"gitlinker.hosts".get_base_https_url(url_data)
if url_data.lstart then
if url_data.lend == nil then
url_data.lend = url_data.lstart
end
url = url .. "?path=/" .. url_data.file .. "&version=GC" .. url_data.rev .. "&line=" .. url_data.lstart .. "&lineEnd=" .. url_data.lend .. "&lineStartColumn=1" .. "&lineEndColumn=120"
end
return url
end
},
mappings = nil,
}
keymap.set({ "n", "v" }, "<leader>gl", "", {
keymap.set({ "n", "v" }, "<leader>gl", function()
local mode = string.lower(vim.fn.mode())
gitlinker.get_buf_range_url(mode)
end, {
silent = true,
desc = "get git permlink",
callback = function()
local mode = string.lower(vim.fn.mode())
gitlinker.get_buf_range_url(mode)
end,
})
keymap.set("n", "<leader>gb", "", {
keymap.set("n", "<leader>gb", function()
gitlinker.get_repo_url({
action_callback = gitlinker.actions.open_in_browser
})
end, {
silent = true,
desc = "browse repo in browser",
callback = function()
gitlinker.get_repo_url({
action_callback = gitlinker.actions.open_in_browser
})
end
})

View File

@@ -12,10 +12,11 @@ local activate_hlslens = function(direction)
local cmd = string.format("normal! %s%szzzv", vim.v.count1, direction)
local status, msg = pcall(vim.cmd, cmd)
-- Deal with the case that there is no such pattern in current buffer.
if not status then
-- 13 is the index where real error message starts
msg = msg:sub(13)
api.nvim_err_writeln(msg)
local start_idx, _ = string.find(msg, 'E486', 1, true)
local msg_part = string.sub(msg, start_idx)
api.nvim_err_writeln(msg_part)
return
end

View File

@@ -6,6 +6,18 @@ local diagnostic = vim.diagnostic
local utils = require("utils")
-- set quickfix list from diagnostics in a certain buffer, not the whole workspace
local set_qflist = function(buf_num, severity)
local diagnostics = nil
diagnostics = diagnostic.get(buf_num, { severity = severity })
local qf_items = diagnostic.toqflist(diagnostics)
vim.fn.setqflist({}, ' ', { title = 'Diagnostics', items = qf_items })
-- open quickfix by default
vim.cmd[[copen]]
end
local custom_attach = function(client, bufnr)
-- Mappings.
local map = function(mode, l, r, opts)
@@ -23,7 +35,10 @@ local custom_attach = function(client, bufnr)
map("n", "gr", vim.lsp.buf.references, { desc = "show references" })
map("n", "[d", diagnostic.goto_prev, { desc = "previous diagnostic" })
map("n", "]d", diagnostic.goto_next, { desc = "next diagnostic" })
map("n", "<space>q", diagnostic.setqflist, { desc = "put diagnostic to qf" })
-- this puts diagnostics from opened files to quickfix
map("n", "<space>qw", diagnostic.setqflist, { desc = "put window diagnostics to qf" })
-- this puts diagnostics from current buffer to quickfix
map("n", "<space>qb", function() set_qflist(bufnr) end, { desc = "put buffer diagnostics to qf" })
map("n", "<space>ca", vim.lsp.buf.code_action, { desc = "LSP code action" })
map("n", "<space>wa", vim.lsp.buf.add_workspace_folder, { desc = "add workspace folder" })
map("n", "<space>wr", vim.lsp.buf.remove_workspace_folder, { desc = "remove workspace folder" })
@@ -99,17 +114,40 @@ local capabilities = require('cmp_nvim_lsp').default_capabilities()
local lspconfig = require("lspconfig")
if utils.executable("pylsp") then
local venv_path = os.getenv('VIRTUAL_ENV')
local py_path = nil
-- decide which python executable to use for mypy
if venv_path ~= nil then
py_path = venv_path .. "/bin/python3"
else
py_path = vim.g.python3_host_prog
end
lspconfig.pylsp.setup {
on_attach = custom_attach,
settings = {
pylsp = {
plugins = {
-- formatter options
black = { enabled = true },
autopep8 = { enabled = false },
yapf = { enabled = false },
-- linter options
pylint = { enabled = true, executable = "pylint" },
ruff = { enabled = false },
pyflakes = { enabled = false },
pycodestyle = { enabled = false },
-- type checker
pylsp_mypy = {
enabled = true,
overrides = { "--python-executable", py_path, true },
report_progress = true,
live_mode = false
},
-- auto-completion options
jedi_completion = { fuzzy = true },
pyls_isort = { enabled = true },
pylsp_mypy = { enabled = true },
-- import sorting
isort = { enabled = true },
},
},
},
@@ -196,7 +234,7 @@ if utils.executable("lua-language-server") then
-- see also https://github.com/LuaLS/lua-language-server/wiki/Libraries#link-to-workspace .
-- Lua-dev.nvim also has similar settings for lua ls, https://github.com/folke/neodev.nvim/blob/main/lua/neodev/luals.lua .
library = {
fn.stdpath("data") .. "/site/pack/packer/opt/emmylua-nvim",
fn.stdpath("data") .. "/lazy/emmylua-nvim",
fn.stdpath("config"),
},
maxPreload = 2000,
@@ -209,10 +247,10 @@ if utils.executable("lua-language-server") then
end
-- Change diagnostic signs.
fn.sign_define("DiagnosticSignError", { text = "", texthl = "DiagnosticSignError" })
fn.sign_define("DiagnosticSignWarn", { text = "!", texthl = "DiagnosticSignWarn" })
fn.sign_define("DiagnosticSignInformation", { text = "", texthl = "DiagnosticSignInfo" })
fn.sign_define("DiagnosticSignHint", { text = "", texthl = "DiagnosticSignHint" })
fn.sign_define("DiagnosticSignError", { text = '🆇', texthl = "DiagnosticSignError" })
fn.sign_define("DiagnosticSignWarn", { text = '⚠️', texthl = "DiagnosticSignWarn" })
fn.sign_define("DiagnosticSignInfo", { text = '', texthl = "DiagnosticSignInfo" })
fn.sign_define("DiagnosticSignHint", { text = '', texthl = "DiagnosticSignHint" })
-- global config for diagnostic
diagnostic.config {

View File

@@ -18,12 +18,6 @@ nvim_tree.setup {
number = false,
relativenumber = false,
signcolumn = "yes",
mappings = {
custom_only = false,
list = {
-- user mappings go here
},
},
},
renderer = {
indent_markers = {
@@ -85,7 +79,7 @@ nvim_tree.setup {
enable = true,
chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890",
exclude = {
filetype = { "notify", "packer", "qf", "diff", "fugitive", "fugitiveblame" },
filetype = { "notify", "qf", "diff", "fugitive", "fugitiveblame" },
buftype = { "nofile", "terminal", "help" },
},
},

View File

@@ -127,6 +127,11 @@ require("lualine").setup {
spell,
color = { fg = "black", bg = "#a7c080" },
},
{
"diagnostics",
sources = { "nvim_diagnostic" },
symbols = {error = '🆇 ', warn = '⚠️ ', info = ' ', hint = ''},
},
},
lualine_x = {
"encoding",
@@ -140,13 +145,11 @@ require("lualine").setup {
},
"filetype",
},
lualine_y = { "progress" },
lualine_z = {
lualine_y = {
"location",
{
"diagnostics",
sources = { "nvim_diagnostic" },
},
"progress",
},
lualine_z = {
{
trailing_space,
color = "WarningMsg",

View File

@@ -1,5 +1,5 @@
require("nvim-treesitter.configs").setup {
ensure_installed = { "python", "cpp", "lua", "vim", "json" },
ensure_installed = { "python", "cpp", "lua", "vim", "json", "toml" },
ignore_install = {}, -- List of parsers to ignore installing
highlight = {
enable = true, -- false will disable the whole extension

View File

@@ -17,14 +17,33 @@ api.nvim_create_autocmd({ "BufRead" }, {
})
-- highlight yanked region, see `:h lua-highlight`
local yank_group = api.nvim_create_augroup("highlight_yank", { clear = true })
api.nvim_create_autocmd({ "TextYankPost" }, {
pattern = "*",
group = api.nvim_create_augroup("highlight_yank", { clear = true }),
group = yank_group,
callback = function()
vim.highlight.on_yank { higroup = "YankColor", timeout = 300 }
end,
})
api.nvim_create_autocmd({ "CursorMoved" }, {
pattern = "*",
group = yank_group,
callback = function()
vim.g.current_cursor_pos = vim.fn.getcurpos()
end,
})
api.nvim_create_autocmd("TextYankPost", {
pattern = "*",
group = yank_group,
callback = function(ev)
if vim.v.event.operator == 'y' then
vim.fn.setpos('.', vim.g.current_cursor_pos)
end
end,
})
-- Auto-create dir when saving a file, in case some intermediate directory does not exist
api.nvim_create_autocmd({ "BufWritePre" }, {
pattern = "*",

View File

@@ -201,20 +201,6 @@ end
-- insert semicolon in the end
keymap.set("i", "<A-;>", "<Esc>miA;<Esc>`ii")
-- Keep cursor position after yanking
keymap.set("n", "y", "myy")
api.nvim_create_autocmd("TextYankPost", {
pattern = "*",
group = api.nvim_create_augroup("restore_after_yank", { clear = true }),
callback = function()
vim.cmd([[
silent! normal! `y
silent! delmarks y
]])
end,
})
-- Go to the beginning and end of current line in insert mode quickly
keymap.set("i", "<C-A>", "<HOME>")
keymap.set("i", "<C-E>", "<END>")

View File

@@ -1,396 +1,503 @@
local api = vim.api
local fn = vim.fn
local utils = require("utils")
-- The root dir to install all plugins. Plugins are under opt/ or start/ sub-directory.
vim.g.plugin_home = fn.stdpath("data") .. "/site/pack/packer"
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
--- Install packer if it has not been installed.
--- Return:
--- true: if this is a fresh install of packer
--- false: if packer has been installed
local function packer_ensure_install()
-- Where to install packer.nvim -- the package manager (we make it opt)
local packer_dir = vim.g.plugin_home .. "/opt/packer.nvim"
if fn.glob(packer_dir) ~= "" then
return false
end
-- Auto-install packer in case it hasn't been installed.
vim.api.nvim_echo({ { "Installing packer.nvim", "Type" } }, true, {})
local packer_repo = "https://github.com/wbthomason/packer.nvim"
local install_cmd = string.format("!git clone --depth=1 %s %s", packer_repo, packer_dir)
vim.cmd(install_cmd)
return true
if not vim.loop.fs_stat(lazypath) then
vim.fn.system {
"git",
"clone",
"--filter=blob:none",
"https://github.com/folke/lazy.nvim.git",
"--branch=stable", -- latest stable release
lazypath,
}
end
local fresh_install = packer_ensure_install()
-- Load packer.nvim
vim.cmd("packadd packer.nvim")
local packer = require("packer")
local packer_util = require("packer.util")
vim.opt.rtp:prepend(lazypath)
-- check if firenvim is active
local firenvim_not_active = function()
return not vim.g.started_by_firenvim
end
packer.startup {
function(use)
use { "wbthomason/packer.nvim", opt = true }
use { "onsails/lspkind-nvim", event = "VimEnter" }
-- auto-completion engine
use { "hrsh7th/nvim-cmp", after = "lspkind-nvim", config = [[require('config.nvim-cmp')]] }
-- nvim-cmp completion sources
use { "hrsh7th/cmp-nvim-lsp", after = "nvim-cmp" }
use { "hrsh7th/cmp-path", after = "nvim-cmp" }
use { "hrsh7th/cmp-buffer", after = "nvim-cmp" }
use { "hrsh7th/cmp-omni", after = "nvim-cmp" }
use { "quangnguyen30192/cmp-nvim-ultisnips", after = { "nvim-cmp", "ultisnips" } }
if vim.g.is_mac then
use { "hrsh7th/cmp-emoji", after = "nvim-cmp" }
end
-- nvim-lsp configuration (it relies on cmp-nvim-lsp, so it should be loaded after cmp-nvim-lsp).
use { "neovim/nvim-lspconfig", after = "cmp-nvim-lsp", config = [[require('config.lsp')]] }
if vim.g.is_mac then
use {
"nvim-treesitter/nvim-treesitter",
event = "BufEnter",
run = ":TSUpdate",
config = [[require('config.treesitter')]],
}
end
-- Python indent (follows the PEP8 style)
use { "Vimjas/vim-python-pep8-indent", ft = { "python" } }
-- Python-related text object
use { "jeetsukumaran/vim-pythonsense", ft = { "python" } }
use { "machakann/vim-swap", event = "VimEnter" }
-- IDE for Lisp
if utils.executable("sbcl") then
-- use 'kovisoft/slimv'
use { "vlime/vlime", rtp = "vim/", ft = { "lisp" } }
end
-- Super fast buffer jump
use {
"phaazon/hop.nvim",
event = "VimEnter",
config = function()
vim.defer_fn(function()
require("config.nvim_hop")
end, 2000)
end,
}
-- Show match number and index for searching
use {
"kevinhwang91/nvim-hlslens",
branch = "main",
keys = { { "n", "*" }, { "n", "#" }, { "n", "n" }, { "n", "N" } },
config = [[require('config.hlslens')]],
}
-- File search, tag search and more
if vim.g.is_win then
use { "Yggdroot/LeaderF", cmd = "Leaderf" }
else
use { "Yggdroot/LeaderF", cmd = "Leaderf", run = ":LeaderfInstallCExtension" }
end
use {
"nvim-telescope/telescope.nvim",
cmd = "Telescope",
requires = { { "nvim-lua/plenary.nvim" } },
}
-- search emoji and other symbols
use { "nvim-telescope/telescope-symbols.nvim", after = "telescope.nvim" }
-- A list of colorscheme plugin you may want to try. Find what suits you.
use { "navarasu/onedark.nvim", opt = true }
use { "sainnhe/edge", opt = true }
use { "sainnhe/sonokai", opt = true }
use { "sainnhe/gruvbox-material", opt = true }
use { "shaunsingh/nord.nvim", opt = true }
use { "sainnhe/everforest", opt = true }
use { "EdenEast/nightfox.nvim", opt = true }
use { "rebelot/kanagawa.nvim", opt = true }
use { "catppuccin/nvim", as = "catppuccin", opt = true }
use({ "rose-pine/neovim", as = 'rose-pine', opt = true })
use { "olimorris/onedarkpro.nvim", opt = true }
use { "tanvirtin/monokai.nvim", opt = true }
use { "marko-cerovac/material.nvim", opt = true }
use { "nvim-tree/nvim-web-devicons", event = "VimEnter" }
use {
"nvim-lualine/lualine.nvim",
event = "VimEnter",
cond = firenvim_not_active,
config = [[require('config.statusline')]],
}
use { "akinsho/bufferline.nvim", event = "VimEnter",
cond = firenvim_not_active,
config = [[require('config.bufferline')]] }
-- fancy start screen
use { "nvimdev/dashboard-nvim", event = "VimEnter",
cond = firenvim_not_active,
config = [[require('config.dashboard-nvim')]]
}
use {
"lukas-reineke/indent-blankline.nvim",
event = "VimEnter",
config = [[require('config.indent-blankline')]],
}
-- Highlight URLs inside vim
use { "itchyny/vim-highlighturl", event = "VimEnter" }
-- notification plugin
use {
"rcarriga/nvim-notify",
event = "BufEnter",
config = function()
vim.defer_fn(function()
require("config.nvim-notify")
end, 2000)
end,
}
-- For Windows and Mac, we can open an URL in the browser. For Linux, it may
-- not be possible since we maybe in a server which disables GUI.
if vim.g.is_win or vim.g.is_mac then
-- open URL in browser
use { "tyru/open-browser.vim", event = "VimEnter" }
end
-- Only install these plugins if ctags are installed on the system
if utils.executable("ctags") then
-- show file tags in vim window
use { "liuchengxu/vista.vim", cmd = "Vista" }
end
-- Snippet engine and snippet template
use { "SirVer/ultisnips", event = "InsertEnter" }
use { "honza/vim-snippets", after = "ultisnips" }
-- Automatic insertion and deletion of a pair of characters
use { "Raimondi/delimitMate", event = "InsertEnter" }
-- Comment plugin
use { "tpope/vim-commentary", event = "VimEnter" }
-- Multiple cursor plugin like Sublime Text?
-- use 'mg979/vim-visual-multi'
-- Autosave files on certain events
use { "907th/vim-auto-save", event = "InsertEnter" }
-- Show undo history visually
use { "simnalamburt/vim-mundo", cmd = { "MundoToggle", "MundoShow" } }
-- better UI for some nvim actions
use {'stevearc/dressing.nvim'}
-- Manage your yank history
use({
"gbprod/yanky.nvim",
config = [[require('config.yanky')]]
})
-- Handy unix command inside Vim (Rename, Move etc.)
use { "tpope/vim-eunuch", cmd = { "Rename", "Delete" } }
-- Repeat vim motions
use { "tpope/vim-repeat", event = "VimEnter" }
use { "nvim-zh/better-escape.vim", event = { "InsertEnter" } }
if vim.g.is_mac then
use { "lyokha/vim-xkbswitch", event = { "InsertEnter" } }
elseif vim.g.is_win then
use { "Neur1n/neuims", event = { "InsertEnter" } }
end
-- Auto format tools
use { "sbdchd/neoformat", cmd = { "Neoformat" } }
-- Git command inside vim
use { "tpope/vim-fugitive", event = "User InGitRepo", config = [[require('config.fugitive')]] }
-- Better git log display
use { "rbong/vim-flog", requires = "tpope/vim-fugitive", cmd = { "Flog" } }
use { "christoomey/vim-conflicted", requires = "tpope/vim-fugitive", cmd = { "Conflicted" } }
use {
"ruifm/gitlinker.nvim",
requires = "nvim-lua/plenary.nvim",
event = "User InGitRepo",
config = [[require('config.git-linker')]],
}
-- Show git change (change, delete, add) signs in vim sign column
use { "lewis6991/gitsigns.nvim", config = [[require('config.gitsigns')]] }
-- Better git commit experience
use { "rhysd/committia.vim", opt = true, setup = [[vim.cmd('packadd committia.vim')]] }
use { "kevinhwang91/nvim-bqf", ft = "qf", config = [[require('config.bqf')]] }
-- Another markdown plugin
use { "preservim/vim-markdown", ft = { "markdown" } }
-- Faster footnote generation
use { "vim-pandoc/vim-markdownfootnotes", ft = { "markdown" } }
-- Vim tabular plugin for manipulate tabular, required by markdown plugins
use { "godlygeek/tabular", cmd = { "Tabularize" } }
-- Markdown previewing (only for Mac and Windows)
if vim.g.is_win or vim.g.is_mac then
use {
"iamcco/markdown-preview.nvim",
run = "cd app && npm install",
ft = { "markdown" },
}
end
use { "folke/zen-mode.nvim", cmd = "ZenMode", config = [[require('config.zen-mode')]] }
if vim.g.is_mac then
use { "rhysd/vim-grammarous", ft = { "markdown" } }
end
use { "chrisbra/unicode.vim", event = "VimEnter" }
-- Additional powerful text object for vim, this plugin should be studied
-- carefully to use its full power
use { "wellle/targets.vim", event = "VimEnter" }
-- Plugin to manipulate character pairs quickly
use { "machakann/vim-sandwich", event = "VimEnter" }
-- Add indent object for vim (useful for languages like Python)
use { "michaeljsmith/vim-indent-object", event = "VimEnter" }
-- Only use these plugin on Windows and Mac and when LaTeX is installed
if utils.executable("latex") then
use { "lervag/vimtex", ft = { "tex" } }
end
-- Since tmux is only available on Linux and Mac, we only enable these plugins
-- for Linux and Mac
if utils.executable("tmux") then
-- .tmux.conf syntax highlighting and setting check
use { "tmux-plugins/vim-tmux", ft = { "tmux" } }
end
-- Modern matchit implementation
use { "andymass/vim-matchup", event = "VimEnter" }
use { "tpope/vim-scriptease", cmd = { "Scriptnames", "Message", "Verbose" } }
-- Asynchronous command execution
use { "skywind3000/asyncrun.vim", opt = true, cmd = { "AsyncRun" } }
use { "cespare/vim-toml", ft = { "toml" }, branch = "main" }
-- Edit text area in browser using nvim
if vim.g.is_win or vim.g.is_mac then
use {
"glacambre/firenvim",
run = function()
fn["firenvim#install"](0)
end,
opt = true,
setup = [[vim.cmd('packadd firenvim')]],
}
end
-- Debugger plugin
if vim.g.is_win or vim.g.is_linux then
use { "sakhnik/nvim-gdb", run = { "bash install.sh" }, opt = true, setup = [[vim.cmd('packadd nvim-gdb')]] }
end
-- Session management plugin
use { "tpope/vim-obsession", cmd = "Obsession" }
if vim.g.is_linux then
use { "ojroques/vim-oscyank", cmd = { "OSCYank", "OSCYankReg" } }
end
-- The missing auto-completion for cmdline!
use { "gelguy/wilder.nvim", opt = true, setup = [[vim.cmd('packadd wilder.nvim')]] }
-- showing keybindings
use {
"folke/which-key.nvim",
event = "VimEnter",
config = function()
vim.defer_fn(function()
require("config.which-key")
end, 2000)
end,
}
-- show and trim trailing whitespaces
use { "jdhao/whitespace.nvim", event = "VimEnter" }
-- file explorer
use {
"nvim-tree/nvim-tree.lua",
requires = { "nvim-tree/nvim-web-devicons" },
config = [[require('config.nvim-tree')]],
}
use { "ii14/emmylua-nvim", ft = "lua" }
use { "j-hui/fidget.nvim", after = "nvim-lspconfig", tag = "legacy", config = [[require('config.fidget-nvim')]] }
end,
config = {
max_jobs = 16,
compile_path = packer_util.join_paths(fn.stdpath("data"), "site", "lua", "packer_compiled.lua"),
local plugin_specs = {
-- auto-completion engine
{
"hrsh7th/nvim-cmp",
-- event = 'InsertEnter',
event = "VeryLazy",
dependencies = {
"hrsh7th/cmp-nvim-lsp",
"onsails/lspkind-nvim",
"hrsh7th/cmp-path",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-omni",
"hrsh7th/cmp-emoji",
"quangnguyen30192/cmp-nvim-ultisnips",
},
config = function()
require("config.nvim-cmp")
end,
},
{
"neovim/nvim-lspconfig",
event = { "BufRead", "BufNewFile" },
config = function()
require("config.lsp")
end,
},
{
"nvim-treesitter/nvim-treesitter",
enabled = function()
if vim.g.is_mac then
return true
end
return false
end,
event = "VeryLazy",
build = ":TSUpdate",
config = function()
require("config.treesitter")
end,
},
-- Python indent (follows the PEP8 style)
{ "Vimjas/vim-python-pep8-indent", ft = { "python" } },
-- Python-related text object
{ "jeetsukumaran/vim-pythonsense", ft = { "python" } },
{ "machakann/vim-swap", event = "VeryLazy" },
-- IDE for Lisp
-- 'kovisoft/slimv'
{
"vlime/vlime",
enabled = function()
if utils.executable("sbcl") then
return true
end
return false
end,
config = function(plugin)
vim.opt.rtp:append(plugin.dir .. "/vim")
end,
ft = { "lisp" },
},
-- Super fast buffer jump
{
"phaazon/hop.nvim",
event = "VeryLazy",
config = function()
vim.defer_fn(function()
require("config.nvim_hop")
end, 2000)
end,
},
-- Show match number and index for searching
{
"kevinhwang91/nvim-hlslens",
branch = "main",
keys = { "*", "#", "n", "N" },
config = function()
require("config.hlslens")
end,
},
{
"Yggdroot/LeaderF",
cmd = "Leaderf",
build = function()
if not vim.g.is_win then
vim.cmd(":LeaderfInstallCExtension")
end
end,
},
"nvim-lua/plenary.nvim",
{
"nvim-telescope/telescope.nvim",
cmd = "Telescope",
dependencies = {
"nvim-telescope/telescope-symbols.nvim",
},
},
-- A list of colorscheme plugin you may want to try. Find what suits you.
{ "navarasu/onedark.nvim", lazy = true },
{ "sainnhe/edge", lazy = true },
{ "sainnhe/sonokai", lazy = true },
{ "sainnhe/gruvbox-material", lazy = true },
{ "shaunsingh/nord.nvim", lazy = true },
{ "sainnhe/everforest", lazy = true },
{ "EdenEast/nightfox.nvim", lazy = true },
{ "rebelot/kanagawa.nvim", lazy = true },
{ "catppuccin/nvim", name = "catppuccin", lazy = true },
{ "rose-pine/neovim", name = "rose-pine", lazy = true },
{ "olimorris/onedarkpro.nvim", lazy = true },
{ "tanvirtin/monokai.nvim", lazy = true },
{ "marko-cerovac/material.nvim", lazy = true },
{ "nvim-tree/nvim-web-devicons", event = "VeryLazy" },
{
"nvim-lualine/lualine.nvim",
event = "VeryLazy",
cond = firenvim_not_active,
config = function()
require("config.statusline")
end,
},
{
"akinsho/bufferline.nvim",
event = { "BufEnter" },
cond = firenvim_not_active,
config = function()
require("config.bufferline")
end,
},
-- fancy start screen
{
"nvimdev/dashboard-nvim",
cond = firenvim_not_active,
config = function()
require("config.dashboard-nvim")
end,
},
{
"lukas-reineke/indent-blankline.nvim",
event = "VeryLazy",
config = function()
require("config.indent-blankline")
end,
},
-- Highlight URLs inside vim
{ "itchyny/vim-highlighturl", event = "VeryLazy" },
-- notification plugin
{
"rcarriga/nvim-notify",
event = "VeryLazy",
config = function()
vim.defer_fn(function()
require("config.nvim-notify")
end, 2000)
end,
},
-- For Windows and Mac, we can open an URL in the browser. For Linux, it may
-- not be possible since we maybe in a server which disables GUI.
{
"tyru/open-browser.vim",
enabled = function()
if vim.g.is_win or vim.g.is_mac then
return true
else
return false
end
end,
event = "VeryLazy",
},
-- Only install these plugins if ctags are installed on the system
-- show file tags in vim window
{
"liuchengxu/vista.vim",
enabled = function()
if utils.executable("ctags") then
return true
else
return false
end
end,
cmd = "Vista",
},
-- Snippet engine and snippet template
{ "SirVer/ultisnips", dependencies = {
"honza/vim-snippets",
}, event = "InsertEnter" },
-- Automatic insertion and deletion of a pair of characters
{ "Raimondi/delimitMate", event = "InsertEnter" },
-- Comment plugin
{ "tpope/vim-commentary", event = "VeryLazy" },
-- Multiple cursor plugin like Sublime Text?
-- 'mg979/vim-visual-multi'
-- Autosave files on certain events
{ "907th/vim-auto-save", event = "InsertEnter" },
-- Show undo history visually
{ "simnalamburt/vim-mundo", cmd = { "MundoToggle", "MundoShow" } },
-- better UI for some nvim actions
{ "stevearc/dressing.nvim" },
-- Manage your yank history
{
"gbprod/yanky.nvim",
cmd = { "YankyRingHistory" },
config = function()
require("config.yanky")
end,
},
-- Handy unix command inside Vim (Rename, Move etc.)
{ "tpope/vim-eunuch", cmd = { "Rename", "Delete" } },
-- Repeat vim motions
{ "tpope/vim-repeat", event = "VeryLazy" },
{ "nvim-zh/better-escape.vim", event = { "InsertEnter" } },
{
"lyokha/vim-xkbswitch",
enabled = function()
if vim.g.is_mac and utils.executable("xkbswitch") then
return true
end
return false
end,
event = { "InsertEnter" },
},
{
"Neur1n/neuims",
enabled = function()
if vim.g.is_win then
return true
end
return false
end,
event = { "InsertEnter" },
},
-- Auto format tools
{ "sbdchd/neoformat", cmd = { "Neoformat" } },
-- Git command inside vim
{
"tpope/vim-fugitive",
event = "User InGitRepo",
config = function()
require("config.fugitive")
end,
},
-- Better git log display
{ "rbong/vim-flog", cmd = { "Flog" } },
{ "christoomey/vim-conflicted", cmd = { "Conflicted" } },
{
"ruifm/gitlinker.nvim",
event = "User InGitRepo",
config = function()
require("config.git-linker")
end,
},
-- Show git change (change, delete, add) signs in vim sign column
{
"lewis6991/gitsigns.nvim",
config = function()
require("config.gitsigns")
end,
},
-- Better git commit experience
{ "rhysd/committia.vim", lazy = true },
{
"kevinhwang91/nvim-bqf",
ft = "qf",
config = function()
require("config.bqf")
end,
},
-- Another markdown plugin
{ "preservim/vim-markdown", ft = { "markdown" } },
-- Faster footnote generation
{ "vim-pandoc/vim-markdownfootnotes", ft = { "markdown" } },
-- Vim tabular plugin for manipulate tabular, required by markdown plugins
{ "godlygeek/tabular", cmd = { "Tabularize" } },
-- Markdown previewing (only for Mac and Windows)
{
"iamcco/markdown-preview.nvim",
enabled = function()
if vim.g.is_win or vim.g.is_mac then
return true
end
return false
end,
build = "cd app && npm install",
ft = { "markdown" },
},
{
"folke/zen-mode.nvim",
cmd = "ZenMode",
config = function()
require("config.zen-mode")
end,
},
{
"rhysd/vim-grammarous",
enabled = function()
if vim.g.is_mac then
return true
end
return false
end,
ft = { "markdown" },
},
{ "chrisbra/unicode.vim", event = "VeryLazy" },
-- Additional powerful text object for vim, this plugin should be studied
-- carefully to use its full power
{ "wellle/targets.vim", event = "VeryLazy" },
-- Plugin to manipulate character pairs quickly
{ "machakann/vim-sandwich", event = "VeryLazy" },
-- Add indent object for vim (useful for languages like Python)
{ "michaeljsmith/vim-indent-object", event = "VeryLazy" },
-- Only use these plugin on Windows and Mac and when LaTeX is installed
{
"lervag/vimtex",
enabled = function()
if utils.executable("latex") then
return true
end
return false
end,
ft = { "tex" },
},
-- Since tmux is only available on Linux and Mac, we only enable these plugins
-- for Linux and Mac
-- .tmux.conf syntax highlighting and setting check
{
"tmux-plugins/vim-tmux",
enabled = function()
if utils.executable("tmux") then
return true
end
return false
end,
ft = { "tmux" },
},
-- Modern matchit implementation
{ "andymass/vim-matchup", event = "BufRead" },
{ "tpope/vim-scriptease", cmd = { "Scriptnames", "Message", "Verbose" } },
-- Asynchronous command execution
{ "skywind3000/asyncrun.vim", lazy = true, cmd = { "AsyncRun" } },
{ "cespare/vim-toml", ft = { "toml" }, branch = "main" },
-- Edit text area in browser using nvim
{
"glacambre/firenvim",
enabled = function()
if vim.g.is_win or vim.g.is_mac then
return true
end
return false
end,
build = function()
vim.fn["firenvim#install"](0)
end,
lazy = true,
},
-- Debugger plugin
{
"sakhnik/nvim-gdb",
enabled = function()
if vim.g.is_win or vim.g.is_linux then
return true
end
return false
end,
build = { "bash install.sh" },
lazy = true,
},
-- Session management plugin
{ "tpope/vim-obsession", cmd = "Obsession" },
{
"ojroques/vim-oscyank",
enabled = function()
if vim.g.is_linux then
return true
end
return false
end,
cmd = { "OSCYank", "OSCYankReg" },
},
-- The missing auto-completion for cmdline!
{
"gelguy/wilder.nvim",
build = ":UpdateRemotePlugins",
},
-- showing keybindings
{
"folke/which-key.nvim",
event = "VeryLazy",
config = function()
vim.defer_fn(function()
require("config.which-key")
end, 2000)
end,
},
-- show and trim trailing whitespaces
{ "jdhao/whitespace.nvim", event = "VeryLazy" },
-- file explorer
{
"nvim-tree/nvim-tree.lua",
keys = { "<space>s" },
dependencies = { "nvim-tree/nvim-web-devicons" },
config = function()
require("config.nvim-tree")
end,
},
{ "ii14/emmylua-nvim", ft = "lua" },
{
"j-hui/fidget.nvim",
event = "VeryLazy",
tag = "legacy",
config = function()
require("config.fidget-nvim")
end,
},
}
-- For fresh install, we need to install plugins. Otherwise, we just need to require `packer_compiled.lua`.
if fresh_install then
-- We run packer.sync() here, because only after packer.startup, can we know which plugins to install.
-- So plugin installation should be done after the startup process.
packer.sync()
else
local status, _ = pcall(require, "packer_compiled")
if not status then
local msg = "File packer_compiled.lua not found: run PackerSync to fix!"
vim.notify(msg, vim.log.levels.ERROR, { title = "nvim-config" })
end
end
-- configuration for lazy itself.
local lazy_opts = {
ui = {
border = "rounded",
title = "Plugin Manager",
title_pos = "center",
},
}
-- Auto-generate packer_compiled.lua file
api.nvim_create_autocmd({ "BufWritePost" }, {
pattern = "*/nvim/lua/plugins.lua",
group = api.nvim_create_augroup("packer_auto_compile", { clear = true }),
callback = function(ctx)
local cmd = "source " .. ctx.file
vim.cmd(cmd)
vim.cmd("PackerCompile")
vim.notify("PackerCompile done!", vim.log.levels.INFO, { title = "Nvim-config" })
end,
})
require("lazy").setup(plugin_specs, lazy_opts)

View File

@@ -458,3 +458,12 @@ pyright
stubgen
pylance
variadic
Vimium
Databricks
Jira
databricks
FastAPI
pylintrc
PYTHONPATH
Uvicorn
qpdf