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

53 Commits

Author SHA1 Message Date
jdhao
d40d87cb61 nvim 0.8 update 2022-10-04 19:34:20 +08:00
jdhao
81663c8f3c update markdown-preview.nvim install method 2022-10-04 13:15:26 +08:00
jdhao
2c7e4aa87a Merge pull request #123 from jdhao/repolink
update repo link for transferred plugins
2022-09-29 00:00:12 +08:00
jdhao
07dd60206b update repo link for transferred plugins 2022-09-28 23:57:36 +08:00
jdhao
c3d4eb371b Merge pull request #122 from jdhao/opt
always use sign column
2022-09-28 23:40:12 +08:00
jdhao
597a2aba80 always use sign column 2022-09-28 23:39:09 +08:00
jdhao
f1f6d0b351 Merge pull request #121 from jdhao/clean
remove config for unused plugins
2022-09-28 23:37:54 +08:00
jdhao
e1930ba153 remove config for unused plugins
vim-signify, vim-startify
2022-09-28 23:36:44 +08:00
jdhao
a8db734e75 Merge pull request #120 from jdhao/firenvim
update conf related to firenvim
2022-09-28 23:32:48 +08:00
jdhao
4026baef19 update conf related to firenvim
1. Change autocmd for buffers started by firenivm, it seems that
   BufNewFile does not work as intended, in contrast, BufEnter, BufRead,
   BufWinEnter seem to work.
2. Disable several plugins if we are using firenvim, these plugins
   include dashboard-nvim, lualine, bufferline.nvim
2022-09-28 23:22:23 +08:00
jdhao
f63152f79b Merge pull request #118 from jdhao/gitsign
hilight update for gitsigns.nvim
2022-09-28 00:32:57 +08:00
jdhao
5229c460ea hilight update for gitsigns.nvim 2022-09-28 00:32:07 +08:00
jdhao
f308ccad7b Merge pull request #116 from jdhao/fugitive
correct :git to :Git
2022-09-25 23:44:13 +08:00
jdhao
09dd81bf67 correct :git to :Git 2022-09-25 23:42:50 +08:00
jdhao
5ecb74ad85 more mapping and doc update for gitlinker 2022-09-25 23:39:33 +08:00
jdhao
773003b71b Merge pull request #115 from jdhao/sql
change sql comment style
2022-09-25 23:15:51 +08:00
jdhao
f5097b44b9 change sql comment style 2022-09-25 23:02:16 +08:00
jdhao
238886c136 Merge pull request #114 from jdhao/setup
fix: variable case not consistent, close #113
2022-09-25 11:02:47 +08:00
jdhao
2fccb59293 fix: variable case not consistent, close #113 2022-09-25 11:01:30 +08:00
jdhao
830297a973 Merge pull request #111 from jdhao/gitsign
enable word diff for gitsigns.nvim
2022-09-24 15:37:15 +08:00
jdhao
1f3fcc604a enable word diff for gitsigns.nvim
Also tweak the highlight for word diff to make clear. The default
highlgiht for word diff is TermCursor, which is unreadable.
2022-09-24 15:34:54 +08:00
jdhao
7f5bf5a1b2 Merge pull request #110 from jdhao/nvimtree
update nvim-tree conf
2022-09-23 20:46:49 +08:00
jdhao
81bc5e46f1 update nvim-tree conf 2022-09-23 20:45:58 +08:00
jdhao
b4c3b7eba0 Merge pull request #109 from jdhao/spell
update spell
2022-09-20 01:20:19 +08:00
jdhao
4203410878 update spell 2022-09-20 01:19:44 +08:00
jdhao
9f58c3b7a5 Merge pull request #108 from jdhao/gitsign
update gitsigns conf
2022-09-20 01:18:00 +08:00
jdhao
45d0d68b9e update gitsigns conf 2022-09-20 01:15:16 +08:00
jdhao
74a9767018 Merge pull request #107 from jdhao/option
noruler
2022-09-15 12:19:31 +08:00
jdhao
ab25bfc9c4 noruler 2022-09-15 12:18:26 +08:00
jdhao
ebbdb27d01 Merge pull request #106 from chaoqunya/chaoqunya-fix-typo-in-mappings
typo fixed
2022-09-13 14:27:15 +08:00
chaoqunya
1b1f0199da typo fixed 2022-09-13 14:22:46 +08:00
jdhao
40fa9aab1c Merge pull request #104 from jdhao/global
global.vim --> global.lua
2022-09-11 18:24:10 +08:00
jdhao
6e8e61e53a global.vim --> global.lua
fix 2

fix 3
2022-09-11 18:21:56 +08:00
jdhao
89effe8b17 Merge pull request #103 from jdhao/format
format with stylua
2022-09-10 23:56:04 +08:00
jdhao
aaeb6a813a format with stylua 2022-09-10 23:55:22 +08:00
jdhao
9ba728e201 Merge pull request #102 from jdhao/lualine
use gitsigns for diff
2022-09-10 22:57:06 +08:00
jdhao
e5f1b4d224 use gitsigns for diff
Lualine's builtin diff often disappears and is not reliable, which is really frustrating for me.
2022-09-10 22:55:22 +08:00
jdhao
eaddee0c5c Merge pull request #101 from jdhao/lsp-map
refactor: lsp mapping
2022-09-09 19:42:42 +08:00
jdhao
0582f26abe refactor: lsp mapping 2022-09-09 19:42:01 +08:00
jdhao
e209ef686a Merge pull request #100 from jdhao/hlslens
update hlslens conf
2022-09-09 19:22:18 +08:00
jdhao
8b3610ed3d update hlslens conf 2022-09-09 19:21:25 +08:00
jdhao
bde6083f22 Merge pull request #99 from jonghoonseo/master
Use node dir when already installed
2022-09-09 19:15:02 +08:00
Jonghoon Seo
c1f139108a Use node dir when already installed 2022-09-09 05:30:41 +09:00
jdhao
3bb8b224e7 Merge pull request #98 from jdhao/clean-plug
remove unused plugins
2022-09-08 20:36:19 +08:00
jdhao
b69320b4e2 remove unused plugins 2022-09-08 20:35:34 +08:00
jdhao
5c63ade4a0 Merge pull request #97 from jdhao/gitsigns
use gitsigns instead of signify
2022-09-08 20:33:06 +08:00
jdhao
b504c932e6 use gitsigns instead of signify 2022-09-08 20:31:33 +08:00
jdhao
a39befff93 Merge pull request #96 from jdhao/map
update mapping
2022-09-08 13:20:45 +08:00
jdhao
309c8ad636 update mapping 2022-09-08 13:19:34 +08:00
jdhao
954a4a1cad Merge pull request #95 from jdhao/error-msg
refactor: use nvim_err_writeln for error msg
2022-09-07 23:36:49 +08:00
jdhao
67a322c26c refactor: use nvim_err_writeln for error msg 2022-09-07 23:35:18 +08:00
jdhao
91c9dbe40d Merge pull request #94 from jdhao/neovide
add neovide conf
2022-09-07 23:31:57 +08:00
jdhao
6a5f1d24a7 add neovide conf 2022-09-07 23:30:52 +08:00
36 changed files with 670 additions and 623 deletions

View File

@@ -3,4 +3,4 @@ line_endings = "Unix"
indent_type = "Spaces"
indent_width = 2
quote_style = "AutoPreferDouble"
no_call_parentheses = true
call_parentheses= "NoSingleTable"

View File

@@ -58,7 +58,7 @@ and how to set up on different platforms (Linux, macOS, and Windows).
+ 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).
+ Better escaping from insert mode via [better-escape.vim](https://github.com/jdhao/better-escape.vim).
+ Better escaping from insert mode via [better-escape.vim](https://github.com/nvim-zh/better-escape.vim).
+ Ultra-fast project-wide fuzzy searching via [LeaderF](https://github.com/Yggdroot/LeaderF).
+ Faster code commenting via [vim-commentary](https://github.com/tpope/vim-commentary).
+ Faster matching pair insertion and jump via [delimitMate](https://github.com/Raimondi/delimitMate).
@@ -75,7 +75,7 @@ and how to set up on different platforms (Linux, macOS, and Windows).
+ Code highlighting via [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter).
+ Code editing using true nvim inside browser via [firenvim](https://github.com/glacambre/firenvim).
+ Beautiful colorscheme via [sainnhe/gruvbox-material](https://github.com/sainnhe/gruvbox-material) and other colorschemes.
+ Markdown writing and previewing via [vim-markdown](https://github.com/plasticboy/vim-markdown) and [markdown-preview.nvim](https://github.com/iamcco/markdown-preview.nvim).
+ Markdown writing and previewing via [vim-markdown](https://github.com/preservim/vim-markdown) and [markdown-preview.nvim](https://github.com/iamcco/markdown-preview.nvim).
+ LaTeX editing and previewing via [vimtex](https://github.com/lervag/vimtex) <sup id="a1">[1](#f1)</sup>.
+ Animated GUI style notification via [nvim-notify](https://github.com/rcarriga/nvim-notify).
+ Smooth scroll experience via [neoscroll](https://github.com/karb94/neoscroll.nvim).
@@ -167,6 +167,8 @@ Some of the shortcuts I use frequently are listed here. In the following shortcu
| `<leader>gc` | Normal | Linux/macOS/Win | Run git commit |
| `<leader>gpl` | Normal | Linux/macOS/Win | Run git pull |
| `<leader>gpu` | Normal | Linux/macOS/Win | Run git push |
| `<leader>gl` | Normal/Visual | Linux/macOS/Win | Get perm link for current/visually-select lines
| `<leader>gb` | Normal | macOS | Browse current git repo in browser
| `<F9>` | Normal | Linux/macOS/Win | Compile&run current source file (for C++, LaTeX, Lua, Python) |
| `<F11>` | Normal | Linux/macOS/Win | Toggle spell checking |
| `<F12>` | Normal | Linux/macOS/Win | Toggle paste mode |

1
after/ftplugin/sql.vim Normal file
View File

@@ -0,0 +1 @@
set commentstring=--\ %s

View File

@@ -1,6 +1,6 @@
--- This module will load a random colorscheme on nvim startup process.
local utils = require('utils')
local utils = require("utils")
local M = {}
@@ -8,16 +8,16 @@ local M = {}
-- the same as the colorscheme name itself.
M.colorscheme2dir = {
gruvbox8 = "vim-gruvbox8",
onedark = 'onedark.nvim',
edge = 'edge',
sonokai = 'sonokai',
gruvbox_material = 'gruvbox-material',
nord = 'nord.nvim',
doom_one = 'doom-one.nvim',
everforest = 'everforest',
nightfox = 'nightfox.nvim',
kanagawa = 'kanagawa.nvim',
catppuccin = 'catppuccin'
onedark = "onedark.nvim",
edge = "edge",
sonokai = "sonokai",
gruvbox_material = "gruvbox-material",
nord = "nord.nvim",
doom_one = "doom-one.nvim",
everforest = "everforest",
nightfox = "nightfox.nvim",
kanagawa = "kanagawa.nvim",
catppuccin = "catppuccin",
}
M.gruvbox8 = function()
@@ -28,57 +28,55 @@ M.gruvbox8 = function()
vim.g.gruvbox_filetype_hi_groups = 1
vim.g.gruvbox_plugin_hi_groups = 1
vim.cmd [[colorscheme gruvbox8_hard]]
vim.cmd([[colorscheme gruvbox8_hard]])
end
M.onedark = function()
vim.cmd [[colorscheme onedark]]
vim.cmd([[colorscheme onedark]])
end
M.edge = function()
vim.g.edge_enable_italic = 1
vim.g.edge_better_performance = 1
vim.cmd [[colorscheme edge]]
vim.cmd([[colorscheme edge]])
end
M.sonokai = function()
vim.g.sonokai_enable_italic = 1
vim.g.sonokai_better_performance = 1
vim.cmd [[colorscheme sonokai]]
vim.cmd([[colorscheme sonokai]])
end
M.gruvbox_material = function()
vim.g.gruvbox_material_enable_italic = 1
vim.g.gruvbox_material_better_performance = 1
vim.cmd [[colorscheme gruvbox-material]]
vim.cmd([[colorscheme gruvbox-material]])
end
M.nord = function()
vim.cmd [[colorscheme nord]]
vim.cmd([[colorscheme nord]])
end
M.doom_one = function()
vim.cmd [[colorscheme doom-one]]
vim.cmd([[colorscheme doom-one]])
end
M.everforest = function()
vim.g.everforest_enable_italic = 1
vim.g.everforest_better_performance = 1
vim.cmd [[colorscheme everforest]]
vim.cmd([[colorscheme everforest]])
end
M.nightfox = function()
vim.cmd [[colorscheme nordfox]]
vim.cmd([[colorscheme nordfox]])
end
M.kanagawa = function()
vim.cmd [[colorscheme kanagawa]]
vim.cmd([[colorscheme kanagawa]])
end
M.catppuccin = function()
@@ -87,17 +85,16 @@ M.catppuccin = function()
require("catppuccin").setup()
vim.cmd [[colorscheme catppuccin]]
vim.cmd([[colorscheme catppuccin]])
end
--- Use a random colorscheme from the pre-defined list of colorschemes.
M.rand_colorscheme = function ()
M.rand_colorscheme = function()
local colorscheme = utils.rand_element(vim.tbl_keys(M.colorscheme2dir))
if not vim.tbl_contains(vim.tbl_keys(M), colorscheme) then
local msg = "Invalid colorscheme: " .. colorscheme
vim.notify(msg, vim.log.levels.ERROR, { title = 'nvim-config' })
vim.notify(msg, vim.log.levels.ERROR, { title = "nvim-config" })
return
end
@@ -107,7 +104,7 @@ M.rand_colorscheme = function ()
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' })
vim.notify(msg, vim.log.levels.ERROR, { title = "nvim-config" })
return
end
@@ -115,10 +112,10 @@ M.rand_colorscheme = function ()
-- Load the colorscheme and its settings
M[colorscheme]()
if vim.g.logging_level == 'debug' then
if vim.g.logging_level == "debug" then
local msg = "Colorscheme: " .. colorscheme
vim.notify(msg, vim.log.levels.DEBUG, { title = 'nvim-config' })
vim.notify(msg, vim.log.levels.DEBUG, { title = "nvim-config" })
end
end

77
core/globals.lua Normal file
View File

@@ -0,0 +1,77 @@
local fn = vim.fn
local api = vim.api
local utils = require('utils')
-- Inspect something
function _G.inspect(item)
vim.pretty_print(item)
end
------------------------------------------------------------------------
-- custom variables --
------------------------------------------------------------------------
vim.g.is_win = (utils.has("win32") or utils.has("win64")) and true or false
vim.g.is_linux = (utils.has("unix") and (not utils.has("macunix"))) and true or false
vim.g.is_mac = utils.has("macunix") and true or false
vim.g.logging_level = "info"
------------------------------------------------------------------------
-- builtin variables --
------------------------------------------------------------------------
vim.g.loaded_perl_provider = 0 -- Disable perl provider
vim.g.loaded_ruby_provider = 0 -- Disable ruby provider
vim.g.loaded_node_provider = 0 -- Disable node provider
vim.g.did_install_default_menus = 1 -- do not load menu
if utils.executable('python3') then
if vim.g.is_win then
vim.g.python3_host_prog = fn.substitute(fn.exepath("python3"), ".exe$", '', 'g')
else
vim.g.python3_host_prog = fn.exepath("python3")
end
else
api.nvim_err_writeln("Python3 executable not found! You must install Python3 and set its PATH correctly!")
return
end
-- Custom mapping <leader> (see `:h mapleader` for more info)
vim.g.mapleader = ','
-- Enable highlighting for lua HERE doc inside vim script
vim.g.vimsyn_embed = 'l'
-- Use English as main language
if not vim.g.is_mac then
vim.cmd [[language en_US.utf-8]]
end
-- Disable loading certain plugins
-- Whether to load netrw by default, see https://github.com/bling/dotvim/issues/4
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1
vim.g.netrw_liststyle = 3
if vim.g.is_win then
vim.g.netrw_http_cmd = "curl --ssl-no-revoke -Lo"
end
-- Do not load tohtml.vim
vim.g.loaded_2html_plugin = 1
-- Do not load zipPlugin.vim, gzip.vim and tarPlugin.vim (all these plugins are
-- related to checking files inside compressed files)
vim.g.loaded_zipPlugin = 1
vim.g.loaded_gzip = 1
vim.g.loaded_tarPlugin = 1
-- Do not load the tutor plugin
vim.g.loaded_tutor_mode_plugin = 1
-- Do not use builtin matchit.vim and matchparen.vim since we use vim-matchup
vim.g.loaded_matchit = 1
vim.g.loaded_matchparen = 1
-- Disable sql omni completion, it is broken.
vim.g.loaded_sql_completion = 1

View File

@@ -1,77 +0,0 @@
"{ Global Variable
"{{ Custom variables
let g:is_win = (has('win32') || has('win64')) ? v:true : v:false
let g:is_linux = (has('unix') && !has('macunix')) ? v:true : v:false
let g:is_mac = has('macunix') ? v:true : v:false
let g:logging_level = 'info'
"}}
"{{ Builtin variables
" Disable perl provider
let g:loaded_perl_provider = 0
" Disable ruby provider
let g:loaded_ruby_provider = 0
" Disable node provider
let g:loaded_node_provider = 0
let g:did_install_default_menus = 1 " do not load menu
" Path to Python 3 interpreter (must be an absolute path), make startup
" faster. See https://neovim.io/doc/user/provider.html.
if executable('python')
if g:is_win
let g:python3_host_prog=substitute(exepath('python'), '.exe$', '', 'g')
elseif g:is_linux || g:is_mac
let g:python3_host_prog=exepath('python')
endif
else
echoerr 'Python 3 executable not found! You must install Python 3 and set its PATH correctly!'
endif
" Custom mapping <leader> (see `:h mapleader` for more info)
let g:mapleader = ','
" Enable highlighting for lua HERE doc inside vim script
let g:vimsyn_embed = 'l'
" Use English as main language
if !g:is_mac
language en_US.utf-8
endif
" use filetype.lua instead of filetype.vim
let g:do_filetype_lua = 1
let g:did_load_filetypes = 0
"}}
"{{ Disable loading certain plugins
" Whether to load netrw by default, see
" https://github.com/bling/dotvim/issues/4
let g:loaded_netrw = 1
let g:loaded_netrwPlugin = 1
let g:netrw_liststyle = 3
if g:is_win
let g:netrw_http_cmd = 'curl --ssl-no-revoke -Lo'
endif
" Do not load tohtml.vim
let g:loaded_2html_plugin = 1
" Do not load zipPlugin.vim, gzip.vim and tarPlugin.vim (all these plugins are
" related to checking files inside compressed files)
let g:loaded_zipPlugin = 1
let loaded_gzip = 1
let g:loaded_tarPlugin = 1
let g:loaded_tutor_mode_plugin = 1 " do not load the tutor plugin
" Do not use builtin matchit.vim and matchparen.vim since we use vim-matchup
let g:loaded_matchit = 1
let g:loaded_matchparen = 1
"}}
" Disable sql omni completion, it is broken.
let g:loaded_sql_completion = 1
"}

View File

@@ -5,75 +5,36 @@ local api = vim.api
keymap.set({ "n", "x" }, ";", ":")
-- Turn the word under cursor to upper case
-- inoremap <c-u> <Esc>viwUea
keymap.set("i", "<c-u>", "<Esc>viwUea")
-- Turn the current word into title case
-- inoremap <c-t> <Esc>b~lea
keymap.set("i", "<c-u>", "<Esc>b~lea")
keymap.set("i", "<c-t>", "<Esc>b~lea")
-- Paste non-linewise text above or below current line, see https://stackoverflow.com/a/1346777/6064933
keymap.set("n", "<leader>p", "m`o<ESC>p``", {
desc = "paste below current line",
})
keymap.set("n", "<leader>P", "m`O<ESC>p``", {
desc = "paste above current line",
})
keymap.set("n", "<leader>p", "m`o<ESC>p``", { desc = "paste below current line" })
keymap.set("n", "<leader>P", "m`O<ESC>p``", { desc = "paste above current line" })
-- Shortcut for faster save and quit
keymap.set("n", "<leader>w", "<cmd>update<cr>", {
silent = true,
desc = "save buffer",
})
keymap.set("n", "<leader>w", "<cmd>update<cr>", { silent = true, desc = "save buffer" })
-- Saves the file if modified and quit
keymap.set("n", "<leader>q", "<cmd>x<cr>", {
silent = true,
desc = "quit current window",
})
keymap.set("n", "<leader>q", "<cmd>x<cr>", { silent = true, desc = "quit current window" })
-- Quit all opened buffers
keymap.set("n", "<leader>Q", "<cmd>qa!<cr>", {
silent = true,
desc = "quit nvim",
})
keymap.set("n", "<leader>Q", "<cmd>qa!<cr>", { silent = true, desc = "quit nvim" })
-- Navigation in the location and quickfix list
keymap.set("n", "[l", "<cmd>lprevious<cr>zv", {
silent = true,
desc = "previous location item",
})
keymap.set("n", "]l", "<cmd>lnext<cr>zv", {
silent = true,
desc = "next location item",
})
keymap.set("n", "[l", "<cmd>lprevious<cr>zv", { silent = true, desc = "previous location item" })
keymap.set("n", "]l", "<cmd>lnext<cr>zv", { silent = true, desc = "next location item" })
keymap.set("n", "[L", "<cmd>lfirst<cr>zv", {
silent = true,
desc = "first location item",
})
keymap.set("n", "]L", "<cmd>llast<cr>zv", {
silent = true,
desc = "last location item",
})
keymap.set("n", "[L", "<cmd>lfirst<cr>zv", { silent = true, desc = "first location item" })
keymap.set("n", "]L", "<cmd>llast<cr>zv", { silent = true, desc = "last location item" })
keymap.set("n", "[q", "<cmd>cprevious<cr>zv", {
silent = true,
desc = "previous qf item",
})
keymap.set("n", "]q", "<cmd>cnext<cr>zv", {
silent = true,
desc = "next qf item",
})
keymap.set("n", "[q", "<cmd>cprevious<cr>zv", { silent = true, desc = "previous qf item" })
keymap.set("n", "]q", "<cmd>cnext<cr>zv", { silent = true, desc = "next qf item" })
keymap.set("n", "[Q", "<cmd>cfirst<cr>zv", {
silent = true,
desc = "first qf item",
})
keymap.set("n", "]Q", "<cmd>clast<cr>zv", {
silent = true,
desc = "last qf item",
})
keymap.set("n", "[Q", "<cmd>cfirst<cr>zv", { silent = true, desc = "first qf item" })
keymap.set("n", "]Q", "<cmd>clast<cr>zv", { silent = true, desc = "last qf item" })
-- Close location list or quickfix list if they are present, see https://superuser.com/q/355325/736190
keymap.set("n", [[\x]], "<cmd>windo lclose <bar> cclose <cr>", {
@@ -128,16 +89,15 @@ keymap.set("n", "<leader>sv", "", {
silent = true,
desc = "reload init.lua",
callback = function()
vim.cmd [[
vim.cmd([[
update $MYVIMRC
source $MYVIMRC
]]
]])
vim.notify("Nvim config successfully reloaded!", vim.log.levels.INFO, { title = "nvim-config" })
end,
})
-- Reselect the text that has just been pasted, see also https://stackoverflow.com/a/4317090/6064933.
-- nnoremap <expr> <leader>v
keymap.set("n", "<leader>v", "printf('`[%s`]', getregtype()[0])", {
expr = true,
desc = "reselect last pasted area",
@@ -151,20 +111,14 @@ keymap.set("n", "/", [[/\v]])
-- Change current working directory locally and print cwd after that,
-- see https://vim.fandom.com/wiki/Set_working_directory_to_the_current_file
keymap.set("n", "<leader>cd", "<cmd>lcd %:p:h<cr><cmd>pwd<cr>", {
desc = "change cwd",
})
keymap.set("n", "<leader>cd", "<cmd>lcd %:p:h<cr><cmd>pwd<cr>", { desc = "change cwd" })
-- Use Esc to quit builtin terminal
keymap.set("t", "<Esc>", [[<c-\><c-n>]])
-- Toggle spell checking
keymap.set("n", "<F11>", "<cmd>set spell!<cr>", {
desc = "toggle spell",
})
keymap.set("i", "<F11>", "<c-o><cmd>set spell!<cr>", {
desc = "toggle spell",
})
keymap.set("n", "<F11>", "<cmd>set spell!<cr>", { desc = "toggle spell" })
keymap.set("i", "<F11>", "<c-o><cmd>set spell!<cr>", { desc = "toggle spell" })
-- Change text without putting it into the vim register,
-- see https://stackoverflow.com/q/54255/6064933
@@ -174,41 +128,25 @@ keymap.set("n", "cc", '"_cc')
keymap.set("x", "c", '"_c')
-- Remove trailing whitespace characters
keymap.set("n", "<leader><space>", "<cmd>StripTrailingWhitespace<cr>", {
desc = "remove trailing space",
})
keymap.set("n", "<leader><space>", "<cmd>StripTrailingWhitespace<cr>", { desc = "remove trailing space" })
-- check the syntax group of current cursor position
keymap.set("n", "<leader>st", "<cmd>call utils#SynGroup()<cr>", {
desc = "check syntax group",
})
keymap.set("n", "<leader>st", "<cmd>call utils#SynGroup()<cr>", { desc = "check syntax group" })
-- Copy entire buffer.
keymap.set("n", "<leader>y", "<cmd>%yank<cr>", {
desc = "yank entire buffer",
})
keymap.set("n", "<leader>y", "<cmd>%yank<cr>", { desc = "yank entire buffer" })
-- Toggle cursor column
keymap.set("n", "<leader>cl", "<cmd>call utils#ToggleCursorCol()<cr>", {
desc = "toggle cursor column",
})
keymap.set("n", "<leader>cl", "<cmd>call utils#ToggleCursorCol()<cr>", { desc = "toggle cursor column" })
-- Move current line up and down
keymap.set("n", "<A-k>", '<cmd>call utils#SwitchLine(line("."), "up")<cr>', {
desc = "move line up",
})
keymap.set("n", "<A-j>", '<cmd>call utils#SwitchLine(line("."), "down")<cr>', {
desc = "move line down",
})
keymap.set("n", "<A-k>", '<cmd>call utils#SwitchLine(line("."), "up")<cr>', { desc = "move line up" })
keymap.set("n", "<A-j>", '<cmd>call utils#SwitchLine(line("."), "down")<cr>', { desc = "move line down" })
-- Move current visual-line selection up and down
keymap.set("x", "<A-k>", '<cmd>call utils#MoveSelection("up")<cr>', {
desc = "move selection up",
})
keymap.set("x", "<A-k>", '<cmd>call utils#MoveSelection("up")<cr>', { desc = "move selection up" })
keymap.set("x", "<A-j>", '<cmd>call utils#MoveSelection("down")<cr>', {
desc = "move selection down",
})
keymap.set("x", "<A-j>", '<cmd>call utils#MoveSelection("down")<cr>', { desc = "move selection down" })
-- Replace visual selection with text in register, but not contaminate the register,
-- see also https://stackoverflow.com/q/10723700/6064933.
@@ -229,23 +167,19 @@ keymap.set("n", "<Up>", "<C-W>k")
keymap.set("n", "<Down>", "<C-W>j")
-- Text objects for URL
keymap.set({ "x", "o" }, "iu", "<cmd>call text_obj#URL()<cr>", {
desc = "URL text object",
})
keymap.set({ "x", "o" }, "iu", "<cmd>call text_obj#URL()<cr>", { desc = "URL text object" })
-- Text objects for entire buffer
keymap.set({ "x", "o" }, "iB", "<cmd>call text_obj#Buffer()<cr>", {
desc = "buffer text object",
})
keymap.set({ "x", "o" }, "iB", "<cmd>call text_obj#Buffer()<cr>", { desc = "buffer text object" })
-- Do not move my cursor when joining lines.
keymap.set("n", "J", "", {
desc = "join line",
callback = function()
vim.cmd [[
vim.cmd([[
normal! mzJ`z
delmarks z
]]
]])
end,
})
@@ -253,42 +187,42 @@ keymap.set("n", "gJ", "mzgJ`z", {
desc = "join visual lines",
callback = function()
-- we must use `normal!`, otherwise it will trigger recursive mapping
vim.cmd [[
vim.cmd([[
normal! zmgJ`z
delmarks z
]]
end
]])
end,
})
-- Break inserted text into smaller undo units when we insert some punctuation chars.
local undo_ch = {',', '.', '!', '?', ';', ':'}
local undo_ch = { ",", ".", "!", "?", ";", ":" }
for _, ch in ipairs(undo_ch) do
keymap.set('i', ch, ch .. '<c-g>u')
keymap.set("i", ch, ch .. "<c-g>u")
end
-- insert semicolon in the end
keymap.set('i', '<A-;>', '<Esc>miA;<Esc>`ii')
keymap.set("i", "<A-;>", "<Esc>miA;<Esc>`ii")
-- Keep cursor position after yanking
keymap.set('n', 'y', 'myy')
keymap.set("n", "y", "myy")
api.nvim_create_autocmd('TextYankPost', {
pattern = '*',
api.nvim_create_autocmd("TextYankPost", {
pattern = "*",
group = api.nvim_create_augroup("restore_after_yank", { clear = true }),
callback = function()
vim.cmd [[
vim.cmd([[
silent! normal! `y
silent! delmarks y
]]
end
]])
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>')
keymap.set("i", "<C-A>", "<HOME>")
keymap.set("i", "<C-E>", "<END>")
-- Go to beginning of command in command-line mode
keymap.set('c', '<C-A>', '<HOME>')
keymap.set("c", "<C-A>", "<HOME>")
-- Delete the character to the right of the cursor
keymap.set('i', '<C-D>', '<DEL>')
keymap.set("i", "<C-D>", "<DEL>")

View File

@@ -162,7 +162,7 @@ set termguicolors
" https://github.com/neovim/neovim/wiki/FAQ#how-to-change-cursor-color-in-the-terminal
set guicursor=n-v-c:block-Cursor/lCursor,i-ci-ve:ver25-Cursor2/lCursor2,r-cr:hor20,o:hor20
set signcolumn=auto:2
set signcolumn=yes:1
" Remove certain character from file name pattern matching
set isfname-==
@@ -177,3 +177,4 @@ set diffopt+=context:3 " context for diff
set diffopt+=internal,indent-heuristic,algorithm:histogram
set nowrap " do no wrap
set noruler

View File

@@ -182,23 +182,7 @@ let g:neoformat_c_clangformat = {
let g:neoformat_enabled_cpp = ['clangformat']
let g:neoformat_enabled_c = ['clangformat']
"""""""""""""""""""""""""vim-signify settings""""""""""""""""""""""""""""""
" The VCS to use
let g:signify_vcs_list = [ 'git' ]
" Change the sign for certain operations
let g:signify_sign_change = '~'
"""""""""""""""""""""""""vim-fugitive settings""""""""""""""""""""""""""""""
nnoremap <silent> <leader>gs :Git<CR>
nnoremap <silent> <leader>gw :Gwrite<CR>
nnoremap <silent> <leader>gc :Git commit<CR>
nnoremap <silent> <leader>gd :Gdiffsplit<CR>
nnoremap <silent> <leader>gpl :Git pull<CR>
" Note that to use bar literally, we need backslash it, see also `:h :bar`.
nnoremap <silent> <leader>gpu :15split \| term git push<CR>
"""""""""""""""""""""""""plasticboy/vim-markdown settings"""""""""""""""""""
"""""""""""""""""""""""""vim-markdown settings"""""""""""""""""""
" Disable header folding
let g:vim_markdown_folding_disabled = 1
@@ -320,11 +304,6 @@ if ( g:is_win || g:is_mac ) && executable('latex')
endif
endif
""""""""""""""""""""""""""""vim-startify settings""""""""""""""""""""""""""""
" Do not change working directory when opening files.
let g:startify_change_to_dir = 0
let g:startify_fortune_use_unicode = 1
""""""""""""""""""""""""""""vim-matchup settings"""""""""""""""""""""""""""""
" Improve performance
let g:matchup_matchparen_deferred = 1
@@ -371,16 +350,20 @@ if exists('g:started_by_firenvim') && g:started_by_firenvim
\ }
\ }
function! s:setup_firenvim() abort
set noruler noshowcmd
set laststatus=0 showtabline=0
function s:setup_firenvim() abort
set signcolumn=no
set noruler
set noshowcmd
set laststatus=0
set showtabline=0
endfunction
augroup firenvim
autocmd!
autocmd FileType text call s:setup_firenvim()
autocmd BufNewFile github.com_*.txt set filetype=markdown
autocmd BufNewFile stackoverflow.com_*.txt set filetype=markdown
autocmd BufEnter * call s:setup_firenvim()
autocmd BufEnter sqlzoo*.txt set filetype=sql
autocmd BufEnter github.com_*.txt set filetype=markdown
autocmd BufEnter stackoverflow.com_*.txt set filetype=markdown
augroup END
endif

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]' "black" "vim-vint" "pyls-isort" "pylsp-mypy")
if [[ "$SYSTEM_PYTHON" = true ]]; then
echo "Using system Python to install $(PY_PACKAGES)"
@@ -76,12 +76,12 @@ if [[ "$SYSTEM_PYTHON" = true ]]; then
# If we use system Python, we need to install these Python packages under
# user HOME, since we do not have permissions to install them under system
# directories.
for p in "${py_packages[@]}"; do
for p in "${PY_PACKAGES[@]}"; do
pip install --user "$p"
done
else
echo "Using custom Python to install $(PY_PACKAGES)"
for p in "${py_packages[@]}"; do
for p in "${PY_PACKAGES[@]}"; do
"$CONDA_DIR/bin/pip" install "$p"
done
fi
@@ -112,6 +112,7 @@ if [[ -z "$(command -v node)" ]]; then
fi
else
echo "Node.js is already installed. Skip installing it."
NODE_DIR="$(realpath $(dirname $(which node))/..)"
fi
# Install vim-language-server

View File

@@ -59,3 +59,16 @@ if exists('g:fvim_loaded')
FVimUIPopupMenu v:false
endif
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" config for neovide "
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if exists("g:neovide")
set guifont=Hack\ NF:h10
let g:neovide_transparency = 1.0
let g:neovide_cursor_animation_length = 0.1
let g:neovide_cursor_trail_size=0.3
let g:neovide_cursor_vfx_mode = ""
let g:neovide_cursor_vfx_particle_density=10.0
let g:neovide_cursor_vfx_opacity=150.0
endif

View File

@@ -8,30 +8,31 @@
-- Email: jdhao@hotmail.com
-- Blog: https://jdhao.github.io/
-- check if we have the latest stable version of nvim
local expected_ver = "0.7.2"
local api = vim.api
local utils = require("utils")
local utils = require "utils"
-- check if we have the latest stable version of nvim
local expected_ver = "0.8.0"
local nvim_ver = utils.get_nvim_version()
if nvim_ver ~= expected_ver then
local msg = string.format("Unsupported nvim version: expect %s, but got %s instead!", expected_ver, nvim_ver)
vim.api.nvim_echo({ { msg, "ErrorMsg" } }, false, {})
api.nvim_err_writeln(msg)
return
end
local core_conf_files = {
"globals.vim", -- some global settings
"options.vim", -- setting options in nvim
"autocommands.vim", -- various autocommands
"mappings.lua", -- all the user-defined mappings
"plugins.vim", -- all the plugins installed and their configurations
"colorschemes.lua", -- colorscheme settings
"globals.lua", -- some global settings
"options.vim", -- setting options in nvim
"autocommands.vim", -- various autocommands
"mappings.lua", -- all the user-defined mappings
"plugins.vim", -- all the plugins installed and their configurations
"colorschemes.lua", -- colorscheme settings
}
-- 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 path = string.format("%s/core/%s", vim.fn.stdpath("config"), name)
local source_cmd = "source " .. path
vim.cmd(source_cmd)
end

View File

@@ -1,6 +1,6 @@
require("bqf").setup({
require("bqf").setup {
auto_resize_height = false,
preview = {
auto_preview = false,
}
})
},
}

View File

@@ -1,4 +1,4 @@
require("bufferline").setup({
require("bufferline").setup {
options = {
numbers = "buffer_id",
close_command = "bdelete! %d",
@@ -6,8 +6,8 @@ require("bufferline").setup({
left_mouse_command = "buffer %d",
middle_mouse_command = nil,
indicator = {
icon = '', -- this should be omitted if indicator style is not 'icon'
style = 'icon',
icon = "", -- this should be omitted if indicator style is not 'icon'
style = "icon",
},
buffer_close_icon = "",
modified_icon = "",
@@ -43,4 +43,4 @@ require("bufferline").setup({
always_show_bufferline = true,
sort_by = "id",
},
})
}

View File

@@ -52,8 +52,8 @@ dashboard.custom_center = {
desc = "Quit Nvim ",
-- desc = "Quit Nvim ",
action = "qa",
shortcut = "q "
}
shortcut = "q ",
},
}
vim.cmd([[

View File

@@ -1 +1 @@
require"fidget".setup{}
require("fidget").setup {}

11
lua/config/fugitive.lua Normal file
View File

@@ -0,0 +1,11 @@
local keymap = vim.keymap
keymap.set("n", "<leader>gs", "<cmd>Git<cr>", { desc = "Git status" })
keymap.set("n", "<leader>gw", "<cmd>Gwrite<cr>", { desc = "Git add" })
keymap.set("n", "<leader>gc", "<cmd>Git commit<cr>", { desc = "Git commit" })
keymap.set("n", "<leader>gd", "<cmd>Gdiffsplit<cr>", { desc = "Git diff" })
keymap.set("n", "<leader>gpl", "<cmd>Git pull<cr>", { desc = "Git pull" })
keymap.set("n", "<leader>gpu", "<cmd>15 split|term git push<cr>", { desc = "Git push" })
-- convert git to Git in command line mode
vim.fn['utils#Cabbrev']('git', 'Git')

View File

@@ -1,15 +1,25 @@
local keymap = vim.keymap
local gitlinker = require('gitlinker')
local gitlinker = require("gitlinker")
gitlinker.setup({
gitlinker.setup {
mappings = nil,
})
}
keymap.set({ 'n', 'v' }, '<leader>gl', '', {
keymap.set({ "n", "v" }, "<leader>gl", "", {
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", "", {
silent = true,
desc = "browse repo in browser",
callback = function()
gitlinker.get_repo_url({
action_callback = gitlinker.actions.open_in_browser
})
end
})

57
lua/config/gitsigns.lua Normal file
View File

@@ -0,0 +1,57 @@
local gs = require("gitsigns")
gs.setup {
signs = {
add = { hl = "GitSignsAdd", text = "+", numhl = "GitSignsAddNr", linehl = "GitSignsAddLn" },
change = { hl = "GitSignsChange", text = "~", numhl = "GitSignsChangeNr", linehl = "GitSignsChangeLn" },
delete = { hl = "GitSignsDelete", text = "_", numhl = "GitSignsDeleteNr", linehl = "GitSignsDeleteLn" },
topdelete = { hl = "GitSignsDelete", text = "", numhl = "GitSignsDeleteNr", linehl = "GitSignsDeleteLn" },
changedelete = { hl = "GitSignsChange", text = "", numhl = "GitSignsChangeNr", linehl = "GitSignsChangeLn" },
},
word_diff = true,
on_attach = function(bufnr)
local function map(mode, l, r, opts)
opts = opts or {}
opts.buffer = bufnr
vim.keymap.set(mode, l, r, opts)
end
-- Navigation
map("n", "]c", function()
if vim.wo.diff then
return "]c"
end
vim.schedule(function()
gs.next_hunk()
end)
return "<Ignore>"
end, { expr = true, desc = "next hunk" })
map("n", "[c", function()
if vim.wo.diff then
return "[c"
end
vim.schedule(function()
gs.prev_hunk()
end)
return "<Ignore>"
end, { expr = true, desc = "previous hunk" })
-- Actions
map("n", "<leader>hp", gs.preview_hunk)
map("n", "<leader>hb", function()
gs.blame_line { full = true }
end)
end,
}
vim.api.nvim_create_autocmd('ColorScheme', {
pattern = "*",
callback = function()
vim.cmd [[
hi GitSignsChangeInline guibg=fg guifg=bg
hi GitSignsAddInline guibg=fg guifg=bg
hi GitSignsDeleteInline guibg=fg guifg=bg
]]
end
})

View File

@@ -1,34 +1,38 @@
local api = vim.api
local keymap = vim.keymap
require('hlslens').setup({
calm_down = true,
nearest_only = true,
})
local hlslens = require("hlslens")
hlslens.setup {
calm_down = true,
nearest_only = true,
}
local activate_hlslens = function(direction)
local cmd = string.format("normal! %s%szzzv", vim.v.count1, direction)
local status, msg = pcall(vim.fn.execute, cmd)
-- 13 is the index where real error message starts
msg = msg:sub(13)
local status, msg = pcall(vim.cmd, cmd)
if not status then
vim.api.nvim_echo({{msg, "ErrorMsg"}}, false, {})
-- 13 is the index where real error message starts
msg = msg:sub(13)
api.nvim_err_writeln(msg)
return
end
require('hlslens').start()
hlslens.start()
end
keymap.set('n', 'n', '',
{
silent = true,
callback = function() activate_hlslens('n') end
keymap.set("n", "n", "", {
callback = function()
activate_hlslens("n")
end,
})
keymap.set('n', 'N', '',
{
silent = true,
callback = function() activate_hlslens('N') end
keymap.set("n", "N", "", {
callback = function()
activate_hlslens("N")
end,
})
keymap.set('n', '*', "<Plug>(asterisk-z*)<Cmd>lua require('hlslens').start()<CR>", { silent = true })
keymap.set('n', '#', "<Plug>(asterisk-z#)<Cmd>lua require('hlslens').start()<CR>", { silent = true })
keymap.set("n", "*", "<Plug>(asterisk-z*)<Cmd>lua require('hlslens').start()<CR>")
keymap.set("n", "#", "<Plug>(asterisk-z#)<Cmd>lua require('hlslens').start()<CR>")

View File

@@ -1,7 +1,7 @@
local api = vim.api
local exclude_ft = { "help", "git", "markdown", "snippets", "text", "gitconfig", "alpha" }
require("indent_blankline").setup({
require("indent_blankline").setup {
-- U+2502 may also be a good choice, it will be on the middle of cursor.
-- U+250A is also a good choice
char = "",
@@ -9,13 +9,13 @@ require("indent_blankline").setup({
disable_with_nolist = true,
buftype_exclude = { "terminal" },
filetype_exclude = exclude_ft,
})
}
local gid = api.nvim_create_augroup("indent_blankline", { clear = true })
api.nvim_create_autocmd("InsertEnter", {
pattern = "*",
group = gid,
command = "IndentBlanklineDisable"
command = "IndentBlanklineDisable",
})
api.nvim_create_autocmd("InsertLeave", {
@@ -23,7 +23,7 @@ api.nvim_create_autocmd("InsertLeave", {
group = gid,
callback = function()
if not vim.tbl_contains(exclude_ft, vim.bo.filetype) then
vim.cmd [[IndentBlanklineEnable]]
vim.cmd([[IndentBlanklineEnable]])
end
end
end,
})

View File

@@ -1,7 +1,7 @@
local iron = require("iron")
iron.core.set_config({
iron.core.set_config {
preferred = {
python = "ipython",
},
repl_open_cmd = "vertical 120 split",
})
}

View File

@@ -7,38 +7,45 @@ local utils = require("utils")
local custom_attach = function(client, bufnr)
-- Mappings.
local opts = { silent = true, buffer = bufnr }
keymap.set("n", "gd", vim.lsp.buf.definition, opts)
keymap.set("n", "<C-]>", vim.lsp.buf.definition, opts)
keymap.set("n", "K", vim.lsp.buf.hover, opts)
keymap.set("n", "<C-k>", vim.lsp.buf.signature_help, opts)
keymap.set("n", "<space>rn", vim.lsp.buf.rename, opts)
keymap.set("n", "gr", vim.lsp.buf.references, opts)
keymap.set("n", "[d", vim.diagnostic.goto_prev, opts)
keymap.set("n", "]d", vim.diagnostic.goto_next, opts)
keymap.set("n", "<space>q", function() vim.diagnostic.setqflist({open = true}) end, opts)
keymap.set("n", "<space>ca", vim.lsp.buf.code_action, opts)
keymap.set("n", "<space>wa", vim.lsp.buf.add_workspace_folder, opts)
keymap.set("n", "<space>wr", vim.lsp.buf.remove_workspace_folder, opts)
keymap.set("n", "<space>wl", function() inspect(vim.lsp.buf.list_workspace_folders()) end, opts)
local map = function(mode, l, r, opts)
opts = opts or {}
opts.silent = true
opts.buffer = bufnr
keymap.set(mode, l, r, opts)
end
map("n", "gd", vim.lsp.buf.definition, { desc = "go to definition" })
map("n", "<C-]>", vim.lsp.buf.definition)
map("n", "K", vim.lsp.buf.hover)
map("n", "<C-k>", vim.lsp.buf.signature_help)
map("n", "<space>rn", vim.lsp.buf.rename, { desc = "varialbe rename" })
map("n", "gr", vim.lsp.buf.references, { desc = "show references" })
map("n", "[d", vim.diagnostic.goto_prev, { desc = "previous diagnostic" })
map("n", "]d", vim.diagnostic.goto_next, { desc = "next diagnostic" })
map("n", "<space>q", function()
vim.diagnostic.setqflist { open = true }
end, { desc = "put diagnostic 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" })
map("n", "<space>wl", function()
inspect(vim.lsp.buf.list_workspace_folders())
end, { desc = "list workspace folder" })
-- Set some key bindings conditional on server capabilities
if client.resolved_capabilities.document_formatting then
keymap.set("n", "<space>f", vim.lsp.buf.formatting_sync, opts)
end
if client.resolved_capabilities.document_range_formatting then
keymap.set("x", "<space>f", vim.lsp.buf.range_formatting, opts)
if client.server_capabilities.documentFormattingProvider then
map("n", "<space>f", vim.lsp.buf.format, { desc = "format code" })
end
api.nvim_create_autocmd("CursorHold", {
buffer=bufnr,
buffer = bufnr,
callback = function()
local float_opts = {
focusable = false,
close_events = { "BufLeave", "CursorMoved", "InsertEnter", "FocusLost" },
border = 'rounded',
source = 'always', -- show source in diagnostic popup window
prefix = ' '
border = "rounded",
source = "always", -- show source in diagnostic popup window
prefix = " ",
}
if not vim.b.diagnostics_pos then
@@ -46,18 +53,18 @@ local custom_attach = function(client, bufnr)
end
local cursor_pos = api.nvim_win_get_cursor(0)
if (cursor_pos[1] ~= vim.b.diagnostics_pos[1] or cursor_pos[2] ~= vim.b.diagnostics_pos[2]) and
#vim.diagnostic.get() > 0
if (cursor_pos[1] ~= vim.b.diagnostics_pos[1] or cursor_pos[2] ~= vim.b.diagnostics_pos[2])
and #vim.diagnostic.get() > 0
then
vim.diagnostic.open_float(nil, float_opts)
vim.diagnostic.open_float(nil, float_opts)
end
vim.b.diagnostics_pos = cursor_pos
end
end,
})
-- The blow command will highlight the current variable and its usages in the buffer.
if client.resolved_capabilities.document_highlight then
if client.server_capabilities.documentHighlightProvider then
vim.cmd([[
hi! link LspReferenceRead Visual
hi! link LspReferenceText Visual
@@ -70,20 +77,20 @@ local custom_attach = function(client, bufnr)
]])
end
if vim.g.logging_level == 'debug' then
if vim.g.logging_level == "debug" then
local msg = string.format("Language server %s started!", client.name)
vim.notify(msg, vim.log.levels.DEBUG, {title = 'Nvim-config'})
vim.notify(msg, vim.log.levels.DEBUG, { title = "Nvim-config" })
end
end
local capabilities = lsp.protocol.make_client_capabilities()
capabilities = require('cmp_nvim_lsp').update_capabilities(capabilities)
capabilities = require("cmp_nvim_lsp").update_capabilities(capabilities)
capabilities.textDocument.completion.completionItem.snippetSupport = true
local lspconfig = require("lspconfig")
if utils.executable('pylsp') then
lspconfig.pylsp.setup({
if utils.executable("pylsp") then
lspconfig.pylsp.setup {
on_attach = custom_attach,
settings = {
pylsp = {
@@ -101,9 +108,9 @@ if utils.executable('pylsp') then
debounce_text_changes = 200,
},
capabilities = capabilities,
})
}
else
vim.notify("pylsp not found!", vim.log.levels.WARN, {title = 'Nvim-config'})
vim.notify("pylsp not found!", vim.log.levels.WARN, { title = "Nvim-config" })
end
-- if utils.executable('pyright') then
@@ -115,43 +122,43 @@ end
-- vim.notify("pyright not found!", vim.log.levels.WARN, {title = 'Nvim-config'})
-- end
if utils.executable('clangd') then
lspconfig.clangd.setup({
if utils.executable("clangd") then
lspconfig.clangd.setup {
on_attach = custom_attach,
capabilities = capabilities,
filetypes = { "c", "cpp", "cc" },
flags = {
debounce_text_changes = 500,
},
})
}
else
vim.notify("clangd not found!", vim.log.levels.WARN, {title = 'Nvim-config'})
vim.notify("clangd not found!", vim.log.levels.WARN, { title = "Nvim-config" })
end
-- set up vim-language-server
if utils.executable('vim-language-server') then
lspconfig.vimls.setup({
if utils.executable("vim-language-server") then
lspconfig.vimls.setup {
on_attach = custom_attach,
flags = {
debounce_text_changes = 500,
},
capabilities = capabilities,
})
}
else
vim.notify("vim-language-server not found!", vim.log.levels.WARN, {title = 'Nvim-config'})
vim.notify("vim-language-server not found!", vim.log.levels.WARN, { title = "Nvim-config" })
end
-- set up bash-language-server
if utils.executable('bash-language-server') then
lspconfig.bashls.setup({
if utils.executable("bash-language-server") then
lspconfig.bashls.setup {
on_attach = custom_attach,
capabilities = capabilities,
})
}
end
if utils.executable("lua-language-server") then
-- settings for lua-language-server can be found on https://github.com/sumneko/lua-language-server/wiki/Settings .
lspconfig.sumneko_lua.setup({
lspconfig.sumneko_lua.setup {
on_attach = custom_attach,
settings = {
Lua = {
@@ -168,8 +175,8 @@ if utils.executable("lua-language-server") then
-- see also https://github.com/sumneko/lua-language-server/wiki/Libraries#link-to-workspace .
-- Lua-dev.nvim also has similar settings for sumneko lua, https://github.com/folke/lua-dev.nvim/blob/main/lua/lua-dev/sumneko.lua .
library = {
fn.stdpath('data') .. "/site/pack/packer/opt/emmylua-nvim",
fn.stdpath('config'),
fn.stdpath("data") .. "/site/pack/packer/opt/emmylua-nvim",
fn.stdpath("config"),
},
maxPreload = 2000,
preloadFileSize = 50000,
@@ -177,7 +184,7 @@ if utils.executable("lua-language-server") then
},
},
capabilities = capabilities,
})
}
end
-- Change diagnostic signs.
@@ -187,12 +194,12 @@ fn.sign_define("DiagnosticSignInformation", { text = "", texthl = "Diagnostic
fn.sign_define("DiagnosticSignHint", { text = "", texthl = "DiagnosticSignHint" })
-- global config for diagnostic
vim.diagnostic.config({
vim.diagnostic.config {
underline = false,
virtual_text = false,
signs = true,
severity_sort = true,
})
}
-- lsp.handlers["textDocument/publishDiagnostics"] = lsp.with(lsp.diagnostic.on_publish_diagnostics, {
-- underline = false,

View File

@@ -1,6 +1,6 @@
require("neoscroll").setup({
require("neoscroll").setup {
easing_function = "quadratic",
})
}
local t = {}
-- Syntax: t[keys] = {function, {function arguments}}

View File

@@ -1,54 +1,54 @@
-- Setup nvim-cmp.
local cmp = require'cmp'
local lspkind = require'lspkind'
local cmp = require("cmp")
local lspkind = require("lspkind")
cmp.setup({
cmp.setup {
snippet = {
expand = function(args)
-- For `ultisnips` user.
vim.fn["UltiSnips#Anon"](args.body)
end,
},
mapping = cmp.mapping.preset.insert({
['<Tab>'] = function(fallback)
if cmp.visible() then
cmp.select_next_item()
else
fallback()
end
end,
['<S-Tab>'] = function(fallback)
if cmp.visible() then
cmp.select_prev_item()
else
fallback()
end
end,
['<CR>'] = cmp.mapping.confirm({ select = true }),
['<C-e>'] = cmp.mapping.abort(),
['<Esc>'] = cmp.mapping.close(),
['<C-d>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
}),
mapping = cmp.mapping.preset.insert {
["<Tab>"] = function(fallback)
if cmp.visible() then
cmp.select_next_item()
else
fallback()
end
end,
["<S-Tab>"] = function(fallback)
if cmp.visible() then
cmp.select_prev_item()
else
fallback()
end
end,
["<CR>"] = cmp.mapping.confirm { select = true },
["<C-e>"] = cmp.mapping.abort(),
["<Esc>"] = cmp.mapping.close(),
["<C-d>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(4),
},
sources = {
{ name = 'nvim_lsp' }, -- For nvim-lsp
{ name = 'ultisnips' }, -- For ultisnips user.
{ name = 'path' }, -- for path completion
{ name = 'buffer', keyword_length = 2 }, -- for buffer word completion
{ name = 'omni' },
{ name = 'emoji', insert = true, } -- emoji completion
{ name = "nvim_lsp" }, -- For nvim-lsp
{ name = "ultisnips" }, -- For ultisnips user.
{ name = "path" }, -- for path completion
{ name = "buffer", keyword_length = 2 }, -- for buffer word completion
{ name = "omni" },
{ name = "emoji", insert = true }, -- emoji completion
},
completion = {
keyword_length = 1,
completeopt = "menu,noselect"
completeopt = "menu,noselect",
},
view = {
entries = 'custom',
entries = "custom",
},
formatting = {
format = lspkind.cmp_format({
format = lspkind.cmp_format {
mode = "symbol_text",
menu = ({
menu = {
nvim_lsp = "[LSP]",
ultisnips = "[US]",
nvim_lua = "[Lua]",
@@ -56,13 +56,13 @@ cmp.setup({
buffer = "[Buffer]",
emoji = "[Emoji]",
omni = "[Omni]",
}),
}),
},
},
},
})
}
-- see https://github.com/hrsh7th/nvim-cmp/wiki/Menu-Appearance#how-to-add-visual-studio-code-dark-theme-colors-to-the-menu
vim.cmd[[
vim.cmd([[
highlight! link CmpItemMenu Comment
" gray
highlight! CmpItemAbbrDeprecated guibg=NONE gui=strikethrough guifg=#808080
@@ -80,4 +80,4 @@ vim.cmd[[
highlight! CmpItemKindKeyword guibg=NONE guifg=#D4D4D4
highlight! CmpItemKindProperty guibg=NONE guifg=#D4D4D4
highlight! CmpItemKindUnit guibg=NONE guifg=#D4D4D4
]]
]])

View File

@@ -1,10 +1,10 @@
local nvim_notify = require("notify")
nvim_notify.setup({
nvim_notify.setup {
-- Animation style
stages = "fade_in_slide_out",
-- Default timeout for notifications
timeout = 1500,
background_colour = "#2E3440",
})
}
vim.notify = nvim_notify

View File

@@ -1,7 +1,7 @@
local keymap = vim.keymap
local nvim_tree = require("nvim-tree")
nvim_tree.setup({
nvim_tree.setup {
auto_reload_on_write = true,
disable_netrw = false,
hijack_cursor = false,
@@ -15,7 +15,6 @@ nvim_tree.setup({
update_cwd = false,
view = {
width = 30,
height = 30,
hide_root_folder = false,
side = "left",
preserve_window_proportions = false,
@@ -112,9 +111,8 @@ nvim_tree.setup({
profile = false,
},
},
})
}
keymap.set('n', '<space>s', function()
return require('nvim-tree').toggle(false, true)
end,
{ silent = true, desc = "toggle nvim-tree" })
keymap.set("n", "<space>s", function()
return require("nvim-tree").toggle(false, true)
end, { silent = true, desc = "toggle nvim-tree" })

View File

@@ -1,14 +1,14 @@
vim.cmd [[hi HopNextKey cterm=bold ctermfg=176 gui=bold guibg=#ff00ff guifg=#ffffff]]
vim.cmd [[hi HopNextKey1 cterm=bold ctermfg=176 gui=bold guibg=#ff00ff guifg=#ffffff]]
vim.cmd [[hi HopNextKey2 cterm=bold ctermfg=176 gui=bold guibg=#ff00ff guifg=#ffffff]]
vim.cmd([[hi HopNextKey cterm=bold ctermfg=176 gui=bold guibg=#ff00ff guifg=#ffffff]])
vim.cmd([[hi HopNextKey1 cterm=bold ctermfg=176 gui=bold guibg=#ff00ff guifg=#ffffff]])
vim.cmd([[hi HopNextKey2 cterm=bold ctermfg=176 gui=bold guibg=#ff00ff guifg=#ffffff]])
local keymap = vim.keymap
local hop = require "hop"
hop.setup({
local hop = require("hop")
hop.setup {
case_insensitive = true,
char2_fallback_key = "<CR>",
quit_key = "<Esc>",
})
}
keymap.set({ "n", "v", "o" }, "f", "", {
silent = true,

View File

@@ -11,9 +11,9 @@ end
local function ime_state()
if vim.g.is_mac then
-- ref: https://github.com/vim-airline/vim-airline/blob/master/autoload/airline/extensions/xkblayout.vim#L11
local layout = fn.libcall(vim.g.XkbSwitchLib, 'Xkb_Switch_getXkbLayout', '')
if layout == '0' then
return '[CN]'
local layout = fn.libcall(vim.g.XkbSwitchLib, "Xkb_Switch_getXkbLayout", "")
if layout == "0" then
return "[CN]"
end
end
@@ -27,7 +27,7 @@ local function trailing_space()
local line_num = nil
for i=1, fn.line('$') do
for i = 1, fn.line("$") do
local linetext = fn.getline(i)
-- To prevent invalid escape error, we wrap the regex string with `[[]]`.
local idx = fn.match(linetext, [[\v\s+$]])
@@ -53,28 +53,45 @@ local function mixed_indent()
local space_pat = [[\v^ +]]
local tab_pat = [[\v^\t+]]
local space_indent = fn.search(space_pat, 'nwc')
local tab_indent = fn.search(tab_pat, 'nwc')
local space_indent = fn.search(space_pat, "nwc")
local tab_indent = fn.search(tab_pat, "nwc")
local mixed = (space_indent > 0 and tab_indent > 0)
local mixed_same_line
if not mixed then
mixed_same_line = fn.search([[\v^(\t+ | +\t)]], 'nwc')
mixed_same_line = fn.search([[\v^(\t+ | +\t)]], "nwc")
mixed = mixed_same_line > 0
end
if not mixed then return '' end
if mixed_same_line ~= nil and mixed_same_line > 0 then
return 'MI:'..mixed_same_line
if not mixed then
return ""
end
local space_indent_cnt = fn.searchcount({pattern=space_pat, max_count=1e3}).total
local tab_indent_cnt = fn.searchcount({pattern=tab_pat, max_count=1e3}).total
if mixed_same_line ~= nil and mixed_same_line > 0 then
return "MI:" .. mixed_same_line
end
local space_indent_cnt = fn.searchcount({ pattern = space_pat, max_count = 1e3 }).total
local tab_indent_cnt = fn.searchcount({ pattern = tab_pat, max_count = 1e3 }).total
if space_indent_cnt > tab_indent_cnt then
return 'MI:'..tab_indent
return "MI:" .. tab_indent
else
return 'MI:'..space_indent
return "MI:" .. space_indent
end
end
require("lualine").setup({
local diff = function()
local git_status = vim.b.gitsigns_status_dict
if git_status == nil then
return
end
local modify_num = git_status.changed
local remove_num = git_status.removed
local add_num = git_status.added
local info = { added = add_num, modified = modify_num, removed = remove_num }
-- vim.pretty_print(info)
return info
end
require("lualine").setup {
options = {
icons_enabled = true,
theme = "auto",
@@ -87,16 +104,22 @@ require("lualine").setup({
},
sections = {
lualine_a = { "mode" },
lualine_b = { "branch", "diff" },
lualine_b = {
"branch",
{
"diff",
source = diff,
},
},
lualine_c = {
"filename",
{
ime_state,
color = {fg = 'black', bg = '#f46868'}
color = { fg = "black", bg = "#f46868" },
},
{
spell,
color = {fg = 'black', bg = '#a7c080'}
color = { fg = "black", bg = "#a7c080" },
},
},
lualine_x = {
@@ -116,15 +139,15 @@ require("lualine").setup({
"location",
{
"diagnostics",
sources = { "nvim_diagnostic" }
sources = { "nvim_diagnostic" },
},
{
trailing_space,
color = "WarningMsg"
color = "WarningMsg",
},
{
mixed_indent,
color = "WarningMsg"
color = "WarningMsg",
},
},
},
@@ -137,6 +160,5 @@ require("lualine").setup({
lualine_z = {},
},
tabline = {},
extensions = {'quickfix', 'fugitive', 'nvim-tree'},
})
extensions = { "quickfix", "fugitive", "nvim-tree" },
}

View File

@@ -1,8 +1,8 @@
require("nvim-treesitter.configs").setup({
ensure_installed = {"python", "cpp", "lua", "vim"},
require("nvim-treesitter.configs").setup {
ensure_installed = { "python", "cpp", "lua", "vim" },
ignore_install = {}, -- List of parsers to ignore installing
highlight = {
enable = true, -- false will disable the whole extension
disable = {}, -- list of language that will be disabled
disable = { 'help' }, -- list of language that will be disabled
},
})
}

View File

@@ -1,4 +1,4 @@
require("which-key").setup({
require("which-key").setup {
plugins = {
marks = true, -- shows a list of your marks on ' and `
registers = true, -- shows your registers on " in NORMAL or <C-r> in INSERT mode
@@ -46,7 +46,7 @@ require("which-key").setup({
align = "center", -- align columns left, center or right
},
ignore_missing = false, -- enable this to hide mappings for which you didn't specify a label
hidden = { "<silent>", "<cmd>", "<Cmd>", "<CR>", "call", "lua", "^:", "^ "}, -- hide mapping boilerplate
hidden = { "<silent>", "<cmd>", "<Cmd>", "<CR>", "call", "lua", "^:", "^ " }, -- hide mapping boilerplate
show_help = true, -- show help message on the command line when the popup is visible
triggers = "auto", -- automatically setup triggers
-- triggers = {"<leader>"} -- or specify a list manually
@@ -57,4 +57,4 @@ require("which-key").setup({
-- most people should not need to change this
n = { "o", "O" },
},
})
}

View File

@@ -1,4 +1,4 @@
require("zen-mode").setup({
require("zen-mode").setup {
window = {
backdrop = 0.8, -- shade the backdrop of the Zen window. Set to 1 to keep the same as Normal
width = 120,
@@ -12,4 +12,4 @@ require("zen-mode").setup({
list = false, -- disable whitespace characters
},
},
})
}

View File

@@ -3,7 +3,6 @@ local api = vim.api
local utils = require("utils")
-- Display a message when the current file is not in utf-8 format.
-- Note that we need to use `unsilent` command here because of this issue:
-- https://github.com/vim/vim/issues/4379
@@ -11,10 +10,10 @@ api.nvim_create_autocmd({ "BufRead" }, {
pattern = "*",
group = api.nvim_create_augroup("non_utf8_file", { clear = true }),
callback = function()
if vim.bo.fileencoding ~= 'utf-8' then
if vim.bo.fileencoding ~= "utf-8" then
vim.notify("File not in UTF-8 format!", vim.log.levels.WARN, { title = "nvim-config" })
end
end
end,
})
-- highlight yanked region, see `:h lua-highlight`
@@ -23,7 +22,7 @@ api.nvim_create_autocmd({ "TextYankPost" }, {
group = api.nvim_create_augroup("highlight_yank", { clear = true }),
callback = function()
vim.highlight.on_yank { higroup = "YankColor", timeout = 300 }
end
end,
})
-- Auto-generate packer_compiled.lua file
@@ -34,7 +33,7 @@ api.nvim_create_autocmd({ "BufWritePost" }, {
local cmd = "source " .. ctx.file
vim.cmd(cmd)
vim.cmd("PackerCompile")
end
end,
})
-- Auto-create dir when saving a file, in case some intermediate directory does not exist
@@ -44,7 +43,7 @@ api.nvim_create_autocmd({ "BufWritePre" }, {
callback = function(ctx)
local dir = fn.fnamemodify(ctx.file, ":p:h")
utils.may_create_dir(dir)
end
end,
})
-- Automatically reload the file if it is changed outside of Nvim, see https://unix.stackexchange.com/a/383044/221410.
@@ -57,17 +56,17 @@ api.nvim_create_autocmd({ "FileChangedShellPost" }, {
group = "auto_read",
callback = function()
vim.notify("File changed on disk. Buffer reloaded!", vim.log.levels.WARN, { title = "nvim-config" })
end
end,
})
api.nvim_create_autocmd({ "FocusGained", "CursorHold" }, {
pattern = "*",
group = "auto_read",
callback = function()
if fn.getcmdwintype() == '' then
if fn.getcmdwintype() == "" then
vim.cmd("checktime")
end
end
end,
})
-- Resize all windows when we resize the terminal

View File

@@ -26,359 +26,355 @@ end
vim.cmd("packadd packer.nvim")
local packer = require("packer")
local packer_util = require('packer.util')
local packer_util = require("packer.util")
packer.startup({
-- check if firenvim is active
local firenvim_not_active = function()
return not vim.g.started_by_firenvim
end
packer.startup {
function(use)
-- it is recommended to put impatient.nvim before any other plugins
use {'lewis6991/impatient.nvim', config = [[require('impatient')]]}
use { "lewis6991/impatient.nvim", config = [[require('impatient')]] }
use({"wbthomason/packer.nvim", opt = true})
use { "wbthomason/packer.nvim", opt = true }
use({"onsails/lspkind-nvim", event = "VimEnter"})
use { "onsails/lspkind-nvim", event = "VimEnter" }
-- auto-completion engine
use {"hrsh7th/nvim-cmp", after = "lspkind-nvim", config = [[require('config.nvim-cmp')]]}
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-nvim-lua", after = "nvim-cmp"}
use {"hrsh7th/cmp-path", after = "nvim-cmp"}
use {"hrsh7th/cmp-buffer", after = "nvim-cmp"}
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 {"hrsh7th/cmp-cmdline", after = "nvim-cmp"}
use {"quangnguyen30192/cmp-nvim-ultisnips", after = {'nvim-cmp', 'ultisnips'}}
use { "quangnguyen30192/cmp-nvim-ultisnips", after = { "nvim-cmp", "ultisnips" } }
if vim.g.is_mac then
use {"hrsh7th/cmp-emoji", after = 'nvim-cmp'}
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')]] })
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')]] })
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" } })
use { "Vimjas/vim-python-pep8-indent", ft = { "python" } }
-- Python-related text object
use({ "jeetsukumaran/vim-pythonsense", ft = { "python" } })
use { "jeetsukumaran/vim-pythonsense", ft = { "python" } }
use({"machakann/vim-swap", event = "VimEnter"})
use { "machakann/vim-swap", event = "VimEnter" }
-- IDE for Lisp
if utils.executable("sbcl") then
-- use 'kovisoft/slimv'
use({ "vlime/vlime", rtp = "vim/", ft = { "lisp" } })
use { "vlime/vlime", rtp = "vim/", ft = { "lisp" } }
end
-- Super fast buffer jump
use {
'phaazon/hop.nvim',
"phaazon/hop.nvim",
event = "VimEnter",
config = function()
vim.defer_fn(function() require('config.nvim_hop') end, 2000)
end
vim.defer_fn(function()
require("config.nvim_hop")
end, 2000)
end,
}
-- Clear highlight search automatically for you
-- use({"romainl/vim-cool", event = "VimEnter"})
-- Show match number and index for searching
use {
'kevinhwang91/nvim-hlslens',
branch = 'main',
keys = {{'n', '*'}, {'n', '#'}, {'n', 'n'}, {'n', 'N'}},
config = [[require('config.hlslens')]]
"kevinhwang91/nvim-hlslens",
branch = "main",
keys = { { "n", "*" }, { "n", "#" }, { "n", "n" }, { "n", "N" } },
config = [[require('config.hlslens')]],
}
-- Stay after pressing * and search selected text
use({"haya14busa/vim-asterisk", event = 'VimEnter'})
use { "haya14busa/vim-asterisk", event = "VimEnter" }
-- File search, tag search and more
if vim.g.is_win then
use({"Yggdroot/LeaderF", cmd = "Leaderf"})
use { "Yggdroot/LeaderF", cmd = "Leaderf" }
else
use({ "Yggdroot/LeaderF", cmd = "Leaderf", run = ":LeaderfInstallCExtension" })
use { "Yggdroot/LeaderF", cmd = "Leaderf", run = ":LeaderfInstallCExtension" }
end
use {
'nvim-telescope/telescope.nvim', cmd = 'Telescope',
requires = { {'nvim-lua/plenary.nvim'} }
"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'}
-- Another similar plugin is command-t
-- use 'wincent/command-t'
-- Another grep tool (similar to Sublime Text Ctrl+Shift+F)
-- use 'dyng/ctrlsf.vim'
-- A grepping tool
-- use {'mhinz/vim-grepper', cmd = {'Grepper', '<plug>(GrepperOperator)'}}
use { "nvim-telescope/telescope-symbols.nvim", after = "telescope.nvim" }
-- A list of colorscheme plugin you may want to try. Find what suits you.
use({"lifepillar/vim-gruvbox8", opt = true})
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({"NTBBloodbath/doom-one.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 { "lifepillar/vim-gruvbox8", opt = true }
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 { "NTBBloodbath/doom-one.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 }
-- Show git change (change, delete, add) signs in vim sign column
use({"mhinz/vim-signify", event = 'BufEnter'})
-- Another similar plugin
-- use 'airblade/vim-gitgutter'
use {'kyazdani42/nvim-web-devicons', event = 'VimEnter'}
use { "kyazdani42/nvim-web-devicons", event = "VimEnter" }
use {
'nvim-lualine/lualine.nvim',
event = 'VimEnter',
config = [[require('config.statusline')]]
"nvim-lualine/lualine.nvim",
event = "VimEnter",
cond = firenvim_not_active,
config = [[require('config.statusline')]],
}
use({ "akinsho/bufferline.nvim", event = "VimEnter", config = [[require('config.bufferline')]] })
use { "akinsho/bufferline.nvim", event = "VimEnter",
cond = firenvim_not_active,
config = [[require('config.bufferline')]] }
-- fancy start screen
use { 'glepnir/dashboard-nvim', event = "VimEnter", config = [[require('config.dashboard-nvim')]] }
use { "glepnir/dashboard-nvim", event = "VimEnter",
cond = firenvim_not_active,
config = [[require('config.dashboard-nvim')]]
}
use({
use {
"lukas-reineke/indent-blankline.nvim",
event = 'VimEnter',
config = [[require('config.indent-blankline')]]
})
event = "VimEnter",
config = [[require('config.indent-blankline')]],
}
-- Highlight URLs inside vim
use({"itchyny/vim-highlighturl", event = "VimEnter"})
use { "itchyny/vim-highlighturl", event = "VimEnter" }
-- notification plugin
use({
use {
"rcarriga/nvim-notify",
event = "BufEnter",
config = function()
vim.defer_fn(function() require('config.nvim-notify') end, 2000)
end
})
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"})
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"})
use { "liuchengxu/vista.vim", cmd = "Vista" }
end
-- Snippet engine and snippet template
use({"SirVer/ultisnips", event = 'InsertEnter'})
use({ "honza/vim-snippets", after = 'ultisnips'})
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"})
use { "Raimondi/delimitMate", event = "InsertEnter" }
-- Comment plugin
use({"tpope/vim-commentary", event = "VimEnter"})
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"})
use { "907th/vim-auto-save", event = "InsertEnter" }
-- Show undo history visually
use({"simnalamburt/vim-mundo", cmd = {"MundoToggle", "MundoShow"}})
use { "simnalamburt/vim-mundo", cmd = { "MundoToggle", "MundoShow" } }
-- Manage your yank history
if vim.g.is_win or vim.g.is_mac then
use({"svermeulen/vim-yoink", event = "VimEnter"})
use { "svermeulen/vim-yoink", event = "VimEnter" }
end
-- Handy unix command inside Vim (Rename, Move etc.)
use({"tpope/vim-eunuch", cmd = {"Rename", "Delete"}})
use { "tpope/vim-eunuch", cmd = { "Rename", "Delete" } }
-- Repeat vim motions
use({"tpope/vim-repeat", event = "VimEnter"})
use { "tpope/vim-repeat", event = "VimEnter" }
-- Show the content of register in preview window
-- Plug 'junegunn/vim-peekaboo'
use({ "nvim-zh/better-escape.vim", event = { "InsertEnter" } })
use { "nvim-zh/better-escape.vim", event = { "InsertEnter" } }
if vim.g.is_mac then
use({ "lyokha/vim-xkbswitch", event = { "InsertEnter" } })
use { "lyokha/vim-xkbswitch", event = { "InsertEnter" } }
elseif vim.g.is_win then
use({ "Neur1n/neuims", event = { "InsertEnter" } })
use { "Neur1n/neuims", event = { "InsertEnter" } }
end
-- Syntax check and make
-- use 'neomake/neomake'
-- Auto format tools
use({ "sbdchd/neoformat", cmd = { "Neoformat" } })
-- use 'Chiel92/vim-autoformat'
use { "sbdchd/neoformat", cmd = { "Neoformat" } }
-- Git command inside vim
use({ "tpope/vim-fugitive", event = "User InGitRepo" })
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 { "rbong/vim-flog", requires = "tpope/vim-fugitive", cmd = { "Flog" } }
use({ "christoomey/vim-conflicted", requires = "tpope/vim-fugitive", cmd = {"Conflicted"}})
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')]]
"ruifm/gitlinker.nvim",
requires = "nvim-lua/plenary.nvim",
event = "User InGitRepo",
config = [[require('config.git-linker')]],
}
use({ "kevinhwang91/nvim-bqf", ft = "qf", config = [[require('config.bqf')]] })
-- 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 { "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({ "plasticboy/vim-markdown", ft = { "markdown" } })
use { "preservim/vim-markdown", ft = { "markdown" } }
-- Faster footnote generation
use({ "vim-pandoc/vim-markdownfootnotes", ft = { "markdown" } })
use { "vim-pandoc/vim-markdownfootnotes", ft = { "markdown" } }
-- Vim tabular plugin for manipulate tabular, required by markdown plugins
use({ "godlygeek/tabular", cmd = { "Tabularize" } })
use { "godlygeek/tabular", cmd = { "Tabularize" } }
-- Markdown JSON header highlight plugin
use({ "elzr/vim-json", ft = { "json", "markdown" } })
use { "elzr/vim-json", ft = { "json", "markdown" } }
-- Markdown previewing (only for Mac and Windows)
if vim.g.is_win or vim.g.is_mac then
use({
use {
"iamcco/markdown-preview.nvim",
run = function()
fn["mkdp#util#install"]()
end,
run = "cd app && npm install",
ft = { "markdown" },
})
}
end
use({'folke/zen-mode.nvim', cmd = 'ZenMode', config = [[require('config.zen-mode')]]})
use { "folke/zen-mode.nvim", cmd = "ZenMode", config = [[require('config.zen-mode')]] }
if vim.g.is_mac then
use({ "rhysd/vim-grammarous", ft = { "markdown" } })
use { "rhysd/vim-grammarous", ft = { "markdown" } }
end
use({"chrisbra/unicode.vim", event = "VimEnter"})
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"})
use { "wellle/targets.vim", event = "VimEnter" }
-- Plugin to manipulate character pairs quickly
-- use 'tpope/vim-surround'
use({"machakann/vim-sandwich", event = "VimEnter"})
use { "machakann/vim-sandwich", event = "VimEnter" }
-- Add indent object for vim (useful for languages like Python)
use({"michaeljsmith/vim-indent-object", event = "VimEnter"})
use { "michaeljsmith/vim-indent-object", event = "VimEnter" }
-- Only use these plugin on Windows and Mac and when LaTeX is installed
if vim.g.is_win or vim.g.is_mac and utils.executable("latex") then
use({ "lervag/vimtex", ft = { "tex" } })
-- use {'matze/vim-tex-fold', ft = {'tex', }}
-- use 'Konfekt/FastFold'
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" } })
use { "tmux-plugins/vim-tmux", ft = { "tmux" } }
end
-- Modern matchit implementation
use({"andymass/vim-matchup", event = "VimEnter"})
use { "andymass/vim-matchup", event = "VimEnter" }
-- Smoothie motions
-- use 'psliwka/vim-smoothie'
use({
use {
"karb94/neoscroll.nvim",
event = "VimEnter",
config = function()
vim.defer_fn(function() require('config.neoscroll') end, 2000)
end
})
vim.defer_fn(function()
require("config.neoscroll")
end, 2000)
end,
}
use({"tpope/vim-scriptease", cmd = {"Scriptnames", "Message", "Verbose"}})
use { "tpope/vim-scriptease", cmd = { "Scriptnames", "Message", "Verbose" } }
-- Asynchronous command execution
use({ "skywind3000/asyncrun.vim", opt = true, cmd = { "AsyncRun" } })
-- Another asynchronous plugin
-- Plug 'tpope/vim-dispatch'
use { "skywind3000/asyncrun.vim", opt = true, cmd = { "AsyncRun" } }
use({ "cespare/vim-toml", ft = { "toml" }, branch = "main" })
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({
use {
"glacambre/firenvim",
run = function() fn["firenvim#install"](0) end,
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')]] })
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'})
use { "tpope/vim-obsession", cmd = "Obsession" }
if vim.g.is_linux then
use({"ojroques/vim-oscyank", cmd = {'OSCYank', 'OSCYankReg'}})
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')]]})
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
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'}
use { "jdhao/whitespace.nvim", event = "VimEnter" }
-- file explorer
use {
'kyazdani42/nvim-tree.lua',
requires = { 'kyazdani42/nvim-web-devicons' },
config = [[require('config.nvim-tree')]]
"kyazdani42/nvim-tree.lua",
requires = { "kyazdani42/nvim-web-devicons" },
config = [[require('config.nvim-tree')]],
}
use { 'ii14/emmylua-nvim', ft = 'lua' }
use { "ii14/emmylua-nvim", ft = "lua" }
use { 'j-hui/fidget.nvim', after = 'nvim-lspconfig', config = [[require('config.fidget-nvim')]]}
use { "j-hui/fidget.nvim", after = "nvim-lspconfig", config = [[require('config.fidget-nvim')]] }
end,
config = {
max_jobs = 16,
compile_path = packer_util.join_paths(fn.stdpath('data'), 'site', 'lua', 'packer_compiled.lua'),
compile_path = packer_util.join_paths(fn.stdpath("data"), "site", "lua", "packer_compiled.lua"),
},
})
}
-- For fresh install, we need to install plugins. Otherwise, we just need to require `packer_compiled.lua`.
if fresh_install then
@@ -386,9 +382,9 @@ if fresh_install then
-- So plugin installation should be done after the startup process.
packer.sync()
else
local status, _ = pcall(require, 'packer_compiled')
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' })
vim.notify(msg, vim.log.levels.ERROR, { title = "nvim-config" })
end
end

View File

@@ -1,10 +1,5 @@
local fn = vim.fn
-- inspect something
function _G.inspect(item)
vim.pretty_print(item)
end
local M = {}
function M.executable(name)
@@ -15,12 +10,24 @@ function M.executable(name)
return false
end
--- check whether a feature exists in Nvim
--- @feat: string
--- the feature name, like `nvim-0.7` or `unix`.
--- return: bool
M.has = function(feat)
if fn.has(feat) == 1 then
return true
end
return false
end
--- Create a dir if it does not exist
function M.may_create_dir(dir)
local res = fn.isdirectory(dir)
if res == 0 then
fn.mkdir(dir, 'p')
fn.mkdir(dir, "p")
end
end
@@ -31,7 +38,6 @@ function M.get_nvim_version()
return nvim_ver_str
end
--- Generate random integers in the range [Low, High], inclusive,
--- adapted from https://stackoverflow.com/a/12739441/6064933
--- @low: the lower value for this range

View File

@@ -436,3 +436,7 @@ PostgreSQL
CNY
wechat
ziroom
Postgres
plpgsql
postgres
PySpark