04.06.2025

This commit is contained in:
Alexander Neonxp Kiryukhin 2025-06-04 12:06:36 +03:00
parent d4c839302b
commit 27416cef99
Signed by: NeonXP
SSH key fingerprint: SHA256:SVt7TjxbVc87m1QYaQziOJ0N3OCFURv2g76gD/UTTXI
15 changed files with 190 additions and 205 deletions

View file

@ -88,9 +88,7 @@ vim.api.nvim_create_autocmd("BufEnter", {
vim.api.nvim_create_autocmd({ "BufEnter", "BufAdd", "BufNew", "BufNewFile", "BufWinEnter" }, {
group = vim.api.nvim_create_augroup("TS_FOLD_WORKAROUND", {}),
callback = function()
vim.opt.foldlevelstart = 99
vim.opt.foldmethod = "expr"
vim.opt.foldexpr = "nvim_treesitter#foldexpr()"
-- vim.cmd([[normal zR]])
end,
})
vim.api.nvim_create_autocmd("FileType", {
@ -142,7 +140,11 @@ vim.api.nvim_create_autocmd("FileType", {
vim.opt_local.cindent = false
end,
})
vim.filetype.add({
extension = {
hjson = "hjson",
},
})
vim.api.nvim_create_autocmd("VimResized", {
pattern = "*",
callback = function()

View file

@ -31,8 +31,8 @@ kmap("n", "<leader>vs", "<cmd>vsplit<CR>", { noremap = true, silent = true, desc
-- {{{ Управление вкладками --
kmap("n", "<A-Right>", ":tabnext<CR>", { noremap = true, silent = true, desc = "Next tab" })
kmap("n", "<A-Left>", ":tabprevious<CR>", { noremap = true, silent = true, desc = "Previous tab" })
kmap("n", "<leader>tn", ":tabnew<CR>", { noremap = true, silent = true, desc = "New tab" })
kmap("n", "<leader>tc", ":tabclose<CR>", { noremap = true, silent = true, desc = "Close tab" })
kmap("n", "<A-t>", ":tabnew<CR>", { noremap = true, silent = true, desc = "New tab" })
kmap("n", "<A-w>", ":tabclose<CR>", { noremap = true, silent = true, desc = "Close tab" })
-- Быстрый переход по вкладкам --
for i = 1, 9 do

View file

@ -4,7 +4,7 @@ local util = require("lspconfig/util")
local function config(_config)
return vim.tbl_deep_extend("force", {
capabilities = require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities()),
-- capabilities = require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities()),
}, _config or {})
end
-- иницализация gopls LSP для Go
@ -25,7 +25,7 @@ lspconfig.gopls.setup(config({
}))
lspconfig.templ.setup(config({
cmd = {"templ", "lsp"},
filetypes = {"templ"},
cmd = { "templ", "lsp" },
filetypes = { "templ" },
root_markers = { "go.work", "go.mod", ".git" },
}))

View file

@ -32,7 +32,12 @@ local options = {
scrolloff = 8,
sidescrolloff = 8,
syntax = "on",
foldenable = false,
foldmethod = "expr",
foldexpr = "v:lua.vim.treesitter.foldexpr()",
-- foldexpr = "nvim_treesitter#foldexpr()"
foldnestmax = 10,
foldlevel = 9,
-- foldlevelstart = 99,
scrolloff = 999,
so = vim.fn.floor(vim.fn.winheight(0) / 2),
guicursor = "n-v-c:block,i-ci-ve:hor10,r-cr:hor20,o:hor50,a:blinkwait700-blinkoff400-blinkon250-Cursor/lCursor,sm:block-blinkwait175-blinkoff150-blinkon175",
@ -53,6 +58,8 @@ vim.filetype.add({
extension = {
templ = "templ",
},
pattern = {
[".*/todo.txt"] = "todotxt",
},
})
vim.cmd([[colorscheme neonxp]])

View file

@ -5,13 +5,8 @@ require("lazy").setup({
build = "cd lua/fzy && make",
},
{ "neovim/nvim-lspconfig" },
{
"arnarg/todotxt.nvim",
dependencies = { "MunifTanjim/nui.nvim" },
opts = {
todo_file = "~/Документы/todo.txt",
},
},
{ "Snyssfx/goerr-nvim" },
require("plugins.todo"),
require("plugins.codecompanion"),
require("plugins.resize"),
require("plugins.blankline"),

View file

@ -56,17 +56,9 @@ return {
return false
end
-- Skip autosave if you're in an active snippet
if require("luasnip").in_snippet() then
return false
end
return true
end,
write_all_buffers = false, -- write all buffers when the current one meets `condition`
-- Do not execute autocmds when saving
-- If you set noautocmd = true, autosave won't trigger an auto format
-- https://github.com/okuuva/auto-save.nvim/issues/55
write_all_buffers = true, -- write all buffers when the current one meets `condition`
noautocmd = false,
lockmarks = false, -- lock marks when saving, see `:h lockmarks` for more details
-- delay after which a pending save is executed (default 1000)

View file

@ -6,91 +6,44 @@ local source_mapping = {
path = "[Path]",
}
return {
"hrsh7th/nvim-cmp",
"saghen/blink.cmp",
lazy = false,
version = "1.*",
dependencies = {
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
"saadparwaiz1/cmp_luasnip",
{
"L3MON4D3/LuaSnip",
lazy = true,
version = "v2.*",
build = "make install_jsregexp",
opts = {
history = true,
delete_check_events = "TextChanged",
},
dependencies = { "rafamadriz/friendly-snippets" },
config = function()
require("plugins.snippets")
require("luasnip.loaders.from_vscode").lazy_load()
require("luasnip.loaders.from_vscode").lazy_load("./snippets")
end,
keys = {
{
"<C-K>",
function()
require("luasnip").expand()
end,
silent = true,
},
{
"<C-L>",
function()
require("luasnip").jump(1)
end,
silent = true,
},
{
"<C-J>",
function()
require("luasnip").jump(-1)
end,
silent = true,
},
},
},
},
config = function()
require("cmp").setup({
preselect = require("cmp").PreselectMode.None,
experimental = {
ghost_text = false,
opts = {
keymap = {
preset = "enter",
},
completion = {
list = {
selection = {
preselect = false,
auto_insert = false,
},
},
confirmation = {
default_behavior = require("cmp").ConfirmBehavior.Replace,
ghost_text = {
enabled = true,
},
completion = {
completeopt = "menu,menuone,noinsert,noselect",
keyword_length = 2,
},
mapping = require("cmp").mapping.preset.insert({
["<C-b>"] = require("cmp").mapping.scroll_docs(-4),
["<C-f>"] = require("cmp").mapping.scroll_docs(4),
["<C-Space>"] = require("cmp").mapping.complete(),
["<C-e>"] = require("cmp").mapping.abort(),
["<CR>"] = require("cmp").mapping.confirm({ select = false }),
["<C-y>"] = require("cmp").mapping.confirm({ select = true }),
}),
snippet = {
expand = function(args)
require("luasnip").lsp_expand(args.body)
end,
},
formatting = {
format = function(entry, vim_item)
vim_item.menu = source_mapping[entry.source.name] or "[Unknown]"
return vim_item
end,
},
sources = require("cmp").config.sources({
{ name = "nvim_lsp", priority = 1000 },
{ name = "codecompanion", priority = 800 },
{ name = "luasnip", priority = 750 },
{ name = "path", priority = 500 },
}, {
{ name = "buffer" },
}),
})
end,
},
cmdline = {
keymap = { preset = "inherit" },
completion = { menu = { auto_show = true } },
sources = { "cmdline" },
},
snippets = { preset = "luasnip" },
sources = {
default = { "lsp", "path", "snippets", "buffer", "codecompanion" },
},
},
}

View file

@ -1,21 +0,0 @@
local ls = require("luasnip")
local s = ls.snippet
local sn = ls.snippet_node
local t = ls.text_node
local i = ls.insert_node
local f = ls.function_node
local c = ls.choice_node
local d = ls.dynamic_node
local r = ls.restore_node
local fmt = require("luasnip.extras.fmt").fmt
local rep = require("luasnip.extras").rep
ls.config.setup({
history = true,
update_events = "TextChanged,TextChangedI",
})
require("luasnip.loaders.from_vscode").lazy_load()
require("luasnip.loaders.from_vscode").lazy_load({
paths = { vim.fn.stdpath("config") .. "/snippets" },
})
ls.add_snippets("json", require("snippets.json"))

69
nvim/lua/plugins/todo.lua Normal file
View file

@ -0,0 +1,69 @@
return {
"phrmendes/todotxt.nvim",
cmd = { "TodoTxt", "DoneTxt" },
opts = {
todotxt = "/home/neonxp/Документы/todo.txt",
donetxt = "/home/neonxp/Документы/done.txt",
},
-- suggested keybindings
keys = {
{
"<leader>tp",
function() require("todotxt").cycle_priority() end,
desc = "todo.txt: cycle priority",
ft = "todotxt",
},
{
"<cr>",
function() require("todotxt").toggle_todo_state() end,
desc = "todo.txt: toggle task state",
ft = "todotxt",
},
{
"<leader>tn",
function() require("todotxt").capture_todo() end,
desc = "New entry",
},
{
"<leader>tt",
function() require("todotxt").toggle_todotxt() end,
desc = "Open",
},
{
"<leader>tr",
function() require("todotxt").move_done_tasks() end,
desc = "Move to done.txt",
ft = "todotxt",
},
{
"<leader>tss",
function() require("todotxt").sort_tasks() end,
desc = "Sort",
ft = "todotxt",
},
{
"<leader>tsd",
function() require("todotxt").sort_tasks_by_due_date() end,
desc = "Sort by due:date",
ft = "todotxt",
},
{
"<leader>tsP",
function() require("todotxt").sort_tasks_by_priority() end,
desc = "Sort by (priority)",
ft = "todotxt",
},
{
"<leader>tsc",
function() require("todotxt").sort_tasks_by_context() end,
desc = "Sort by @context",
ft = "todotxt",
},
{
"<leader>tsp",
function() require("todotxt").sort_tasks_by_project() end,
desc = "Sort by +project",
ft = "todotxt",
},
},
}

View file

@ -1,44 +0,0 @@
local ls = require("luasnip")
-- some shorthands...
local s = ls.snippet
local sn = ls.snippet_node
local t = ls.text_node
local i = ls.insert_node
local f = ls.function_node
local c = ls.choice_node
local d = ls.dynamic_node
local r = ls.restore_node
local l = require("luasnip.extras").lambda
local rep = require("luasnip.extras").rep
local p = require("luasnip.extras").partial
local m = require("luasnip.extras").match
local n = require("luasnip.extras").nonempty
local dl = require("luasnip.extras").dynamic_lambda
local fmt = require("luasnip.extras.fmt").fmt
local fmta = require("luasnip.extras.fmt").fmta
local types = require("luasnip.util.types")
local conds = require("luasnip.extras.conditions")
local conds_expand = require("luasnip.extras.conditions.expand")
return {
s(
"launch",
fmt(
[[
{{
"name": "Launch {1}",
"type": "go",
"request": "launch",
"program": "${{workspaceFolder}}/cmd/{2}",
"args": [{3}],
"outputMode": "remote"
}}{4}]],
{
i(1),
rep(1),
i(2),
i(0),
}
)
),
}

61
nvim/lua/syntax/hjson.lua Normal file
View file

@ -0,0 +1,61 @@
-- ~/.config/nvim/after/syntax/hjson.lua
-- Или путь плагина: ~/.config/nvim/plugin/hjson.lua
vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, {
pattern = "*.hjson",
callback = function()
vim.b.current_syntax = "hjson"
-- Очистка предыдущих правил
vim.cmd("syntax clear")
-- Комментарии (высший приоритет)
vim.cmd([[ syntax match hjsonLineComment "\/\/.*" ]])
vim.cmd([[ syntax match hjsonLineComment "#.*" ]])
vim.cmd([[ syntax region hjsonComment start="/\*" end="\*/" ]])
-- Строки
vim.cmd([[ syntax region hjsonString matchgroup=hjsonQuote start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=hjsonEscape ]])
vim.cmd([[ syntax region hjsonString matchgroup=hjsonQuote start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=hjsonEscape ]])
vim.cmd([[ syntax region hjsonMLString matchgroup=hjsonQuote start=/'''/ end=/'''/ ]])
-- Числа
vim.cmd([[ syntax match hjsonNumber "-\=\<\%(0\|[1-9]\d*\)\%(\.\d\+\)\=\%([eE][-+]\=\d\+\)\=\>" ]])
-- Булевы значения и null
vim.cmd([[ syntax keyword hjsonBoolean true false ]])
vim.cmd([[ syntax keyword hjsonNull null ]])
-- Ключи объектов
vim.cmd([[ syntax match hjsonKey "[^][{}:,\"'\s]\+" contained ]])
vim.cmd([[ syntax match hjsonKeyUnquoted "[^][{}:,\"'\s]\+:"he=e-1 contains=hjsonKey,hjsonNoise ]])
-- Пунктуация
vim.cmd([[ syntax match hjsonNoise "[{}\[\],:]" ]])
-- Escape-последовательности
vim.cmd([[ syntax match hjsonEscape "\\[\\\"'/bfnrt]" contained ]])
vim.cmd([[ syntax match hjsonEscape "\\u\x\{4}" contained ]])
-- Строки без кавычек (низший приоритет)
vim.cmd([[ syntax match hjsonStringUQ "[^][{}:,\"'\s]\+" contains=@NoSpell ]])
-- Сворачивание структур
vim.cmd([[ syntax region hjsonObject matchgroup=hjsonBraces start="{" end="}" transparent fold ]])
vim.cmd([[ syntax region hjsonArray matchgroup=hjsonBraces start="\[" end="\]" transparent fold ]])
-- Подсветка
vim.cmd([[ highlight default link hjsonComment Comment ]])
vim.cmd([[ highlight default link hjsonLineComment Comment ]])
vim.cmd([[ highlight default link hjsonString String ]])
vim.cmd([[ highlight default link hjsonMLString String ]])
vim.cmd([[ highlight default link hjsonStringUQ String ]])
vim.cmd([[ highlight default link hjsonEscape SpecialChar ]])
vim.cmd([[ highlight default link hjsonNumber Number ]])
vim.cmd([[ highlight default link hjsonBoolean Boolean ]])
vim.cmd([[ highlight default link hjsonNull Constant ]])
vim.cmd([[ highlight default link hjsonKey Label ]])
vim.cmd([[ highlight default link hjsonNoise Delimiter ]])
vim.cmd([[ highlight default link hjsonBraces Delimiter ]])
end
})

1
nvim/lua/syntax/init.lua Normal file
View file

@ -0,0 +1 @@
require("syntax.hjson")