added LSP and treesitter

This commit is contained in:
2026-03-31 23:13:00 +02:00
parent 455169b537
commit f494b1840a
6 changed files with 205 additions and 2 deletions

View File

@@ -80,7 +80,7 @@
"key_code": "vk_none" "key_code": "vk_none"
}, },
{ {
"shell_command": "/Applications/kitty.app/Contents/MacOS/kitty --single-instance --directory ~" "shell_command": "/usr/bin/osascript -e 'tell application \"kitty\" to activate' -e 'tell application \"System Events\" to keystroke return using command down'"
} }
], ],
"type": "basic" "type": "basic"

View File

@@ -7,6 +7,7 @@ opt.laststatus = 2
opt.termguicolors = true opt.termguicolors = true
opt.autoread = true opt.autoread = true
opt.mouse = "a" opt.mouse = "a"
opt.clipboard:append("unnamedplus")
opt.expandtab = true opt.expandtab = true
opt.shiftwidth = 4 opt.shiftwidth = 4
opt.tabstop = 4 opt.tabstop = 4
@@ -15,6 +16,7 @@ opt.smartindent = true
opt.wrap = false opt.wrap = false
opt.wildmode = "longest:full,full" opt.wildmode = "longest:full,full"
opt.title = true opt.title = true
opt.signcolumn = 'yes:1'
vim.cmd.colorscheme("slate") vim.cmd.colorscheme("slate")

View File

@@ -107,6 +107,53 @@ require("packer").startup(function(use)
vim.g.pasta_disabled_filetypes = { "fugitive" } vim.g.pasta_disabled_filetypes = { "fugitive" }
end, end,
}) })
-- Git integration.
use({
"lewis6991/gitsigns.nvim",
config = function()
require("gitsigns").setup({ current_line_blame = true })
vim.keymap.set("n", "]h", ":Gitsigns next_hunk<CR>")
vim.keymap.set("n", "[h", ":Gitsigns prev_hunk<CR>")
vim.keymap.set("n", "gs", ":Gitsigns stage_hunk<CR>")
vim.keymap.set("n", "gS", ":Gitsigns undo_stage_hunk<CR>")
vim.keymap.set("n", "gp", ":Gitsigns preview_hunk<CR>")
vim.keymap.set("n", "gb", ":Gitsigns blame_line<CR>")
end,
})
-- Git commands.
use({
"tpope/vim-fugitive",
requires = "tpope/vim-rhubarb",
config = function()
require("tracer.plugins.fugitive").setup()
end,
})
-- Improved syntax highlighting.
use({
"nvim-treesitter/nvim-treesitter",
run = function()
require("nvim-treesitter.install").update({ with_sync = true })
end,
requires = {
"JoosepAlviste/nvim-ts-context-commentstring",
"nvim-treesitter/nvim-treesitter-textobjects",
},
config = function()
pcall(require, "tracer.plugins.treesitter")
end,
})
-- Language Server Protocol.
use({
"neovim/nvim-lspconfig",
requires = {
"williamboman/mason.nvim",
"williamboman/mason-lspconfig.nvim",
},
config = function()
pcall(require, "tracer.plugins.lspconfig")
end,
})
-- Fuzzy finder -- Fuzzy finder
use({ use({

View File

@@ -0,0 +1,90 @@
local M = {}
local function homepage_for_remote(remote)
local patterns = {
"^gitea@([^:]+):(.+)%.git$",
"^git@([^:]+):(.+)%.git$",
"^ssh://git@([^/]+)/(.+)%.git$",
"^https?://([^/]+)/(.+)%.git$",
"^https?://([^/]+)/(.+)$",
}
for _, pattern in ipairs(patterns) do
local host, repo = remote:match(pattern)
if host and repo then
return ("https://%s/%s"):format(host, repo)
end
end
return nil
end
local function url_escape(value)
return (value:gsub("#", "%%23"):gsub(" ", "%%20"))
end
local function gitea_browse(opts)
local root = homepage_for_remote(opts.remote or "")
if not root then
return nil
end
local path = (opts.path or ""):gsub("^/", "")
local ref = (opts.path or ""):match("^/?%.git/(refs/.*)")
if ref and ref:match("^refs/heads/") then
local branch = ref:gsub("^refs/heads/", "")
return root .. "/commits/branch/" .. url_escape(branch)
end
if ref and ref:match("^refs/tags/") then
local tag = ref:gsub("^refs/tags/", "")
return root .. "/releases/tag/" .. url_escape(tag)
end
if ref and ref:match("^refs/remotes/[^/]+/.+") then
local branch = ref:match("^refs/remotes/[^/]+/(.+)$")
return root .. "/commits/branch/" .. url_escape(branch)
end
if (opts.path or ""):match("^/?%.git") then
return root
end
local commit = url_escape(opts.commit or "HEAD")
local url
if opts.type == "tree" or path:match("/$") then
url = root .. "/src/commit/" .. commit
if path ~= "" then
url = url .. "/" .. url_escape(path):gsub("/$", "")
end
elseif opts.type == "blob" or path:match("[^/]$") then
url = root .. "/src/commit/" .. commit
if path ~= "" then
url = url .. "/" .. url_escape(path)
end
if opts.line2 and opts.line1 and opts.line1 > 0 and opts.line1 == opts.line2 then
url = url .. "#L" .. opts.line1
elseif opts.line1 and opts.line2 and opts.line1 > 0 and opts.line2 > 0 then
url = url .. "#L" .. opts.line1 .. "-L" .. opts.line2
end
else
url = root .. "/commit/" .. commit
end
return url
end
function M.setup()
if vim.g.tracer_fugitive_gitea_handler_loaded then
return
end
vim.g.tracer_fugitive_gitea_handler_loaded = true
vim.g.fugitive_browse_handlers = vim.g.fugitive_browse_handlers or {}
table.insert(vim.g.fugitive_browse_handlers, 1, gitea_browse)
end
return M

View File

@@ -0,0 +1,34 @@
-- Setup Mason to automatically install LSP servers
require("mason").setup()
require("mason-lspconfig").setup({ automatic_installation = true })
-- Keymaps
vim.keymap.set("n", "<Leader>d", vim.diagnostic.open_float)
vim.keymap.set("n", "[d", vim.diagnostic.goto_prev)
vim.keymap.set("n", "]d", vim.diagnostic.goto_next)
vim.keymap.set("n", "gd", vim.lsp.buf.definition)
vim.keymap.set("n", "gi", "<cmd>Telescope lsp_implementations<CR>")
vim.keymap.set("n", "gr", "<cmd>Telescope lsp_references<CR>")
vim.keymap.set("n", "K", vim.lsp.buf.hover)
vim.keymap.set("n", "<Leader>rn", vim.lsp.buf.rename)
-- Emmet for HTML and JSX-style markup editing
vim.lsp.config("emmet_language_server", {
filetypes = {
"css",
"html",
"javascriptreact",
"less",
"sass",
"scss",
"typescriptreact",
},
})
vim.lsp.enable("intelephense")
vim.lsp.enable("ts_ls")
vim.lsp.enable("eslint")
vim.lsp.enable("html")
vim.lsp.enable("cssls")
vim.lsp.enable("emmet_language_server")

View File

@@ -0,0 +1,30 @@
local ok, configs = pcall(require, "nvim-treesitter.configs")
if not ok then
return
end
configs.setup({
ensure_installed = "all",
highlight = {
enable = true,
additional_vim_regex_highlighting = true,
},
context_commentstring = {
enable = true,
},
indent = {
enable = true,
},
textobjects = {
select = {
enable = true,
lookahead = true,
keymaps = {
["if"] = "@function.inner",
["af"] = "@function.outer",
["ia"] = "@parameter.inner",
["aa"] = "@parameter.outer",
},
},
},
})