mirror of
https://github.com/jdhao/nvim-config.git
synced 2025-06-08 14:14:33 +02:00
Compare commits
21 Commits
6e60475f3f
...
v0.10.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3040fa7969 | ||
|
|
b9cf3cc6ed | ||
|
|
154cde3d71 | ||
|
|
81f64ed32e | ||
|
|
db380ca7a7 | ||
|
|
51f81093da | ||
|
|
a9fc298063 | ||
|
|
9071e045eb | ||
|
|
fa79647a63 | ||
|
|
4b4ff5f549 | ||
|
|
12b0ff02b6 | ||
|
|
e3930e8aa7 | ||
|
|
21522bd194 | ||
|
|
a3c8b3d5b5 | ||
|
|
d150f39afc | ||
|
|
3904cd4ccf | ||
|
|
95d3b2f2d8 | ||
|
|
c3d8dc3e1d | ||
|
|
f9780c2dff | ||
|
|
256c37a946 | ||
|
|
eff98d036d |
24
README.md
24
README.md
@@ -84,6 +84,7 @@ and how to set up on different platforms (Linux, macOS, and Windows).
|
||||
+ Tags navigation via [vista](https://github.com/liuchengxu/vista.vim).
|
||||
+ Code formatting via [Neoformat](https://github.com/sbdchd/neoformat).
|
||||
+ Undo management via [vim-mundo](https://github.com/simnalamburt/vim-mundo)
|
||||
+ Code folding with [nvim-ufo](https://github.com/kevinhwang91/nvim-ufo) and [statuscol.nvim](https://github.com/luukvbaal/statuscol.nvim)
|
||||
+ ......
|
||||
|
||||
# UI Demo
|
||||
@@ -140,6 +141,12 @@ Go to a string starting with `se`
|
||||
<img src="https://user-images.githubusercontent.com/16662357/128589873-aadb8264-1098-4834-9876-fa66a309be05.gif" width="800">
|
||||
</p>
|
||||
|
||||
## code folding with nvim-ufo and statuscol.nvim
|
||||
|
||||
<p align="center">
|
||||
<img src="https://github.com/user-attachments/assets/a01a56b2-7c91-43de-b305-f2fbaa81dcec" width="800">
|
||||
</p>
|
||||
|
||||
# Shortcuts
|
||||
|
||||
Some of the shortcuts I use frequently are listed here. In the following shortcuts, `<leader>` represents ASCII character `,`.
|
||||
@@ -165,12 +172,14 @@ Some of the shortcuts I use frequently are listed here. In the following shortcu
|
||||
| `<space>t` | Normal | Linux/macOS/Win | Toggle tag window (show project tags in the right window) |
|
||||
| `<leader>gs` | Normal | Linux/macOS/Win | Show Git status result |
|
||||
| `<leader>gw` | Normal | Linux/macOS/Win | Run Git add for current file |
|
||||
| `<leader>gd` | Normal | Linux/macOS/Win | Run git diff for current file |
|
||||
| `<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>gbd` | Normal | Linux/macOS/Win | Delete a branch |
|
||||
| `<leader>gbn` | Normal | Linux/macOS/Win | Create a new branch |
|
||||
| `<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 |
|
||||
| `<leader>gbr` | Normal | macOS | Browse current git repo in browser |
|
||||
| `<leader>gb` | Visual | macOS | Blame current line |
|
||||
| `<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 |
|
||||
@@ -191,11 +200,12 @@ Some of the shortcuts I use frequently are listed here. In the following shortcu
|
||||
|
||||
In addition to commands provided by various plugins, I have also created some custom commands for personal use.
|
||||
|
||||
| command | description | example |
|
||||
|------------|-------------------------------------------------------------------------|--------------------------------|
|
||||
| `Redir` | capture command output to a tabpage for easier inspection. | `Redir hi` |
|
||||
| `Edit` | edit multiple files at the same time, supports globing | `Edit *.vim` |
|
||||
| `Datetime` | print current date and time or convert Unix time stamp to date and time | `Datetime 12345` or `Datetime` |
|
||||
| command | description | example |
|
||||
|--------------|-------------------------------------------------------------------------|--------------------------------|
|
||||
| `Redir` | capture command output to a tabpage for easier inspection. | `Redir hi` |
|
||||
| `Edit` | edit multiple files at the same time, supports globing | `Edit *.vim` |
|
||||
| `Datetime` | print current date and time or convert Unix time stamp to date and time | `Datetime 12345` or `Datetime` |
|
||||
| `JSONFormat` | format a JSON file | `JSONFormat` |
|
||||
|
||||
# Contributing
|
||||
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
" let the initial folding state be that all folds are closed.
|
||||
set foldlevel=0
|
||||
|
||||
" Use nvim-treesitter for folding
|
||||
set foldmethod=expr
|
||||
set foldexpr=nvim_treesitter#foldexpr()
|
||||
35
init.lua
35
init.lua
@@ -16,25 +16,18 @@ local utils = require("utils")
|
||||
local expected_version = "0.10.1"
|
||||
utils.is_compatible_version(expected_version)
|
||||
|
||||
local core_conf_files = {
|
||||
"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
|
||||
}
|
||||
local config_dir = vim.fn.stdpath("config")
|
||||
---@cast config_dir string
|
||||
|
||||
local viml_conf_dir = vim.fn.stdpath("config") .. "/viml_conf"
|
||||
-- source all the core config files
|
||||
for _, file_name in ipairs(core_conf_files) do
|
||||
if vim.endswith(file_name, 'vim') then
|
||||
local path = string.format("%s/%s", viml_conf_dir, file_name)
|
||||
local source_cmd = "source " .. path
|
||||
vim.cmd(source_cmd)
|
||||
else
|
||||
local module_name, _ = string.gsub(file_name, "%.lua", "")
|
||||
package.loaded[module_name] = nil
|
||||
require(module_name)
|
||||
end
|
||||
end
|
||||
-- some global settings
|
||||
require("globals")
|
||||
-- setting options in nvim
|
||||
vim.cmd("source " .. vim.fs.joinpath(config_dir, "viml_conf/options.vim"))
|
||||
-- various autocommands
|
||||
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"))
|
||||
-- colorscheme settings
|
||||
require("colorschemes")
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
require("bufferline").setup {
|
||||
options = {
|
||||
numbers = "buffer_id",
|
||||
numbers = "none",
|
||||
close_command = "bdelete! %d",
|
||||
right_mouse_command = nil,
|
||||
left_mouse_command = "buffer %d",
|
||||
@@ -44,3 +44,7 @@ require("bufferline").setup {
|
||||
sort_by = "id",
|
||||
},
|
||||
}
|
||||
|
||||
vim.keymap.set("n", "<space>bp", "<cmd>BufferLinePick<CR>", {
|
||||
desc = "pick a buffer",
|
||||
})
|
||||
|
||||
@@ -10,8 +10,8 @@ keymap.set("v", "<leader>gb", ":Git blame<cr>", { desc = "Git: blame selected li
|
||||
-- convert git to Git in command line mode
|
||||
vim.fn["utils#Cabbrev"]("git", "Git")
|
||||
|
||||
keymap.set("n", "<leader>gnb", function()
|
||||
vim.ui.input({ prompt = "Enter the new branch nmae" }, function(user_input)
|
||||
keymap.set("n", "<leader>gbn", function()
|
||||
vim.ui.input({ prompt = "Enter a new branch name" }, function(user_input)
|
||||
if user_input == nil or user_input == "" then
|
||||
return
|
||||
end
|
||||
|
||||
@@ -35,33 +35,48 @@ keymap.set("n", "N", "", {
|
||||
end,
|
||||
})
|
||||
|
||||
local no_word_under_cursor = function()
|
||||
local check_cursor_word = function()
|
||||
local cursor_word = vim.fn.expand("<cword>")
|
||||
|
||||
local result = cursor_word == ""
|
||||
if result then
|
||||
local msg = "E348: No string under cursor"
|
||||
api.nvim_err_writeln(msg)
|
||||
end
|
||||
|
||||
return result
|
||||
return result, cursor_word
|
||||
end
|
||||
|
||||
keymap.set("n", "*", "", {
|
||||
callback = function()
|
||||
if no_word_under_cursor() then
|
||||
local cursor_word_empty, cursor_word = check_cursor_word()
|
||||
if cursor_word_empty then
|
||||
return
|
||||
end
|
||||
vim.fn.execute("normal! *N")
|
||||
|
||||
local cmd = string.format([[normal! /\v<%s>]], cursor_word)
|
||||
|
||||
-- In order to say that we are pressing Enter key, instead of typing literally the character,
|
||||
-- we need to replace special notation with their internal representation.
|
||||
local escaped_enter = vim.api.nvim_replace_termcodes("<CR>", true, false, true)
|
||||
|
||||
-- character `N` is used to keep the cursor when pressing `*`
|
||||
local full_cmd = cmd .. escaped_enter .. "N"
|
||||
vim.fn.execute(full_cmd)
|
||||
hlslens.start()
|
||||
end,
|
||||
})
|
||||
keymap.set("n", "#", "", {
|
||||
callback = function()
|
||||
if no_word_under_cursor() then
|
||||
local cursor_word_empty, cursor_word = check_cursor_word()
|
||||
if cursor_word_empty then
|
||||
return
|
||||
end
|
||||
vim.fn.execute("normal! #N")
|
||||
|
||||
local cmd = string.format([[normal! ?\v<%s>]], cursor_word)
|
||||
local escaped_enter = vim.api.nvim_replace_termcodes("<CR>", true, false, true)
|
||||
|
||||
local full_cmd = cmd .. escaped_enter .. "N"
|
||||
vim.fn.execute(full_cmd)
|
||||
hlslens.start()
|
||||
end,
|
||||
})
|
||||
|
||||
4
lua/config/live-command.lua
Normal file
4
lua/config/live-command.lua
Normal file
@@ -0,0 +1,4 @@
|
||||
require("live-command").setup {
|
||||
enable_highlighting = true,
|
||||
inline_highlighting = true,
|
||||
}
|
||||
@@ -43,7 +43,7 @@ local custom_attach = function(client, bufnr)
|
||||
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())
|
||||
vim.print(vim.lsp.buf.list_workspace_folders())
|
||||
end, { desc = "list workspace folder" })
|
||||
|
||||
-- Set some key bindings conditional on server capabilities
|
||||
|
||||
@@ -35,7 +35,6 @@ cmp.setup {
|
||||
{ name = "ultisnips" }, -- For ultisnips user.
|
||||
{ name = "path" }, -- for path completion
|
||||
{ name = "buffer", keyword_length = 2 }, -- for buffer word completion
|
||||
{ name = "emoji", insert = true }, -- emoji completion
|
||||
},
|
||||
completion = {
|
||||
keyword_length = 1,
|
||||
@@ -50,12 +49,14 @@ cmp.setup {
|
||||
menu = {
|
||||
nvim_lsp = "[LSP]",
|
||||
ultisnips = "[US]",
|
||||
nvim_lua = "[Lua]",
|
||||
path = "[Path]",
|
||||
buffer = "[Buffer]",
|
||||
emoji = "[Emoji]",
|
||||
omni = "[Omni]",
|
||||
},
|
||||
show_labelDetails = true,
|
||||
maxwidth = 40,
|
||||
ellipsis_char = "...",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
require("yanky").setup({
|
||||
ring = {
|
||||
history_length = 50,
|
||||
storage = "memory",
|
||||
},
|
||||
require("yanky").setup {
|
||||
preserve_cursor_position = {
|
||||
enabled = false,
|
||||
},
|
||||
})
|
||||
highlight = {
|
||||
on_put = true,
|
||||
on_yank = false,
|
||||
timer = 300,
|
||||
},
|
||||
}
|
||||
|
||||
vim.keymap.set({ "n", "x" }, "p", "<Plug>(YankyPutAfter)")
|
||||
vim.keymap.set({ "n", "x" }, "P", "<Plug>(YankyPutBefore)")
|
||||
|
||||
-- cycle through the yank history, only work after paste
|
||||
vim.keymap.set("n", "[y", "<Plug>(YankyCycleForward)")
|
||||
vim.keymap.set("n", "]y", "<Plug>(YankyCycleBackward)")
|
||||
vim.keymap.set("n", "[y", "<Plug>(YankyPreviousEntry)")
|
||||
vim.keymap.set("n", "]y", "<Plug>(YankyNextEntry)")
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
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,
|
||||
options = {
|
||||
-- signcolumn = "no", -- disable signcolumn
|
||||
-- number = false, -- disable number column
|
||||
-- relativenumber = false, -- disable relative numbers
|
||||
cursorline = false, -- disable cursorline
|
||||
cursorcolumn = false, -- disable cursor column
|
||||
foldcolumn = "0", -- disable fold column
|
||||
list = false, -- disable whitespace characters
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -38,8 +38,8 @@ api.nvim_create_autocmd("TextYankPost", {
|
||||
pattern = "*",
|
||||
group = yank_group,
|
||||
callback = function(ev)
|
||||
if vim.v.event.operator == 'y' then
|
||||
vim.fn.setpos('.', vim.g.current_cursor_pos)
|
||||
if vim.v.event.operator == "y" then
|
||||
vim.fn.setpos(".", vim.g.current_cursor_pos)
|
||||
end
|
||||
end,
|
||||
})
|
||||
@@ -102,4 +102,174 @@ local function open_nvim_tree(data)
|
||||
require("nvim-tree.api").tree.open()
|
||||
end
|
||||
|
||||
vim.api.nvim_create_autocmd({ "VimEnter" }, { callback = open_nvim_tree })
|
||||
api.nvim_create_autocmd({ "VimEnter" }, { callback = open_nvim_tree })
|
||||
|
||||
-- Do not use smart case in command line mode, extracted from https://vi.stackexchange.com/a/16511/15292.
|
||||
api.nvim_create_augroup("dynamic_smartcase", { clear = true })
|
||||
api.nvim_create_autocmd("CmdLineEnter", {
|
||||
group = "dynamic_smartcase",
|
||||
pattern = ":",
|
||||
callback = function()
|
||||
vim.o.smartcase = false
|
||||
end,
|
||||
})
|
||||
|
||||
api.nvim_create_autocmd("CmdLineLeave", {
|
||||
group = "dynamic_smartcase",
|
||||
pattern = ":",
|
||||
callback = function()
|
||||
vim.o.smartcase = true
|
||||
end,
|
||||
})
|
||||
|
||||
api.nvim_create_autocmd("TermOpen", {
|
||||
group = api.nvim_create_augroup("term_start", { clear = true }),
|
||||
pattern = "*",
|
||||
callback = function()
|
||||
-- Do not use number and relative number for terminal inside nvim
|
||||
vim.wo.relativenumber = false
|
||||
vim.wo.number = false
|
||||
|
||||
-- Go to insert mode by default to start typing command
|
||||
vim.cmd("startinsert")
|
||||
end,
|
||||
})
|
||||
|
||||
-- Return to last cursor position when opening a file, note that here we cannot use BufReadPost
|
||||
-- as event. It seems that when BufReadPost is triggered, FileType event is still not run.
|
||||
-- So the filetype for this buffer is empty string.
|
||||
api.nvim_create_autocmd("FileType", {
|
||||
group = api.nvim_create_augroup("resume_cursor_position", { clear = true }),
|
||||
pattern = "*",
|
||||
callback = function(ev)
|
||||
local mark_pos = api.nvim_buf_get_mark(ev.buf, '"')
|
||||
local last_cursor_line = mark_pos[1]
|
||||
|
||||
local max_line = vim.fn.line("$")
|
||||
local buf_filetype = api.nvim_get_option_value("filetype", { buf = ev.buf })
|
||||
local buftype = api.nvim_get_option_value("buftype", { buf = ev.buf })
|
||||
|
||||
-- only handle normal files
|
||||
if buf_filetype == "" or buftype ~= "" then
|
||||
return
|
||||
end
|
||||
|
||||
-- Only resume last cursor position when there is no go-to-line command (something like '+23').
|
||||
if vim.fn.match(vim.v.argv, [[\v^\+(\d){1,}$]]) ~= -1 then
|
||||
return
|
||||
end
|
||||
|
||||
if last_cursor_line > 1 and last_cursor_line <= max_line then
|
||||
-- vim.print(string.format("mark_pos: %s", vim.inspect(mark_pos)))
|
||||
-- it seems that without vim.schedule, the cursor position can not be set correctly
|
||||
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))
|
||||
end
|
||||
end)
|
||||
-- the following two ways also seem to work,
|
||||
-- ref: https://www.reddit.com/r/neovim/comments/104lc26/how_can_i_press_escape_key_using_lua/
|
||||
-- vim.api.nvim_feedkeys("g`\"", "n", true)
|
||||
-- vim.fn.execute("normal! g`\"")
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
local number_toggle_group = api.nvim_create_augroup("numbertoggle", { clear = true })
|
||||
api.nvim_create_autocmd({ "BufEnter", "FocusGained", "InsertLeave", "WinEnter" }, {
|
||||
pattern = "*",
|
||||
group = number_toggle_group,
|
||||
desc = "togger line number",
|
||||
callback = function()
|
||||
if vim.wo.number then
|
||||
vim.wo.relativenumber = true
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
api.nvim_create_autocmd({ "BufLeave", "FocusLost", "InsertEnter", "WinLeave" }, {
|
||||
group = number_toggle_group,
|
||||
desc = "togger line number",
|
||||
callback = function()
|
||||
if vim.wo.number then
|
||||
vim.wo.relativenumber = false
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
api.nvim_create_autocmd("ColorScheme", {
|
||||
group = api.nvim_create_augroup("custom_highlight", { clear = true }),
|
||||
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 cursor colors
|
||||
highlight Cursor cterm=bold gui=bold guibg=#00c918 guifg=black
|
||||
highlight Cursor2 guifg=red guibg=red
|
||||
|
||||
" For floating windows border highlight
|
||||
highlight FloatBorder guifg=LightGreen guibg=NONE
|
||||
|
||||
" highlight for matching parentheses
|
||||
highlight MatchParen cterm=bold,underline gui=bold,underline
|
||||
]])
|
||||
end,
|
||||
})
|
||||
|
||||
api.nvim_create_autocmd("BufEnter", {
|
||||
pattern = "*",
|
||||
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 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')
|
||||
|
||||
if fn.index(quit_filetypes, bf) == -1 then
|
||||
should_quit = false
|
||||
end
|
||||
end
|
||||
|
||||
if should_quit then
|
||||
vim.cmd("qall")
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
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()"
|
||||
})
|
||||
|
||||
-- ref: https://vi.stackexchange.com/a/169/15292
|
||||
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
|
||||
local f = ev.file
|
||||
|
||||
if fn.getfsize(f) > file_size_limit or fn.getfsize(f) == -2 then
|
||||
vim.o.eventignore = "all"
|
||||
-- turning off relative number helps a lot
|
||||
vim.wo.relativenumber = false
|
||||
|
||||
vim.bo.swapfile = false
|
||||
vim.bo.bufhidden = "unload"
|
||||
vim.bo.undolevels = -1
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
@@ -3,11 +3,6 @@ local api = vim.api
|
||||
|
||||
local utils = require('utils')
|
||||
|
||||
-- Inspect something
|
||||
function _G.inspect(item)
|
||||
vim.print(item)
|
||||
end
|
||||
|
||||
------------------------------------------------------------------------
|
||||
-- custom variables --
|
||||
------------------------------------------------------------------------
|
||||
|
||||
@@ -45,7 +45,21 @@ keymap.set("n", [[\x]], "<cmd>windo lclose <bar> cclose <cr>", {
|
||||
-- Delete a buffer, without closing the window, see https://stackoverflow.com/q/4465095/6064933
|
||||
keymap.set("n", [[\d]], "<cmd>bprevious <bar> bdelete #<cr>", {
|
||||
silent = true,
|
||||
desc = "delete buffer",
|
||||
desc = "delete current buffer",
|
||||
})
|
||||
|
||||
keymap.set("n", [[\D]], function()
|
||||
local buf_ids = vim.api.nvim_list_bufs()
|
||||
local cur_buf = vim.api.nvim_win_get_buf(0)
|
||||
|
||||
for _, buf_id in pairs(buf_ids) do
|
||||
-- do not Delete unlisted buffers, which may lead to unexpected errors
|
||||
if vim.api.nvim_get_option_value("buflisted", { buf = buf_id }) and buf_id ~= cur_buf then
|
||||
vim.api.nvim_buf_delete(buf_id, { force = true })
|
||||
end
|
||||
end
|
||||
end, {
|
||||
desc = "delete other buffers",
|
||||
})
|
||||
|
||||
-- Insert a blank line below or above current line (do not move the cursor),
|
||||
@@ -218,18 +232,20 @@ keymap.set("n", "<leader>cb", function()
|
||||
return
|
||||
end
|
||||
|
||||
timer:start(0, 100, vim.schedule_wrap(function()
|
||||
vim.cmd [[
|
||||
timer:start(
|
||||
0,
|
||||
100,
|
||||
vim.schedule_wrap(function()
|
||||
vim.cmd([[
|
||||
set cursorcolumn!
|
||||
set cursorline!
|
||||
]]
|
||||
]])
|
||||
|
||||
if cnt == blink_times then
|
||||
timer:close()
|
||||
end
|
||||
if cnt == blink_times then
|
||||
timer:close()
|
||||
end
|
||||
|
||||
cnt = cnt + 1
|
||||
end)
|
||||
cnt = cnt + 1
|
||||
end)
|
||||
)
|
||||
end,
|
||||
{ desc = "show cursor" })
|
||||
end, { desc = "show cursor" })
|
||||
|
||||
@@ -23,7 +23,8 @@ end
|
||||
local plugin_specs = {
|
||||
-- auto-completion engine
|
||||
{
|
||||
"hrsh7th/nvim-cmp",
|
||||
"iguanacucumber/magazine.nvim",
|
||||
name = "nvim-cmp",
|
||||
-- event = 'InsertEnter',
|
||||
event = "VeryLazy",
|
||||
dependencies = {
|
||||
@@ -32,14 +33,12 @@ local plugin_specs = {
|
||||
"hrsh7th/cmp-path",
|
||||
"hrsh7th/cmp-buffer",
|
||||
"hrsh7th/cmp-omni",
|
||||
"hrsh7th/cmp-emoji",
|
||||
"quangnguyen30192/cmp-nvim-ultisnips",
|
||||
},
|
||||
config = function()
|
||||
require("config.nvim-cmp")
|
||||
end,
|
||||
},
|
||||
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
event = { "BufRead", "BufNewFile" },
|
||||
@@ -63,9 +62,6 @@ local plugin_specs = {
|
||||
end,
|
||||
},
|
||||
|
||||
-- Python indent (follows the PEP8 style)
|
||||
{ "Vimjas/vim-python-pep8-indent", ft = { "python" } },
|
||||
|
||||
-- Python-related text object
|
||||
{ "jeetsukumaran/vim-pythonsense", ft = { "python" } },
|
||||
|
||||
@@ -126,6 +122,15 @@ local plugin_specs = {
|
||||
"nvim-telescope/telescope-symbols.nvim",
|
||||
},
|
||||
},
|
||||
{
|
||||
"ibhagwan/fzf-lua",
|
||||
-- optional for icon support
|
||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||
config = function()
|
||||
-- calling `setup` is optional for customization
|
||||
require("fzf-lua").setup {}
|
||||
end,
|
||||
},
|
||||
{
|
||||
"MeanderingProgrammer/markdown.nvim",
|
||||
main = "render-markdown",
|
||||
@@ -285,10 +290,10 @@ local plugin_specs = {
|
||||
-- Manage your yank history
|
||||
{
|
||||
"gbprod/yanky.nvim",
|
||||
cmd = { "YankyRingHistory" },
|
||||
config = function()
|
||||
require("config.yanky")
|
||||
end,
|
||||
event = "VeryLazy",
|
||||
},
|
||||
|
||||
-- Handy unix command inside Vim (Rename, Move etc.)
|
||||
@@ -389,14 +394,6 @@ local plugin_specs = {
|
||||
ft = { "markdown" },
|
||||
},
|
||||
|
||||
{
|
||||
"folke/zen-mode.nvim",
|
||||
cmd = "ZenMode",
|
||||
config = function()
|
||||
require("config.zen-mode")
|
||||
end,
|
||||
},
|
||||
|
||||
{
|
||||
"rhysd/vim-grammarous",
|
||||
enabled = function()
|
||||
@@ -448,7 +445,7 @@ local plugin_specs = {
|
||||
|
||||
-- Modern matchit implementation
|
||||
{ "andymass/vim-matchup", event = "BufRead" },
|
||||
{ "tpope/vim-scriptease", cmd = { "Scriptnames", "Message", "Verbose" } },
|
||||
{ "tpope/vim-scriptease", cmd = { "Scriptnames", "Messages", "Verbose" } },
|
||||
|
||||
-- Asynchronous command execution
|
||||
{ "skywind3000/asyncrun.vim", lazy = true, cmd = { "AsyncRun" } },
|
||||
@@ -546,6 +543,36 @@ local plugin_specs = {
|
||||
ft = "lua", -- only load on lua files
|
||||
opts = {},
|
||||
},
|
||||
{
|
||||
"CopilotC-Nvim/CopilotChat.nvim",
|
||||
branch = "canary",
|
||||
dependencies = {
|
||||
{ "zbirenbaum/copilot.lua" }, -- or github/copilot.vim
|
||||
{ "nvim-lua/plenary.nvim" }, -- for curl, log wrapper
|
||||
},
|
||||
opts = {
|
||||
debug = true, -- Enable debugging
|
||||
-- See Configuration section for rest
|
||||
},
|
||||
-- See Commands section for default commands if you want to lazy load on them
|
||||
},
|
||||
{
|
||||
"zbirenbaum/copilot.lua",
|
||||
cmd = "Copilot",
|
||||
config = function()
|
||||
require("copilot").setup {}
|
||||
end,
|
||||
},
|
||||
{
|
||||
"smjonas/live-command.nvim",
|
||||
-- live-command supports semantic versioning via Git tags
|
||||
-- tag = "2.*",
|
||||
cmd = "Preview",
|
||||
config = function()
|
||||
require("config.live-command")
|
||||
end,
|
||||
event = "VeryLazy",
|
||||
},
|
||||
}
|
||||
|
||||
require("lazy").setup {
|
||||
|
||||
@@ -1,123 +0,0 @@
|
||||
" Do not use smart case in command line mode, extracted from https://vi.stackexchange.com/a/16511/15292.
|
||||
augroup dynamic_smartcase
|
||||
autocmd!
|
||||
autocmd CmdLineEnter : set nosmartcase
|
||||
autocmd CmdLineLeave : set smartcase
|
||||
augroup END
|
||||
|
||||
augroup term_settings
|
||||
autocmd!
|
||||
" Do not use number and relative number for terminal inside nvim
|
||||
autocmd TermOpen * setlocal norelativenumber nonumber
|
||||
" Go to insert mode by default to start typing command
|
||||
autocmd TermOpen * startinsert
|
||||
augroup END
|
||||
|
||||
" More accurate syntax highlighting? (see `:h syn-sync`)
|
||||
augroup accurate_syn_highlight
|
||||
autocmd!
|
||||
autocmd BufEnter * :syntax sync fromstart
|
||||
augroup END
|
||||
|
||||
" Return to last cursor position when opening a file
|
||||
augroup resume_cursor_position
|
||||
autocmd!
|
||||
autocmd BufReadPost * call s:resume_cursor_position()
|
||||
augroup END
|
||||
|
||||
" Only resume last cursor position when there is no go-to-line command (something like '+23').
|
||||
function s:resume_cursor_position() abort
|
||||
if line("'\"") > 1 && line("'\"") <= line("$") && &ft !~# 'commit'
|
||||
let l:args = v:argv " command line arguments
|
||||
for l:cur_arg in l:args
|
||||
" Check if a go-to-line command is given.
|
||||
let idx = match(l:cur_arg, '\v^\+(\d){1,}$')
|
||||
if idx != -1
|
||||
return
|
||||
endif
|
||||
endfor
|
||||
|
||||
execute "normal! g`\"zvzz"
|
||||
endif
|
||||
endfunction
|
||||
|
||||
augroup numbertoggle
|
||||
autocmd!
|
||||
autocmd BufEnter,FocusGained,InsertLeave,WinEnter * if &nu | set rnu | endif
|
||||
autocmd BufLeave,FocusLost,InsertEnter,WinLeave * if &nu | set nornu | endif
|
||||
augroup END
|
||||
|
||||
" Define or override some highlight groups
|
||||
augroup custom_highlight
|
||||
autocmd!
|
||||
autocmd ColorScheme * call s:custom_highlight()
|
||||
augroup END
|
||||
|
||||
function! s:custom_highlight() abort
|
||||
" For yank highlight
|
||||
highlight YankColor ctermfg=59 ctermbg=41 guifg=#34495E guibg=#2ECC71
|
||||
|
||||
" For cursor colors
|
||||
highlight Cursor cterm=bold gui=bold guibg=#00c918 guifg=black
|
||||
highlight Cursor2 guifg=red guibg=red
|
||||
|
||||
" For floating windows border highlight
|
||||
highlight FloatBorder guifg=LightGreen guibg=NONE
|
||||
|
||||
" highlight for matching parentheses
|
||||
highlight MatchParen cterm=bold,underline gui=bold,underline
|
||||
endfunction
|
||||
|
||||
augroup auto_close_win
|
||||
autocmd!
|
||||
autocmd BufEnter * call s:quit_current_win()
|
||||
augroup END
|
||||
|
||||
" Quit Nvim if we have only one window, and its filetype match our pattern.
|
||||
function! s:quit_current_win() abort
|
||||
let l:quit_filetypes = ['qf', 'vista', 'NvimTree']
|
||||
|
||||
let l:should_quit = v:true
|
||||
|
||||
let l:tabwins = nvim_tabpage_list_wins(0)
|
||||
for w in l:tabwins
|
||||
let l:buf = nvim_win_get_buf(w)
|
||||
let l:bf = getbufvar(l:buf, '&filetype')
|
||||
|
||||
if index(l:quit_filetypes, l:bf) == -1
|
||||
let l:should_quit = v:false
|
||||
endif
|
||||
endfor
|
||||
|
||||
if l:should_quit
|
||||
qall
|
||||
endif
|
||||
endfunction
|
||||
|
||||
augroup git_repo_check
|
||||
autocmd!
|
||||
autocmd VimEnter,DirChanged * call utils#Inside_git_repo()
|
||||
augroup END
|
||||
|
||||
" ref: https://vi.stackexchange.com/a/169/15292
|
||||
function! s:handle_large_file() abort
|
||||
let g:large_file = 10485760 " 10MB
|
||||
let f = expand("<afile>")
|
||||
|
||||
if getfsize(f) > g:large_file || getfsize(f) == -2
|
||||
set eventignore+=all
|
||||
" turning off relative number helps a lot
|
||||
set norelativenumber
|
||||
setlocal noswapfile bufhidden=unload buftype=nowrite undolevels=-1
|
||||
else
|
||||
set eventignore-=all relativenumber
|
||||
endif
|
||||
endfunction
|
||||
|
||||
augroup LargeFile
|
||||
autocmd!
|
||||
autocmd BufReadPre * call s:handle_large_file()
|
||||
augroup END
|
||||
|
||||
" Load auto-command defined in Lua
|
||||
lua require("custom-autocmd")
|
||||
@@ -121,7 +121,7 @@ set completeopt+=menuone " Show menu even if there is only one item
|
||||
set completeopt-=preview " Disable the preview window
|
||||
|
||||
set pumheight=10 " Maximum number of items to show in popup menu
|
||||
set pumblend=10 " pseudo transparency for completion menu
|
||||
set pumblend=5 " pseudo transparency for completion menu
|
||||
|
||||
set winblend=0 " pseudo transparency for floating window
|
||||
|
||||
|
||||
Reference in New Issue
Block a user