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

Compare commits

...

10 Commits

Author SHA1 Message Date
WombleWoo7547
4d186b2f06
Merge 994b0d4c84dcf9e780d5887c7527a9ab04ef2d8b into 7e706515a85f9a8931c8bdd14440ac9419405061 2024-12-20 18:18:44 +08:00
jdhao
7e706515a8 silently format lua file using stylua
We need to disable the mapping set for LSP, otherwise the mapping set in
lua.vim will be overridden.
2024-12-19 23:45:15 +01:00
jdhao
1d66475cae make option showcmd shown in statusline instead
Related issues:

+ https://groups.google.com/g/vim_dev/c/YwFLUaduXTQ
+ https://github.com/neovim/neovim/pull/21202
+ https://github.com/nvim-lualine/lualine.nvim/issues/949
2024-12-19 23:39:14 +01:00
jdhao
5328c477a8 reformat with stylua 2024-12-19 22:16:23 +01:00
jdhao
917ab82ffb update dict 2024-12-19 22:13:53 +01:00
jdhao
54eb3ca811 install new plugins 2024-12-19 22:08:56 +01:00
jdhao
64b41fbd58 use native lua api instead of vim.cmd 2024-12-19 22:01:04 +01:00
jdhao
d941be482b update lualine config 2024-12-08 21:34:47 +01:00
jdhao
ab75189231 Fix command CopyPath issue
the string.gsub in lua is not flexible and use vim.fn.substitute()
instead.
2024-11-29 23:25:19 +01:00
WombleWoo7547
994b0d4c84
Update documentation to mention WSL2 2024-10-06 09:21:22 +01:00
19 changed files with 146 additions and 107 deletions

View File

@ -4,4 +4,4 @@ set formatoptions-=r
nnoremap <buffer><silent> <F9> :luafile %<CR>
nnoremap <buffer><silent> <space>f <cmd>!stylua %<CR>
nnoremap <buffer><silent> <space>f <cmd>silent !stylua %<CR>

View File

@ -10,7 +10,7 @@ For a list of terminals that support true colors, see [here](https://github.com/
For macOS, we can use [kitty](https://sw.kovidgoyal.net/kitty/), [iterm2](https://www.iterm2.com/), [wezterm](https://wezfurlong.org/wezterm/) or [Alacritty](https://github.com/jwilm/alacritty).
If you ssh to Linux server on Windows, I recommend [wsltty](https://github.com/mintty/wsltty) and [Cygwin](https://www.cygwin.com/),
If you ssh to Linux server on Windows, or use [WSL2 (Windows Subsystem for Linux)](https://learn.microsoft.com/en-us/windows/wsl/about) I recommend [wsltty](https://github.com/mintty/wsltty) and [Cygwin](https://www.cygwin.com/),
both of them use [mintty](https://github.com/mintty/mintty) as the terminal emulator.
For the latest version of Windows 10, you can also try [Windows Terminal](https://github.com/microsoft/terminal).

View File

@ -28,6 +28,6 @@ require("custom-autocmd")
-- all the user-defined mappings
require("mappings")
-- all the plugins installed and their configurations
vim.cmd("source ".. vim.fs.joinpath(config_dir, "viml_conf/plugins.vim"))
vim.cmd("source " .. vim.fs.joinpath(config_dir, "viml_conf/plugins.vim"))
-- colorscheme settings
require("colorschemes")

View File

@ -50,18 +50,18 @@ M.colorscheme_conf = {
end,
onedarkpro = function()
-- set colorscheme after options
vim.cmd('colorscheme onedark_vivid')
vim.cmd("colorscheme onedark_vivid")
end,
material = function()
vim.g.material_style = "oceanic"
vim.cmd('colorscheme material')
vim.cmd("colorscheme material")
end,
arctic = function ()
arctic = function()
vim.cmd("colorscheme arctic")
end,
kanagawa = function()
vim.cmd("colorscheme kanagawa-wave")
end
end,
}
--- Use a random colorscheme from the pre-defined list of colorschemes.

View File

@ -59,17 +59,17 @@ conf.center = {
},
}
dashboard.setup({
theme = 'doom',
shortcut_type = 'number',
config = conf
})
dashboard.setup {
theme = "doom",
shortcut_type = "number",
config = conf,
}
api.nvim_create_autocmd("FileType", {
pattern = "dashboard",
group = api.nvim_create_augroup("dashboard_enter", { clear = true }),
callback = function ()
callback = function()
keymap.set("n", "q", ":qa<CR>", { buffer = true, silent = true })
keymap.set("n", "e", ":enew<CR>", { buffer = true, silent = true })
end
end,
})

View File

@ -5,16 +5,26 @@ gitlinker.setup {
callbacks = {
["dev.azure.com"] = function(url_data)
vim.print(url_data)
local url = require"gitlinker.hosts".get_base_https_url(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"
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
end,
},
mappings = nil,
}
@ -28,9 +38,9 @@ end, {
})
keymap.set("n", "<leader>gbr", function()
gitlinker.get_repo_url({
action_callback = gitlinker.actions.open_in_browser
})
gitlinker.get_repo_url {
action_callback = gitlinker.actions.open_in_browser,
}
end, {
silent = true,
desc = "Git: browse repo in browser",

View File

@ -45,13 +45,13 @@ gs.setup {
end,
}
vim.api.nvim_create_autocmd('ColorScheme', {
vim.api.nvim_create_autocmd("ColorScheme", {
pattern = "*",
callback = function()
vim.cmd [[
vim.cmd([[
hi GitSignsChangeInline gui=reverse
hi GitSignsAddInline gui=reverse
hi GitSignsDeleteInline gui=reverse
]]
end
]])
end,
})

View File

@ -14,7 +14,7 @@ local activate_hlslens = function(direction)
-- Deal with the case that there is no such pattern in current buffer.
if not status then
local start_idx, _ = string.find(msg, 'E486', 1, true)
local start_idx, _ = string.find(msg, "E486", 1, true)
local msg_part = string.sub(msg, start_idx)
api.nvim_err_writeln(msg_part)
return

View File

@ -13,10 +13,10 @@ local set_qflist = function(buf_num, severity)
diagnostics = diagnostic.get(buf_num, { severity = severity })
local qf_items = diagnostic.toqflist(diagnostics)
vim.fn.setqflist({}, ' ', { title = 'Diagnostics', items = qf_items })
vim.fn.setqflist({}, " ", { title = "Diagnostics", items = qf_items })
-- open quickfix by default
vim.cmd[[copen]]
vim.cmd([[copen]])
end
local custom_attach = function(client, bufnr)
@ -39,7 +39,9 @@ local custom_attach = function(client, bufnr)
-- 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>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" })
@ -48,8 +50,8 @@ local custom_attach = function(client, bufnr)
end, { desc = "list workspace folder" })
-- Set some key bindings conditional on server capabilities
if client.server_capabilities.documentFormattingProvider then
map({"n", "x"}, "<space>f", vim.lsp.buf.format, { desc = "format code" })
if client.server_capabilities.documentFormattingProvider and client.name ~= "lua_ls" then
map({ "n", "x" }, "<space>f", vim.lsp.buf.format, { desc = "format code" })
end
-- Uncomment code below to enable inlay hint from language server, some LSP server supports inlay hint,
@ -72,8 +74,9 @@ 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 #diagnostic.get() > 0
if
(cursor_pos[1] ~= vim.b.diagnostics_pos[1] or cursor_pos[2] ~= vim.b.diagnostics_pos[2])
and #diagnostic.get() > 0
then
diagnostic.open_float(nil, float_opts)
end
@ -91,20 +94,20 @@ local custom_attach = function(client, bufnr)
]])
local gid = api.nvim_create_augroup("lsp_document_highlight", { clear = true })
api.nvim_create_autocmd("CursorHold" , {
api.nvim_create_autocmd("CursorHold", {
group = gid,
buffer = bufnr,
callback = function ()
callback = function()
lsp.buf.document_highlight()
end
end,
})
api.nvim_create_autocmd("CursorMoved" , {
api.nvim_create_autocmd("CursorMoved", {
group = gid,
buffer = bufnr,
callback = function ()
callback = function()
lsp.buf.clear_references()
end
end,
})
end
@ -114,12 +117,12 @@ local custom_attach = function(client, bufnr)
end
end
local capabilities = require('cmp_nvim_lsp').default_capabilities()
local capabilities = require("cmp_nvim_lsp").default_capabilities()
-- required by nvim-ufo
capabilities.textDocument.foldingRange = {
dynamicRegistration = false,
lineFoldingOnly = true
dynamicRegistration = false,
lineFoldingOnly = true,
}
-- For what diagnostic is enabled in which type checking mode, check doc:
@ -127,21 +130,21 @@ capabilities.textDocument.foldingRange = {
-- Currently, the pyright also has some issues displaying hover documentation:
-- https://www.reddit.com/r/neovim/comments/1gdv1rc/what_is_causeing_the_lsp_hover_docs_to_looks_like/
if utils.executable('pyright') then
if utils.executable("pyright") then
local new_capability = {
-- this will remove some of the diagnostics that duplicates those from ruff, idea taken and adapted from
-- here: https://github.com/astral-sh/ruff-lsp/issues/384#issuecomment-1989619482
textDocument = {
publishDiagnostics = {
tagSupport = {
valueSet = { 2 }
}
valueSet = { 2 },
},
},
hover = {
contentFormat = { "plaintext" },
dynamicRegistration = true,
},
}
},
}
local merged_capability = vim.tbl_deep_extend("force", capabilities, new_capability)
@ -177,25 +180,25 @@ if utils.executable('pyright') then
},
}
else
vim.notify("pyright not found!", vim.log.levels.WARN, { title = 'Nvim-config' })
vim.notify("pyright not found!", vim.log.levels.WARN, { title = "Nvim-config" })
end
if utils.executable("ruff") then
require('lspconfig').ruff.setup({
require("lspconfig").ruff.setup {
on_attach = custom_attach,
capabilities = capabilities,
init_options = {
-- the settings can be found here: https://docs.astral.sh/ruff/editors/settings/
settings = {
organizeImports = true,
}
}
})
},
},
}
end
-- Disable ruff hover feature in favor of Pyright
vim.api.nvim_create_autocmd("LspAttach", {
group = vim.api.nvim_create_augroup('lsp_attach_disable_ruff_hover', { clear = true }),
group = vim.api.nvim_create_augroup("lsp_attach_disable_ruff_hover", { clear = true }),
callback = function(args)
local client = vim.lsp.get_client_by_id(args.data.client_id)
-- vim.print(client.name, client.server_capabilities)
@ -203,11 +206,11 @@ vim.api.nvim_create_autocmd("LspAttach", {
if client == nil then
return
end
if client.name == 'ruff' then
if client.name == "ruff" then
client.server_capabilities.hoverProvider = false
end
end,
desc = 'LSP: Disable hover capability from Ruff',
desc = "LSP: Disable hover capability from Ruff",
})
if utils.executable("ltex-ls") then
@ -217,11 +220,11 @@ if utils.executable("ltex-ls") then
filetypes = { "text", "plaintex", "tex", "markdown" },
settings = {
ltex = {
language = "en"
language = "en",
},
},
flags = { debounce_text_changes = 300 },
}
}
end
if utils.executable("clangd") then
@ -267,8 +270,8 @@ if utils.executable("lua-language-server") then
version = "LuaJIT",
},
hint = {
enable = true
}
enable = true,
},
},
},
capabilities = capabilities,
@ -276,10 +279,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("DiagnosticSignInfo", { 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

@ -140,13 +140,15 @@ require("lualine").setup {
options = {
icons_enabled = true,
theme = "auto",
component_separators = { left = "", right = "" },
section_separators = "",
component_separators = "",
disabled_filetypes = {},
always_divide_middle = true,
},
sections = {
lualine_a = { "mode" },
lualine_a = {
"mode",
},
lualine_b = {
{
"branch",
@ -154,6 +156,7 @@ require("lualine").setup {
-- truncate branch name in case the name is too long
return string.sub(name, 1, 20)
end,
color = { gui = "italic,bold" },
},
{
virtual_env,
@ -172,8 +175,8 @@ require("lualine").setup {
source = diff,
},
{
ime_state,
color = { fg = "black", bg = "#f46868" },
"%S",
color = { gui = "bold", fg = "cyan" },
},
{
spell,
@ -181,6 +184,10 @@ require("lualine").setup {
},
},
lualine_x = {
{
ime_state,
color = { fg = "black", bg = "#f46868" },
},
{
get_active_lsp,
icon = " LSP:",
@ -192,7 +199,7 @@ require("lualine").setup {
},
},
lualine_y = {
"encoding",
{ "encoding", fmt = string.upper },
{
"fileformat",
symbols = {
@ -212,7 +219,8 @@ require("lualine").setup {
mixed_indent,
color = "WarningMsg",
},
"progress"
"location",
"progress",
},
},
inactive_sections = {

View File

@ -4,7 +4,7 @@ hop.setup {
case_insensitive = true,
char2_fallback_key = "<CR>",
quit_key = "<Esc>",
match_mappings = { "zh_sc" }
match_mappings = { "zh_sc" },
}
keymap.set({ "n", "v", "o" }, "f", "", {
@ -24,5 +24,5 @@ vim.api.nvim_create_autocmd("ColorScheme", {
hi HopNextKey1 cterm=bold ctermfg=176 gui=bold guibg=#ff00ff guifg=#ffffff
hi HopNextKey2 cterm=bold ctermfg=176 gui=bold guibg=#ff00ff guifg=#ffffff
]])
end
end,
})

View File

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

View File

@ -1,6 +1,6 @@
require("which-key").setup {
preset = "modern",
icons = {
mappings = false
}
mappings = false,
},
}

View File

@ -165,8 +165,9 @@ api.nvim_create_autocmd("FileType", {
vim.schedule(function()
local status, result = pcall(api.nvim_win_set_cursor, 0, mark_pos)
if not status then
api.nvim_err_writeln(string.format("Failed to resume cursor position. Context %s, error: %s",
vim.inspect(ev), result))
api.nvim_err_writeln(
string.format("Failed to resume cursor position. Context %s, error: %s", vim.inspect(ev), result)
)
end
end)
-- the following two ways also seem to work,
@ -204,20 +205,18 @@ api.nvim_create_autocmd("ColorScheme", {
pattern = "*",
desc = "Define or overrride some highlight groups",
callback = function()
vim.cmd([[
" For yank highlight
highlight YankColor ctermfg=59 ctermbg=41 guifg=#34495E guibg=#2ECC71
-- For yank highlight
vim.api.nvim_set_hl(0, "YankColor", { fg = "#34495E", bg = "#2ECC71", ctermfg = 59, ctermbg = 41 })
" For cursor colors
highlight Cursor cterm=bold gui=bold guibg=#00c918 guifg=black
highlight Cursor2 guifg=red guibg=red
-- For cursor colors
vim.api.nvim_set_hl(0, "Cursor", { fg = "black", bg = "#00c918", bold = true })
vim.api.nvim_set_hl(0, "Cursor2", { fg = "red", bg = "red" })
" For floating windows border highlight
highlight FloatBorder guifg=LightGreen guibg=NONE
-- For floating windows border highlight
vim.api.nvim_set_hl(0, "FloatBorder", { fg = "LightGreen" })
" highlight for matching parentheses
highlight MatchParen cterm=bold,underline gui=bold,underline
]])
-- highlight for matching parentheses
vim.api.nvim_set_hl(0, "MatchParen", { bold = true, underline = true })
end,
})
@ -226,14 +225,14 @@ api.nvim_create_autocmd("BufEnter", {
group = api.nvim_create_augroup("auto_close_win", { clear = true }),
desc = "Quit Nvim if we have only one window, and its filetype match our pattern",
callback = function(ev)
local quit_filetypes = {'qf', 'vista', 'NvimTree'}
local quit_filetypes = { "qf", "vista", "NvimTree" }
local should_quit = true
local tabwins = api.nvim_tabpage_list_wins(0)
for _, win in pairs(tabwins) do
local buf = api.nvim_win_get_buf(win)
local bf = fn.getbufvar(buf, '&filetype')
local bf = fn.getbufvar(buf, "&filetype")
if fn.index(quit_filetypes, bf) == -1 then
should_quit = false
@ -243,14 +242,14 @@ api.nvim_create_autocmd("BufEnter", {
if should_quit then
vim.cmd("qall")
end
end
end,
})
api.nvim_create_autocmd({"VimEnter", "DirChanged"}, {
api.nvim_create_autocmd({ "VimEnter", "DirChanged" }, {
group = api.nvim_create_augroup("git_repo_check", { clear = true }),
pattern = "*",
desc = "check if we are inside Git repo",
command = "call utils#Inside_git_repo()"
command = "call utils#Inside_git_repo()",
})
-- ref: https://vi.stackexchange.com/a/169/15292
@ -258,8 +257,8 @@ api.nvim_create_autocmd("BufReadPre", {
group = api.nvim_create_augroup("large_file", { clear = true }),
pattern = "*",
desc = "check if we are inside Git repo",
callback = function (ev)
local file_size_limit =524288 -- 0.5MB
callback = function(ev)
local file_size_limit = 524288 -- 0.5MB
local f = ev.file
if fn.getfsize(f) > file_size_limit or fn.getfsize(f) == -2 then
@ -271,5 +270,5 @@ api.nvim_create_autocmd("BufReadPre", {
vim.bo.bufhidden = "unload"
vim.bo.undolevels = -1
end
end
end,
})

View File

@ -1,28 +1,28 @@
local fn = vim.fn
local api = vim.api
local utils = require('utils')
local utils = require("utils")
------------------------------------------------------------------------
-- 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.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
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 utils.executable("python3") then
if vim.g.is_win then
vim.g.python3_host_prog = fn.substitute(fn.exepath("python3"), ".exe$", '', 'g')
vim.g.python3_host_prog = fn.substitute(fn.exepath("python3"), ".exe$", "", "g")
else
vim.g.python3_host_prog = fn.exepath("python3")
end
@ -32,18 +32,18 @@ else
end
-- Custom mapping <leader> (see `:h mapleader` for more info)
vim.g.mapleader = ','
vim.g.mapleader = ","
-- Enable highlighting for lua HERE doc inside vim script
vim.g.vimsyn_embed = 'l'
vim.g.vimsyn_embed = "l"
-- Use English as main language
vim.cmd [[language en_US.UTF-8]]
vim.cmd([[language en_US.UTF-8]])
-- 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_netrw = 1
vim.g.loaded_netrwPlugin = 1
vim.g.netrw_liststyle = 3
if vim.g.is_win then

View File

@ -542,7 +542,6 @@ local plugin_specs = {
},
{
"CopilotC-Nvim/CopilotChat.nvim",
branch = "canary",
dependencies = {
{ "zbirenbaum/copilot.lua" }, -- or github/copilot.vim
{ "nvim-lua/plenary.nvim" }, -- for curl, log wrapper
@ -578,6 +577,17 @@ local plugin_specs = {
require("nvim-lightbulb").setup { autocmd = { enabled = true } }
end,
},
{
"Bekaboo/dropbar.nvim",
},
{
"vhyrro/luarocks.nvim",
priority = 1000, -- Very high priority is required, luarocks.nvim should run as the first plugin in your config.
opts = {
rocks = { "lua-toml" }, -- specifies a list of rocks to install
-- luarocks_build_args = { "--with-lua=/my/path" }, -- extra options to pass to luarocks's configuration script
},
},
}
require("lazy").setup {
@ -589,5 +599,6 @@ require("lazy").setup {
},
rocks = {
enabled = false,
hererocks = false,
},
}

View File

@ -16,7 +16,7 @@ vim.api.nvim_create_user_command("CopyPath", function(context)
return
end
file_path = string.gsub(full_path, project_root, "<project-root>")
file_path = vim.fn.substitute(full_path, project_root, "<project-root>", "g")
end
if context["args"] == "absolute" then

View File

@ -470,3 +470,9 @@ qpdf
Elasticsearch
kibana
submodule
unix
GCP
Kubernetes
pubsub
Luarocks
luarocks

View File

@ -179,3 +179,5 @@ set diffopt+=linematch:60
set nowrap " do no wrap
set noruler
set showcmdloc=statusline