add nvim
This commit is contained in:
commit
3a9bbfef9e
26 changed files with 2170 additions and 0 deletions
21
nvim/init.lua
Normal file
21
nvim/init.lua
Normal file
|
@ -0,0 +1,21 @@
|
|||
-- Core
|
||||
require("_options")
|
||||
require("_keymaps")
|
||||
require("_plugins")
|
||||
|
||||
-- Editing
|
||||
require("_lsp")
|
||||
require("_cmp")
|
||||
require("_autopairs")
|
||||
|
||||
-- Navigation
|
||||
require("_telescope")
|
||||
require("_nvim_tree")
|
||||
|
||||
-- Aesthetics
|
||||
require("_alpha")
|
||||
require("_lualine")
|
||||
require("_gitsigns")
|
||||
require("_indentline")
|
||||
require("_treesitter")
|
||||
require("_gruvbox")
|
152
nvim/lsp/clangd.lua
Normal file
152
nvim/lsp/clangd.lua
Normal file
|
@ -0,0 +1,152 @@
|
|||
local function lsp_highlight_document(client)
|
||||
if client.server_capabilities.document_highlight then
|
||||
vim.api.nvim_exec(
|
||||
[[
|
||||
augroup lsp_document_highlight
|
||||
autocmd! * <buffer>
|
||||
autocmd CursorHold <buffer> lua vim.lsp.buf.document_highlight()
|
||||
autocmd CursorMoved <buffer> lua vim.lsp.buf.clear_references()
|
||||
augroup END
|
||||
]],
|
||||
false
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
local function lsp_keymaps(bufnr)
|
||||
local opts = { noremap = true, silent = true }
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", '<cmd>lua vim.diagnostic.goto_prev({border="rounded"})<CR>', opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", '<cmd>lua vim.diagnostic.goto_next({border="rounded"})<CR>', opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>lr", "<cmd>lua vim.lsp.buf.rename()<cr>", opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>q", "<cmd>lua vim.diagnostic.setloclist()<CR>", opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(
|
||||
bufnr,
|
||||
"n",
|
||||
"<leader>td",
|
||||
"<cmd>lua require 'telescope.builtin'.diagnostics()<cr>",
|
||||
opts
|
||||
)
|
||||
vim.api.nvim_buf_set_keymap(
|
||||
bufnr,
|
||||
"n",
|
||||
"<leader>tr",
|
||||
"<cmd>lua require 'telescope.builtin'.lsp_references()<CR>",
|
||||
opts
|
||||
)
|
||||
end
|
||||
|
||||
local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp")
|
||||
if not status_ok then
|
||||
print("Failed to require cmp_nvim_lsp")
|
||||
return
|
||||
end
|
||||
|
||||
local client_capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
local capabilities = cmp_nvim_lsp.default_capabilities(client_capabilities)
|
||||
capabilities.offsetEncoding = { "utf-8", "utf-16" }
|
||||
capabilities.textDocument.completion.editsNearCursor = true
|
||||
|
||||
---@brief
|
||||
---
|
||||
--- https://clangd.llvm.org/installation.html
|
||||
---
|
||||
--- - **NOTE:** Clang >= 11 is recommended! See [#23](https://github.com/neovim/nvim-lspconfig/issues/23).
|
||||
--- - If `compile_commands.json` lives in a build directory, you should
|
||||
--- symlink it to the root of your source tree.
|
||||
--- ```
|
||||
--- ln -s /path/to/myproject/build/compile_commands.json /path/to/myproject/
|
||||
--- ```
|
||||
--- - clangd relies on a [JSON compilation database](https://clang.llvm.org/docs/JSONCompilationDatabase.html)
|
||||
--- specified as compile_commands.json, see https://clangd.llvm.org/installation#compile_commandsjson
|
||||
|
||||
-- https://clangd.llvm.org/extensions.html#switch-between-sourceheader
|
||||
local function switch_source_header(bufnr)
|
||||
local method_name = 'textDocument/switchSourceHeader'
|
||||
local client = vim.lsp.get_clients({ bufnr = bufnr, name = 'clangd' })[1]
|
||||
if not client then
|
||||
return vim.notify(('method %s is not supported by any servers active on the current buffer'):format(method_name))
|
||||
end
|
||||
local params = vim.lsp.util.make_text_document_params(bufnr)
|
||||
client.request(method_name, params, function(err, result)
|
||||
if err then
|
||||
error(tostring(err))
|
||||
end
|
||||
if not result then
|
||||
vim.notify('corresponding file cannot be determined')
|
||||
return
|
||||
end
|
||||
vim.cmd.edit(vim.uri_to_fname(result))
|
||||
end, bufnr)
|
||||
end
|
||||
|
||||
local function symbol_info()
|
||||
local bufnr = vim.api.nvim_get_current_buf()
|
||||
local clangd_client = vim.lsp.get_clients({ bufnr = bufnr, name = 'clangd' })[1]
|
||||
if not clangd_client or not clangd_client.supports_method 'textDocument/symbolInfo' then
|
||||
return vim.notify('Clangd client not found', vim.log.levels.ERROR)
|
||||
end
|
||||
local win = vim.api.nvim_get_current_win()
|
||||
local params = vim.lsp.util.make_position_params(win, clangd_client.offset_encoding)
|
||||
clangd_client.request('textDocument/symbolInfo', params, function(err, res)
|
||||
if err or #res == 0 then
|
||||
-- Clangd always returns an error, there is not reason to parse it
|
||||
return
|
||||
end
|
||||
local container = string.format('container: %s', res[1].containerName) ---@type string
|
||||
local name = string.format('name: %s', res[1].name) ---@type string
|
||||
vim.lsp.util.open_floating_preview({ name, container }, '', {
|
||||
height = 2,
|
||||
width = math.max(string.len(name), string.len(container)),
|
||||
focusable = false,
|
||||
focus = false,
|
||||
border = 'single',
|
||||
title = 'Symbol Info',
|
||||
})
|
||||
end, bufnr)
|
||||
end
|
||||
|
||||
return {
|
||||
cmd = { 'clangd' },
|
||||
filetypes = { 'c', 'cpp', 'objc', 'objcpp', 'cuda', 'proto' },
|
||||
root_markers = {
|
||||
'.clangd',
|
||||
'.clang-tidy',
|
||||
'.clang-format',
|
||||
'compile_commands.json',
|
||||
'compile_flags.txt',
|
||||
'configure.ac', -- AutoTools
|
||||
'.git',
|
||||
},
|
||||
capabilities = capabilities,
|
||||
on_attach = function(client, bufnr)
|
||||
lsp_keymaps(bufnr)
|
||||
lsp_highlight_document(client)
|
||||
|
||||
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
|
||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||
group = augroup,
|
||||
buffer = bufnr,
|
||||
callback = function()
|
||||
vim.lsp.buf.format({ async = false })
|
||||
end,
|
||||
})
|
||||
|
||||
vim.api.nvim_buf_create_user_command(0, 'LspClangdSwitchSourceHeader', function()
|
||||
switch_source_header(0)
|
||||
end, { desc = 'Switch between source/header' })
|
||||
|
||||
vim.api.nvim_buf_create_user_command(0, 'LspClangdShowSymbolInfo', function()
|
||||
symbol_info()
|
||||
end, { desc = 'Show symbol info' })
|
||||
end,
|
||||
}
|
112
nvim/lsp/cssls.lua
Normal file
112
nvim/lsp/cssls.lua
Normal file
|
@ -0,0 +1,112 @@
|
|||
local function lsp_highlight_document(client)
|
||||
if client.server_capabilities.document_highlight then
|
||||
vim.api.nvim_create_augroup("lsp_document_highlight", { clear = true })
|
||||
|
||||
vim.api.nvim_create_autocmd("CursorHold", {
|
||||
group = "lsp_document_highlight",
|
||||
buffer = 0,
|
||||
callback = function()
|
||||
vim.lsp.buf.document_highlight()
|
||||
end,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd("CursorMoved", {
|
||||
group = "lsp_document_highlight",
|
||||
buffer = 0,
|
||||
callback = function()
|
||||
vim.lsp.buf.clear_references()
|
||||
end,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
local function lsp_keymaps(bufnr)
|
||||
local opts = { noremap = true, silent = true }
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", '<cmd>lua vim.diagnostic.goto_prev({border="rounded"})<CR>', opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", '<cmd>lua vim.diagnostic.goto_next({border="rounded"})<CR>', opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>lr", "<cmd>lua vim.lsp.buf.rename()<cr>", opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>q", "<cmd>lua vim.diagnostic.setloclist()<CR>", opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(
|
||||
bufnr,
|
||||
"n",
|
||||
"<leader>td",
|
||||
"<cmd>lua require 'telescope.builtin'.diagnostics()<cr>",
|
||||
opts
|
||||
)
|
||||
vim.api.nvim_buf_set_keymap(
|
||||
bufnr,
|
||||
"n",
|
||||
"<leader>tr",
|
||||
"<cmd>lua require 'telescope.builtin'.lsp_references()<CR>",
|
||||
opts
|
||||
)
|
||||
end
|
||||
|
||||
local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp")
|
||||
if not status_ok then
|
||||
print("Failed to require cmp_nvim_lsp")
|
||||
return
|
||||
end
|
||||
|
||||
local client_capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
local capabilities = cmp_nvim_lsp.default_capabilities(client_capabilities)
|
||||
capabilities.offsetEncoding = { "utf-8", "utf-16" }
|
||||
|
||||
---@brief
|
||||
---
|
||||
--- https://github.com/hrsh7th/vscode-langservers-extracted
|
||||
---
|
||||
--- `css-languageserver` can be installed via `npm`:
|
||||
---
|
||||
--- ```sh
|
||||
--- npm i -g vscode-langservers-extracted
|
||||
--- ```
|
||||
---
|
||||
--- Neovim does not currently include built-in snippets. `vscode-css-language-server` only provides completions when snippet support is enabled. To enable completion, install a snippet plugin and add the following override to your language client capabilities during setup.
|
||||
---
|
||||
--- ```lua
|
||||
--- --Enable (broadcasting) snippet capability for completion
|
||||
--- local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
--- capabilities.textDocument.completion.completionItem.snippetSupport = true
|
||||
---
|
||||
--- vim.lsp.config('cssls', {
|
||||
--- capabilities = capabilities,
|
||||
--- })
|
||||
--- ```
|
||||
return {
|
||||
cmd = { 'vscode-css-language-server', '--stdio' },
|
||||
filetypes = { 'css', 'scss', 'less' },
|
||||
init_options = { provideFormatter = true }, -- needed to enable formatting capabilities
|
||||
root_markers = { 'package.json', '.git' },
|
||||
settings = {
|
||||
css = { validate = true },
|
||||
scss = { validate = true },
|
||||
less = { validate = true },
|
||||
},
|
||||
capabilities = capabilities,
|
||||
on_attach = function(client, bufnr)
|
||||
lsp_keymaps(bufnr)
|
||||
lsp_highlight_document(client)
|
||||
|
||||
if client.supports_method("textDocument/formatting") then
|
||||
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
|
||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||
group = augroup,
|
||||
buffer = bufnr,
|
||||
callback = function()
|
||||
vim.lsp.buf.format()
|
||||
end,
|
||||
})
|
||||
end
|
||||
end,
|
||||
}
|
256
nvim/lsp/eslint.lua
Normal file
256
nvim/lsp/eslint.lua
Normal file
|
@ -0,0 +1,256 @@
|
|||
local function lsp_highlight_document(client)
|
||||
if client.server_capabilities.document_highlight then
|
||||
vim.api.nvim_create_augroup("lsp_document_highlight", { clear = true })
|
||||
|
||||
vim.api.nvim_create_autocmd("CursorHold", {
|
||||
group = "lsp_document_highlight",
|
||||
buffer = 0,
|
||||
callback = function()
|
||||
vim.lsp.buf.document_highlight()
|
||||
end,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd("CursorMoved", {
|
||||
group = "lsp_document_highlight",
|
||||
buffer = 0,
|
||||
callback = function()
|
||||
vim.lsp.buf.clear_references()
|
||||
end,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
local function lsp_keymaps(bufnr)
|
||||
local opts = { noremap = true, silent = true }
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", '<cmd>lua vim.diagnostic.goto_prev({border="rounded"})<CR>', opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", '<cmd>lua vim.diagnostic.goto_next({border="rounded"})<CR>', opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>lr", "<cmd>lua vim.lsp.buf.rename()<cr>", opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>q", "<cmd>lua vim.diagnostic.setloclist()<CR>", opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(
|
||||
bufnr,
|
||||
"n",
|
||||
"<leader>td",
|
||||
"<cmd>lua require 'telescope.builtin'.diagnostics()<cr>",
|
||||
opts
|
||||
)
|
||||
vim.api.nvim_buf_set_keymap(
|
||||
bufnr,
|
||||
"n",
|
||||
"<leader>tr",
|
||||
"<cmd>lua require 'telescope.builtin'.lsp_references()<CR>",
|
||||
opts
|
||||
)
|
||||
end
|
||||
|
||||
local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp")
|
||||
if not status_ok then
|
||||
print("Failed to require cmp_nvim_lsp")
|
||||
return
|
||||
end
|
||||
|
||||
local client_capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
local capabilities = cmp_nvim_lsp.default_capabilities(client_capabilities)
|
||||
capabilities.offsetEncoding = { "utf-8", "utf-16" }
|
||||
|
||||
--- @brief
|
||||
---
|
||||
--- https://github.com/hrsh7th/vscode-langservers-extracted
|
||||
---
|
||||
--- `vscode-eslint-language-server` is a linting engine for JavaScript / Typescript.
|
||||
--- It can be installed via `npm`:
|
||||
---
|
||||
--- ```sh
|
||||
--- npm i -g vscode-langservers-extracted
|
||||
--- ```
|
||||
---
|
||||
--- `vscode-eslint-language-server` provides an `EslintFixAll` command that can be used to format a document on save:
|
||||
--- ```lua
|
||||
--- vim.lsp.config('eslint', {
|
||||
--- --- ...
|
||||
--- on_attach = function(client, bufnr)
|
||||
--- vim.api.nvim_create_autocmd("BufWritePre", {
|
||||
--- buffer = bufnr,
|
||||
--- command = "EslintFixAll",
|
||||
--- })
|
||||
--- end,
|
||||
--- })
|
||||
--- ```
|
||||
---
|
||||
--- See [vscode-eslint](https://github.com/microsoft/vscode-eslint/blob/55871979d7af184bf09af491b6ea35ebd56822cf/server/src/eslintServer.ts#L216-L229) for configuration options.
|
||||
---
|
||||
--- Messages handled in lspconfig: `eslint/openDoc`, `eslint/confirmESLintExecution`, `eslint/probeFailed`, `eslint/noLibrary`
|
||||
---
|
||||
--- Additional messages you can handle: `eslint/noConfig`
|
||||
|
||||
local lsp = vim.lsp
|
||||
|
||||
return {
|
||||
cmd = { 'vscode-eslint-language-server', '--stdio' },
|
||||
filetypes = {
|
||||
'javascript',
|
||||
'javascriptreact',
|
||||
'javascript.jsx',
|
||||
'typescript',
|
||||
'typescriptreact',
|
||||
'typescript.tsx',
|
||||
'vue',
|
||||
'svelte',
|
||||
'astro',
|
||||
},
|
||||
on_attach = function(client, bufnr)
|
||||
lsp_keymaps(bufnr)
|
||||
lsp_highlight_document(client)
|
||||
|
||||
vim.api.nvim_buf_create_user_command(0, 'LspEslintFixAll', function()
|
||||
local bufnr = vim.api.nvim_get_current_buf()
|
||||
|
||||
client:exec_cmd({
|
||||
title = 'Fix all Eslint errors for current buffer',
|
||||
command = 'eslint.applyAllFixes',
|
||||
arguments = {
|
||||
{
|
||||
uri = vim.uri_from_bufnr(bufnr),
|
||||
version = lsp.util.buf_versions[bufnr],
|
||||
},
|
||||
},
|
||||
}, { bufnr = bufnr })
|
||||
end, {})
|
||||
|
||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||
buffer = bufnr,
|
||||
command = "LspEslintFixAll",
|
||||
})
|
||||
end,
|
||||
-- https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-file-formats
|
||||
root_dir = function(bufnr, on_dir)
|
||||
local root_file_patterns = {
|
||||
'.eslintrc',
|
||||
'.eslintrc.js',
|
||||
'.eslintrc.cjs',
|
||||
'.eslintrc.yaml',
|
||||
'.eslintrc.yml',
|
||||
'.eslintrc.json',
|
||||
'eslint.config.js',
|
||||
'eslint.config.mjs',
|
||||
'eslint.config.cjs',
|
||||
'eslint.config.ts',
|
||||
'eslint.config.mts',
|
||||
'eslint.config.cts',
|
||||
'.git',
|
||||
'package.json',
|
||||
'package-lock.json',
|
||||
'.prettierrc',
|
||||
}
|
||||
|
||||
local fname = vim.api.nvim_buf_get_name(bufnr)
|
||||
local root_dir = vim.fs.dirname(vim.fs.find(root_file_patterns, { path = fname, upward = true })[1])
|
||||
on_dir(root_dir)
|
||||
end,
|
||||
-- Refer to https://github.com/Microsoft/vscode-eslint#settings-options for documentation.
|
||||
settings = {
|
||||
validate = 'on',
|
||||
packageManager = nil,
|
||||
useESLintClass = false,
|
||||
experimental = {
|
||||
useFlatConfig = false,
|
||||
},
|
||||
codeActionOnSave = {
|
||||
enable = false,
|
||||
mode = 'all',
|
||||
},
|
||||
format = true,
|
||||
quiet = false,
|
||||
onIgnoredFiles = 'off',
|
||||
rulesCustomizations = {},
|
||||
run = 'onType',
|
||||
problems = {
|
||||
shortenToSingleLine = false,
|
||||
},
|
||||
-- nodePath configures the directory in which the eslint server should start its node_modules resolution.
|
||||
-- This path is relative to the workspace folder (root dir) of the server instance.
|
||||
nodePath = '',
|
||||
-- use the workspace folder location or the file location (if no workspace folder is open) as the working directory
|
||||
workingDirectory = { mode = 'location' },
|
||||
codeAction = {
|
||||
disableRuleComment = {
|
||||
enable = true,
|
||||
location = 'separateLine',
|
||||
},
|
||||
showDocumentation = {
|
||||
enable = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
before_init = function(_, config)
|
||||
-- The "workspaceFolder" is a VSCode concept. It limits how far the
|
||||
-- server will traverse the file system when locating the ESLint config
|
||||
-- file (e.g., .eslintrc).
|
||||
local root_dir = config.root_dir
|
||||
|
||||
if root_dir then
|
||||
config.settings = config.settings or {}
|
||||
config.settings.workspaceFolder = {
|
||||
uri = root_dir,
|
||||
name = vim.fn.fnamemodify(root_dir, ':t'),
|
||||
}
|
||||
|
||||
-- Support flat config
|
||||
local flat_config_files = {
|
||||
'eslint.config.js',
|
||||
'eslint.config.mjs',
|
||||
'eslint.config.cjs',
|
||||
'eslint.config.ts',
|
||||
'eslint.config.mts',
|
||||
'eslint.config.cts',
|
||||
}
|
||||
|
||||
for _, file in ipairs(flat_config_files) do
|
||||
if vim.fn.filereadable(root_dir .. '/' .. file) == 1 then
|
||||
config.settings.experimental = config.settings.experimental or {}
|
||||
config.settings.experimental.useFlatConfig = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
-- Support Yarn2 (PnP) projects
|
||||
local pnp_cjs = root_dir .. '/.pnp.cjs'
|
||||
local pnp_js = root_dir .. '/.pnp.js'
|
||||
if vim.uv.fs_stat(pnp_cjs) or vim.uv.fs_stat(pnp_js) then
|
||||
local cmd = config.cmd
|
||||
config.cmd = vim.list_extend({ 'yarn', 'exec' }, cmd)
|
||||
end
|
||||
end
|
||||
end,
|
||||
handlers = {
|
||||
['eslint/openDoc'] = function(_, result)
|
||||
if result then
|
||||
vim.ui.open(result.url)
|
||||
end
|
||||
return {}
|
||||
end,
|
||||
['eslint/confirmESLintExecution'] = function(_, result)
|
||||
if not result then
|
||||
return
|
||||
end
|
||||
return 4 -- approved
|
||||
end,
|
||||
['eslint/probeFailed'] = function()
|
||||
vim.notify('[lspconfig] ESLint probe failed.', vim.log.levels.WARN)
|
||||
return {}
|
||||
end,
|
||||
['eslint/noLibrary'] = function()
|
||||
vim.notify('[lspconfig] Unable to find ESLint library.', vim.log.levels.WARN)
|
||||
return {}
|
||||
end,
|
||||
},
|
||||
}
|
176
nvim/lsp/lua_ls.lua
Normal file
176
nvim/lsp/lua_ls.lua
Normal file
|
@ -0,0 +1,176 @@
|
|||
local function lsp_highlight_document(client)
|
||||
if client.server_capabilities.document_highlight then
|
||||
vim.api.nvim_create_augroup("lsp_document_highlight", { clear = true })
|
||||
|
||||
vim.api.nvim_create_autocmd("CursorHold", {
|
||||
group = "lsp_document_highlight",
|
||||
buffer = 0,
|
||||
callback = function()
|
||||
vim.lsp.buf.document_highlight()
|
||||
end,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd("CursorMoved", {
|
||||
group = "lsp_document_highlight",
|
||||
buffer = 0,
|
||||
callback = function()
|
||||
vim.lsp.buf.clear_references()
|
||||
end,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
local function lsp_keymaps(bufnr)
|
||||
local opts = { noremap = true, silent = true }
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", '<cmd>lua vim.diagnostic.goto_prev({border="rounded"})<CR>', opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", '<cmd>lua vim.diagnostic.goto_next({border="rounded"})<CR>', opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>lr", "<cmd>lua vim.lsp.buf.rename()<cr>", opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>q", "<cmd>lua vim.diagnostic.setloclist()<CR>", opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(
|
||||
bufnr,
|
||||
"n",
|
||||
"<leader>td",
|
||||
"<cmd>lua require 'telescope.builtin'.diagnostics()<cr>",
|
||||
opts
|
||||
)
|
||||
vim.api.nvim_buf_set_keymap(
|
||||
bufnr,
|
||||
"n",
|
||||
"<leader>tr",
|
||||
"<cmd>lua require 'telescope.builtin'.lsp_references()<CR>",
|
||||
opts
|
||||
)
|
||||
end
|
||||
|
||||
local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp")
|
||||
if not status_ok then
|
||||
print("Failed to require cmp_nvim_lsp")
|
||||
return
|
||||
end
|
||||
|
||||
local client_capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
local capabilities = cmp_nvim_lsp.default_capabilities(client_capabilities)
|
||||
capabilities.offsetEncoding = { "utf-8", "utf-16" }
|
||||
capabilities.textDocument.completion.editsNearCursor = true
|
||||
|
||||
---@brief
|
||||
---
|
||||
--- https://github.com/luals/lua-language-server
|
||||
---
|
||||
--- Lua language server.
|
||||
---
|
||||
--- `lua-language-server` can be installed by following the instructions [here](https://luals.github.io/#neovim-install).
|
||||
---
|
||||
--- The default `cmd` assumes that the `lua-language-server` binary can be found in `$PATH`.
|
||||
---
|
||||
--- If you primarily use `lua-language-server` for Neovim, and want to provide completions,
|
||||
--- analysis, and location handling for plugins on runtime path, you can use the following
|
||||
--- settings.
|
||||
---
|
||||
--- ```lua
|
||||
--- vim.lsp.config('lua_ls', {
|
||||
--- on_init = function(client)
|
||||
--- if client.workspace_folders then
|
||||
--- local path = client.workspace_folders[1].name
|
||||
--- if path ~= vim.fn.stdpath('config') and (vim.uv.fs_stat(path..'/.luarc.json') or vim.uv.fs_stat(path..'/.luarc.jsonc')) then
|
||||
--- return
|
||||
--- end
|
||||
--- end
|
||||
---
|
||||
--- client.config.settings.Lua = vim.tbl_deep_extend('force', client.config.settings.Lua, {
|
||||
--- runtime = {
|
||||
--- -- Tell the language server which version of Lua you're using
|
||||
--- -- (most likely LuaJIT in the case of Neovim)
|
||||
--- version = 'LuaJIT'
|
||||
--- },
|
||||
--- -- Make the server aware of Neovim runtime files
|
||||
--- workspace = {
|
||||
--- checkThirdParty = false,
|
||||
--- library = {
|
||||
--- vim.env.VIMRUNTIME
|
||||
--- -- Depending on the usage, you might want to add additional paths here.
|
||||
--- -- "${3rd}/luv/library"
|
||||
--- -- "${3rd}/busted/library",
|
||||
--- }
|
||||
--- -- or pull in all of 'runtimepath'. NOTE: this is a lot slower and will cause issues when working on your own configuration (see https://github.com/neovim/nvim-lspconfig/issues/3189)
|
||||
--- -- library = vim.api.nvim_get_runtime_file("", true)
|
||||
--- }
|
||||
--- })
|
||||
--- end,
|
||||
--- settings = {
|
||||
--- Lua = {}
|
||||
--- }
|
||||
--- })
|
||||
--- ```
|
||||
---
|
||||
--- See `lua-language-server`'s [documentation](https://luals.github.io/wiki/settings/) for an explanation of the above fields:
|
||||
--- * [Lua.runtime.path](https://luals.github.io/wiki/settings/#runtimepath)
|
||||
--- * [Lua.workspace.library](https://luals.github.io/wiki/settings/#workspacelibrary)
|
||||
---
|
||||
return {
|
||||
cmd = { 'lua-language-server' },
|
||||
filetypes = { 'lua' },
|
||||
root_markers = {
|
||||
'.luarc.json',
|
||||
'.luarc.jsonc',
|
||||
'.luacheckrc',
|
||||
'.stylua.toml',
|
||||
'stylua.toml',
|
||||
'selene.toml',
|
||||
'selene.yml',
|
||||
'.git',
|
||||
},
|
||||
|
||||
settings = {
|
||||
Lua = {
|
||||
runtime = {
|
||||
-- Tell the language server which version of Lua you're using
|
||||
-- (most likely LuaJIT in the case of Neovim)
|
||||
version = 'LuaJIT'
|
||||
},
|
||||
|
||||
diagnostics = {
|
||||
-- Get the language server to recognize the `vim` global
|
||||
globals = { "vim" },
|
||||
},
|
||||
|
||||
-- Make the server aware of Neovim runtime files
|
||||
workspace = {
|
||||
checkThirdParty = false,
|
||||
library = vim.api.nvim_get_runtime_file("", true)
|
||||
},
|
||||
|
||||
-- Do not send telemetry data containing a randomized but unique identifier
|
||||
telemetry = {
|
||||
enable = false,
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
capabilities = capabilities,
|
||||
on_attach = function(client, bufnr)
|
||||
lsp_keymaps(bufnr)
|
||||
lsp_highlight_document(client)
|
||||
|
||||
if client.supports_method("textDocument/formatting") then
|
||||
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
|
||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||
group = augroup,
|
||||
buffer = bufnr,
|
||||
callback = function()
|
||||
vim.lsp.buf.format()
|
||||
end,
|
||||
})
|
||||
end
|
||||
end,
|
||||
}
|
90
nvim/lsp/mdx_analyzer.lua
Normal file
90
nvim/lsp/mdx_analyzer.lua
Normal file
|
@ -0,0 +1,90 @@
|
|||
local function lsp_highlight_document(client)
|
||||
if client.server_capabilities.document_highlight then
|
||||
vim.api.nvim_create_augroup("lsp_document_highlight", { clear = true })
|
||||
|
||||
vim.api.nvim_create_autocmd("CursorHold", {
|
||||
group = "lsp_document_highlight",
|
||||
buffer = 0,
|
||||
callback = function()
|
||||
vim.lsp.buf.document_highlight()
|
||||
end,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd("CursorMoved", {
|
||||
group = "lsp_document_highlight",
|
||||
buffer = 0,
|
||||
callback = function()
|
||||
vim.lsp.buf.clear_references()
|
||||
end,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
local function lsp_keymaps(bufnr)
|
||||
local opts = { noremap = true, silent = true }
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", '<cmd>lua vim.diagnostic.goto_prev({border="rounded"})<CR>', opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", '<cmd>lua vim.diagnostic.goto_next({border="rounded"})<CR>', opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>lr", "<cmd>lua vim.lsp.buf.rename()<cr>", opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>q", "<cmd>lua vim.diagnostic.setloclist()<CR>", opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(
|
||||
bufnr,
|
||||
"n",
|
||||
"<leader>td",
|
||||
"<cmd>lua require 'telescope.builtin'.diagnostics()<cr>",
|
||||
opts
|
||||
)
|
||||
vim.api.nvim_buf_set_keymap(
|
||||
bufnr,
|
||||
"n",
|
||||
"<leader>tr",
|
||||
"<cmd>lua require 'telescope.builtin'.lsp_references()<CR>",
|
||||
opts
|
||||
)
|
||||
end
|
||||
|
||||
local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp")
|
||||
if not status_ok then
|
||||
print("Failed to require cmp_nvim_lsp")
|
||||
return
|
||||
end
|
||||
|
||||
local client_capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
local capabilities = cmp_nvim_lsp.default_capabilities(client_capabilities)
|
||||
capabilities.offsetEncoding = { "utf-8", "utf-16" }
|
||||
|
||||
local util = require 'lspconfig.util'
|
||||
return {
|
||||
default_config = {
|
||||
cmd = { 'mdx-language-server', '--stdio' },
|
||||
filetypes = { 'mdx', 'markdown', 'svx' },
|
||||
root_dir = util.root_pattern 'package.json',
|
||||
single_file_support = true,
|
||||
settings = {},
|
||||
init_options = {
|
||||
typescript = {},
|
||||
},
|
||||
on_new_config = function(new_config, new_root_dir)
|
||||
if vim.tbl_get(new_config.init_options, 'typescript') and not new_config.init_options.typescript.tsdk then
|
||||
new_config.init_options.typescript.tsdk = util.get_typescript_server_path(new_root_dir)
|
||||
end
|
||||
end,
|
||||
},
|
||||
commands = {},
|
||||
docs = {
|
||||
description = [[
|
||||
https://github.com/mdx-js/mdx-analyzer
|
||||
|
||||
`mdx-analyzer`, a language server for MDX
|
||||
]],
|
||||
},
|
||||
}
|
93
nvim/lsp/svelte.lua
Normal file
93
nvim/lsp/svelte.lua
Normal file
|
@ -0,0 +1,93 @@
|
|||
local function lsp_highlight_document(client)
|
||||
if client.server_capabilities.document_highlight then
|
||||
vim.api.nvim_create_augroup("lsp_document_highlight", { clear = true })
|
||||
|
||||
vim.api.nvim_create_autocmd("CursorHold", {
|
||||
group = "lsp_document_highlight",
|
||||
buffer = 0,
|
||||
callback = function()
|
||||
vim.lsp.buf.document_highlight()
|
||||
end,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd("CursorMoved", {
|
||||
group = "lsp_document_highlight",
|
||||
buffer = 0,
|
||||
callback = function()
|
||||
vim.lsp.buf.clear_references()
|
||||
end,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
local function lsp_keymaps(bufnr)
|
||||
local opts = { noremap = true, silent = true }
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", '<cmd>lua vim.diagnostic.goto_prev({border="rounded"})<CR>', opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", '<cmd>lua vim.diagnostic.goto_next({border="rounded"})<CR>', opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>lr", "<cmd>lua vim.lsp.buf.rename()<cr>", opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>q", "<cmd>lua vim.diagnostic.setloclist()<CR>", opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(
|
||||
bufnr,
|
||||
"n",
|
||||
"<leader>td",
|
||||
"<cmd>lua require 'telescope.builtin'.diagnostics()<cr>",
|
||||
opts
|
||||
)
|
||||
vim.api.nvim_buf_set_keymap(
|
||||
bufnr,
|
||||
"n",
|
||||
"<leader>tr",
|
||||
"<cmd>lua require 'telescope.builtin'.lsp_references()<CR>",
|
||||
opts
|
||||
)
|
||||
end
|
||||
|
||||
local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp")
|
||||
if not status_ok then
|
||||
print("Failed to require cmp_nvim_lsp")
|
||||
return
|
||||
end
|
||||
|
||||
local client_capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
local capabilities = cmp_nvim_lsp.default_capabilities(client_capabilities)
|
||||
capabilities.offsetEncoding = { "utf-8", "utf-16" }
|
||||
|
||||
|
||||
---@brief
|
||||
---
|
||||
--- https://github.com/sveltejs/language-tools/tree/master/packages/language-server
|
||||
---
|
||||
--- Note: assuming that [ts_ls](#ts_ls) is setup, full JavaScript/TypeScript support (find references, rename, etc of symbols in Svelte files when working in JS/TS files) requires per-project installation and configuration of [typescript-svelte-plugin](https://github.com/sveltejs/language-tools/tree/master/packages/typescript-plugin#usage).
|
||||
---
|
||||
--- `svelte-language-server` can be installed via `npm`:
|
||||
--- ```sh
|
||||
--- npm install -g svelte-language-server
|
||||
--- ```
|
||||
|
||||
return {
|
||||
cmd = { 'svelteserver', '--stdio' },
|
||||
filetypes = { 'svelte' },
|
||||
root_markers = { 'package.json', '.git' },
|
||||
capabilities = capabilities,
|
||||
on_attach = function(client, bufnr)
|
||||
lsp_keymaps(bufnr)
|
||||
lsp_highlight_document(client)
|
||||
|
||||
vim.api.nvim_buf_create_user_command(bufnr, 'LspMigrateToSvelte5', function()
|
||||
client:exec_cmd({
|
||||
command = 'migrate_to_svelte_5',
|
||||
arguments = { vim.uri_from_bufnr(bufnr) },
|
||||
})
|
||||
end, { desc = 'Migrate Component to Svelte 5 Syntax' })
|
||||
end,
|
||||
}
|
192
nvim/lsp/tailwindcss.lua
Normal file
192
nvim/lsp/tailwindcss.lua
Normal file
|
@ -0,0 +1,192 @@
|
|||
local function lsp_highlight_document(client)
|
||||
if client.server_capabilities.document_highlight then
|
||||
vim.api.nvim_create_augroup("lsp_document_highlight", { clear = true })
|
||||
|
||||
vim.api.nvim_create_autocmd("CursorHold", {
|
||||
group = "lsp_document_highlight",
|
||||
buffer = 0,
|
||||
callback = function()
|
||||
vim.lsp.buf.document_highlight()
|
||||
end,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd("CursorMoved", {
|
||||
group = "lsp_document_highlight",
|
||||
buffer = 0,
|
||||
callback = function()
|
||||
vim.lsp.buf.clear_references()
|
||||
end,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
local function lsp_keymaps(bufnr)
|
||||
local opts = { noremap = true, silent = true }
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", '<cmd>lua vim.diagnostic.goto_prev({border="rounded"})<CR>', opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", '<cmd>lua vim.diagnostic.goto_next({border="rounded"})<CR>', opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>lr", "<cmd>lua vim.lsp.buf.rename()<cr>", opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>q", "<cmd>lua vim.diagnostic.setloclist()<CR>", opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(
|
||||
bufnr,
|
||||
"n",
|
||||
"<leader>td",
|
||||
"<cmd>lua require 'telescope.builtin'.diagnostics()<cr>",
|
||||
opts
|
||||
)
|
||||
vim.api.nvim_buf_set_keymap(
|
||||
bufnr,
|
||||
"n",
|
||||
"<leader>tr",
|
||||
"<cmd>lua require 'telescope.builtin'.lsp_references()<CR>",
|
||||
opts
|
||||
)
|
||||
end
|
||||
|
||||
local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp")
|
||||
if not status_ok then
|
||||
print("Failed to require cmp_nvim_lsp")
|
||||
return
|
||||
end
|
||||
|
||||
local client_capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
local capabilities = cmp_nvim_lsp.default_capabilities(client_capabilities)
|
||||
capabilities.offsetEncoding = { "utf-8", "utf-16" }
|
||||
|
||||
---@brief
|
||||
--- https://github.com/tailwindlabs/tailwindcss-intellisense
|
||||
---
|
||||
--- Tailwind CSS Language Server can be installed via npm:
|
||||
---
|
||||
--- npm install -g @tailwindcss/language-server
|
||||
|
||||
return {
|
||||
cmd = { 'tailwindcss-language-server', '--stdio' },
|
||||
-- filetypes copied and adjusted from tailwindcss-intellisense
|
||||
filetypes = {
|
||||
-- html
|
||||
'aspnetcorerazor',
|
||||
'astro',
|
||||
'astro-markdown',
|
||||
'blade',
|
||||
'clojure',
|
||||
'django-html',
|
||||
'htmldjango',
|
||||
'edge',
|
||||
'eelixir', -- vim ft
|
||||
'elixir',
|
||||
'ejs',
|
||||
'erb',
|
||||
'eruby', -- vim ft
|
||||
'gohtml',
|
||||
'gohtmltmpl',
|
||||
'haml',
|
||||
'handlebars',
|
||||
'hbs',
|
||||
'html',
|
||||
'htmlangular',
|
||||
'html-eex',
|
||||
'heex',
|
||||
'jade',
|
||||
'leaf',
|
||||
'liquid',
|
||||
'markdown',
|
||||
'mdx',
|
||||
'mustache',
|
||||
'njk',
|
||||
'nunjucks',
|
||||
'php',
|
||||
'razor',
|
||||
'slim',
|
||||
'twig',
|
||||
-- css
|
||||
'css',
|
||||
'less',
|
||||
'postcss',
|
||||
'sass',
|
||||
'scss',
|
||||
'stylus',
|
||||
'sugarss',
|
||||
-- js
|
||||
'javascript',
|
||||
'javascriptreact',
|
||||
'reason',
|
||||
'rescript',
|
||||
'typescript',
|
||||
'typescriptreact',
|
||||
-- mixed
|
||||
'vue',
|
||||
'svelte',
|
||||
'templ',
|
||||
},
|
||||
settings = {
|
||||
tailwindCSS = {
|
||||
validate = true,
|
||||
lint = {
|
||||
cssConflict = 'warning',
|
||||
invalidApply = 'error',
|
||||
invalidScreen = 'error',
|
||||
invalidVariant = 'error',
|
||||
invalidConfigPath = 'error',
|
||||
invalidTailwindDirective = 'error',
|
||||
recommendedVariantOrder = 'warning',
|
||||
},
|
||||
classAttributes = {
|
||||
'class',
|
||||
'className',
|
||||
'class:list',
|
||||
'classList',
|
||||
'ngClass',
|
||||
},
|
||||
includeLanguages = {
|
||||
eelixir = 'html-eex',
|
||||
eruby = 'erb',
|
||||
templ = 'html',
|
||||
htmlangular = 'html',
|
||||
},
|
||||
},
|
||||
},
|
||||
before_init = function(_, config)
|
||||
if not config.settings then
|
||||
config.settings = {}
|
||||
end
|
||||
if not config.settings.editor then
|
||||
config.settings.editor = {}
|
||||
end
|
||||
if not config.settings.editor.tabSize then
|
||||
config.settings.editor.tabSize = vim.lsp.util.get_effective_tabstop()
|
||||
end
|
||||
end,
|
||||
workspace_required = true,
|
||||
root_dir = function(bufnr, on_dir)
|
||||
local root_files = {
|
||||
'tailwind.config.js',
|
||||
'tailwind.config.cjs',
|
||||
'tailwind.config.mjs',
|
||||
'tailwind.config.ts',
|
||||
'postcss.config.js',
|
||||
'postcss.config.cjs',
|
||||
'postcss.config.mjs',
|
||||
'postcss.config.ts',
|
||||
'package.json',
|
||||
}
|
||||
local fname = vim.api.nvim_buf_get_name(bufnr)
|
||||
on_dir(vim.fs.dirname(vim.fs.find(root_files, { path = fname, upward = true })[1]))
|
||||
end,
|
||||
|
||||
capabilities = capabilities,
|
||||
|
||||
on_attach = function(client, bufnr)
|
||||
lsp_keymaps(bufnr)
|
||||
lsp_highlight_document(client)
|
||||
end,
|
||||
}
|
149
nvim/lsp/ts_ls.lua
Normal file
149
nvim/lsp/ts_ls.lua
Normal file
|
@ -0,0 +1,149 @@
|
|||
local function lsp_highlight_document(client)
|
||||
if client.server_capabilities.document_highlight then
|
||||
vim.api.nvim_create_augroup("lsp_document_highlight", { clear = true })
|
||||
|
||||
vim.api.nvim_create_autocmd("CursorHold", {
|
||||
group = "lsp_document_highlight",
|
||||
buffer = 0,
|
||||
callback = function()
|
||||
vim.lsp.buf.document_highlight()
|
||||
end,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd("CursorMoved", {
|
||||
group = "lsp_document_highlight",
|
||||
buffer = 0,
|
||||
callback = function()
|
||||
vim.lsp.buf.clear_references()
|
||||
end,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
local function lsp_keymaps(bufnr)
|
||||
local opts = { noremap = true, silent = true }
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<cmd>lua vim.lsp.buf.definition()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<cmd>lua vim.lsp.buf.declaration()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "<cmd>lua vim.lsp.buf.hover()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", '<cmd>lua vim.diagnostic.goto_prev({border="rounded"})<CR>', opts)
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", '<cmd>lua vim.diagnostic.goto_next({border="rounded"})<CR>', opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>lr", "<cmd>lua vim.lsp.buf.rename()<cr>", opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>q", "<cmd>lua vim.diagnostic.setloclist()<CR>", opts)
|
||||
|
||||
vim.api.nvim_buf_set_keymap(
|
||||
bufnr,
|
||||
"n",
|
||||
"<leader>td",
|
||||
"<cmd>lua require 'telescope.builtin'.diagnostics()<cr>",
|
||||
opts
|
||||
)
|
||||
vim.api.nvim_buf_set_keymap(
|
||||
bufnr,
|
||||
"n",
|
||||
"<leader>tr",
|
||||
"<cmd>lua require 'telescope.builtin'.lsp_references()<CR>",
|
||||
opts
|
||||
)
|
||||
end
|
||||
|
||||
local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp")
|
||||
if not status_ok then
|
||||
print("Failed to require cmp_nvim_lsp")
|
||||
return
|
||||
end
|
||||
|
||||
local client_capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
local capabilities = cmp_nvim_lsp.default_capabilities(client_capabilities)
|
||||
capabilities.offsetEncoding = { "utf-8", "utf-16" }
|
||||
---@brief
|
||||
---
|
||||
--- https://github.com/typescript-language-server/typescript-language-server
|
||||
---
|
||||
--- `ts_ls`, aka `typescript-language-server`, is a Language Server Protocol implementation for TypeScript wrapping `tsserver`. Note that `ts_ls` is not `tsserver`.
|
||||
---
|
||||
--- `typescript-language-server` depends on `typescript`. Both packages can be installed via `npm`:
|
||||
--- ```sh
|
||||
--- npm install -g typescript typescript-language-server
|
||||
--- ```
|
||||
---
|
||||
--- To configure typescript language server, add a
|
||||
--- [`tsconfig.json`](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html) or
|
||||
--- [`jsconfig.json`](https://code.visualstudio.com/docs/languages/jsconfig) to the root of your
|
||||
--- project.
|
||||
---
|
||||
--- Here's an example that disables type checking in JavaScript files.
|
||||
---
|
||||
--- ```json
|
||||
--- {
|
||||
--- "compilerOptions": {
|
||||
--- "module": "commonjs",
|
||||
--- "target": "es6",
|
||||
--- "checkJs": false
|
||||
--- },
|
||||
--- "exclude": [
|
||||
--- "node_modules"
|
||||
--- ]
|
||||
--- }
|
||||
--- ```
|
||||
---
|
||||
--- ### Vue support
|
||||
---
|
||||
--- As of 2.0.0, Volar no longer supports TypeScript itself. Instead, a plugin
|
||||
--- adds Vue support to this language server.
|
||||
---
|
||||
--- *IMPORTANT*: It is crucial to ensure that `@vue/typescript-plugin` and `volar `are of identical versions.
|
||||
---
|
||||
--- ```lua
|
||||
--- vim.lsp.config('ts_ls', {
|
||||
--- init_options = {
|
||||
--- plugins = {
|
||||
--- {
|
||||
--- name = "@vue/typescript-plugin",
|
||||
--- location = "/usr/local/lib/node_modules/@vue/typescript-plugin",
|
||||
--- languages = {"javascript", "typescript", "vue"},
|
||||
--- },
|
||||
--- },
|
||||
--- },
|
||||
--- filetypes = {
|
||||
--- "javascript",
|
||||
--- "typescript",
|
||||
--- "vue",
|
||||
--- },
|
||||
--- })
|
||||
---
|
||||
--- -- You must make sure volar is setup
|
||||
--- -- e.g. require'lspconfig'.volar.setup{}
|
||||
--- -- See volar's section for more information
|
||||
--- ```
|
||||
---
|
||||
--- `location` MUST be defined. If the plugin is installed in `node_modules`,
|
||||
--- `location` can have any value.
|
||||
---
|
||||
--- `languages` must include `vue` even if it is listed in `filetypes`.
|
||||
---
|
||||
--- `filetypes` is extended here to include Vue SFC.
|
||||
|
||||
return {
|
||||
init_options = { hostInfo = 'neovim' },
|
||||
cmd = { 'typescript-language-server', '--stdio' },
|
||||
filetypes = {
|
||||
'javascript',
|
||||
'javascriptreact',
|
||||
'javascript.jsx',
|
||||
'typescript',
|
||||
'typescriptreact',
|
||||
'typescript.tsx',
|
||||
},
|
||||
root_markers = { 'tsconfig.json', 'jsconfig.json', 'package.json', '.git' },
|
||||
capabilities = capabilities,
|
||||
on_attach = function(client, bufnr)
|
||||
lsp_keymaps(bufnr)
|
||||
lsp_highlight_document(client)
|
||||
end,
|
||||
}
|
12
nvim/lua/_alpha.lua
Normal file
12
nvim/lua/_alpha.lua
Normal file
|
@ -0,0 +1,12 @@
|
|||
local status_ok, alpha = pcall(require, "alpha")
|
||||
if not status_ok then
|
||||
return
|
||||
end
|
||||
|
||||
local dashboard = require("alpha.themes.dashboard")
|
||||
dashboard.section.header.val = {}
|
||||
dashboard.section.buttons.val = {}
|
||||
dashboard.section.footer.val = "An idiot admires complexity, a genius admires simplicity. -- Terry A. Davis"
|
||||
dashboard.opts.opts.noautocmd = true
|
||||
|
||||
alpha.setup(dashboard.opts)
|
36
nvim/lua/_autopairs.lua
Normal file
36
nvim/lua/_autopairs.lua
Normal file
|
@ -0,0 +1,36 @@
|
|||
local status_ok, npairs = pcall(require, "nvim-autopairs")
|
||||
if not status_ok then
|
||||
return
|
||||
end
|
||||
|
||||
npairs.setup {
|
||||
check_ts = true,
|
||||
ts_config = {
|
||||
lua = { "string", "source" },
|
||||
javascript = { "string","template_string"},
|
||||
java = false,
|
||||
},
|
||||
|
||||
disable_filetype = { "TelescopePrompt", "spectre_panel" },
|
||||
fast_wrap = {
|
||||
map = "<M-e>",
|
||||
chars = { "{", "[", "(", '"', "'" },
|
||||
pattern = string.gsub([[ [%'%"%)%>%]%)%}%,] ]], "%s+", ""),
|
||||
offset = 0, -- Offset from pattern match
|
||||
end_key = "$",
|
||||
keys = "qwertyuiopzxcvbnmasdfghjkl",
|
||||
check_comma = true,
|
||||
highlight = "PmenuSel",
|
||||
highlight_grey = "LineNr",
|
||||
},
|
||||
|
||||
}
|
||||
|
||||
local cmp_autopairs = require("nvim-autopairs.completion.cmp")
|
||||
local cmp_status_ok, cmp = pcall(require, "cmp")
|
||||
|
||||
if not cmp_status_ok then
|
||||
return
|
||||
end
|
||||
|
||||
cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done() )
|
133
nvim/lua/_cmp.lua
Normal file
133
nvim/lua/_cmp.lua
Normal file
|
@ -0,0 +1,133 @@
|
|||
local cmp = require 'cmp'
|
||||
|
||||
local snip_status_ok, luasnip = pcall(require, "luasnip")
|
||||
if not snip_status_ok then
|
||||
return
|
||||
end
|
||||
|
||||
require("luasnip/loaders/from_vscode").lazy_load()
|
||||
|
||||
local check_backspace = function()
|
||||
local col = vim.fn.col "." - 1
|
||||
return col == 0 or vim.fn.getline("."):sub(col, col):match "%s"
|
||||
end
|
||||
|
||||
local kind_icons = {
|
||||
Text = "",
|
||||
Method = "",
|
||||
Function = "",
|
||||
Constructor = "",
|
||||
Field = "",
|
||||
Variable = "",
|
||||
Class = "",
|
||||
Interface = "",
|
||||
Module = "",
|
||||
Property = "",
|
||||
Unit = "",
|
||||
Value = "",
|
||||
Enum = "",
|
||||
Keyword = "",
|
||||
Snippet = "",
|
||||
Color = "",
|
||||
File = "",
|
||||
Reference = "",
|
||||
Folder = "",
|
||||
EnumMember = "",
|
||||
Constant = "",
|
||||
Struct = "",
|
||||
Event = "",
|
||||
Operator = "",
|
||||
TypeParameter = "",
|
||||
}
|
||||
|
||||
-- find more here: https://www.nerdfonts.com/cheat-sheet
|
||||
--
|
||||
cmp.setup {
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
luasnip.lsp_expand(args.body) -- For `luasnip` users.
|
||||
end,
|
||||
},
|
||||
mapping = {
|
||||
["<C-k>"] = cmp.mapping.select_prev_item(),
|
||||
["<C-j>"] = cmp.mapping.select_next_item(),
|
||||
["<C-b>"] = cmp.mapping(cmp.mapping.scroll_docs(-1), { "i", "c" }),
|
||||
["<C-f>"] = cmp.mapping(cmp.mapping.scroll_docs(1), { "i", "c" }),
|
||||
["<C-Space>"] = cmp.mapping(cmp.mapping.complete(), { "i", "c" }),
|
||||
["<C-y>"] = cmp.config.disable, -- Specify `cmp.config.disable` if you want to remove the default `<C-y>` mapping.
|
||||
["<C-e>"] = cmp.mapping {
|
||||
i = cmp.mapping.abort(),
|
||||
c = cmp.mapping.close(),
|
||||
},
|
||||
-- Accept currently selected item. If none selected, `select` first item.
|
||||
-- Set `select` to `false` to only confirm explicitly selected items.
|
||||
["<CR>"] = cmp.mapping.confirm { select = false },
|
||||
["<Tab>"] = cmp.mapping(function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_next_item()
|
||||
elseif luasnip.expandable() then
|
||||
luasnip.expand()
|
||||
elseif luasnip.expand_or_jumpable() then
|
||||
luasnip.expand_or_jump()
|
||||
elseif check_backspace() then
|
||||
fallback()
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, {
|
||||
"i",
|
||||
"s",
|
||||
}),
|
||||
["<S-Tab>"] = cmp.mapping(function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_prev_item()
|
||||
elseif luasnip.jumpable(-1) then
|
||||
luasnip.jump(-1)
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, {
|
||||
"i",
|
||||
"s",
|
||||
}),
|
||||
},
|
||||
formatting = {
|
||||
fields = { "kind", "abbr", "menu" },
|
||||
format = function(entry, vim_item)
|
||||
-- Kind icons
|
||||
-- vim_item.kind = string.format("%s", kind_icons[vim_item.kind] or vim_item.kind)
|
||||
vim_item.kind = string.format('%s', kind_icons[vim_item.kind] or vim_item.kind)
|
||||
vim_item.menu = ({
|
||||
nvim_lsp = "[LSP]",
|
||||
nvim_lua = "[NVIM_LUA]",
|
||||
luasnip = "[Snippet]",
|
||||
buffer = "[Buffer]",
|
||||
path = "[Path]",
|
||||
})[entry.source.name]
|
||||
return vim_item
|
||||
end,
|
||||
},
|
||||
sources = {
|
||||
{ name = "nvim_lsp" },
|
||||
{ name = "nvim_lua" },
|
||||
{ name = "luasnip" },
|
||||
{ name = "buffer" },
|
||||
{ name = "path" },
|
||||
},
|
||||
confirm_opts = {
|
||||
behavior = cmp.ConfirmBehavior.Replace,
|
||||
select = false,
|
||||
},
|
||||
window = {
|
||||
documentation = cmp.config.window.bordered(),
|
||||
completion = cmp.config.window.bordered(),
|
||||
},
|
||||
experimental = {
|
||||
ghost_text = true,
|
||||
native_menu = false,
|
||||
},
|
||||
}
|
||||
|
||||
local cmp_autopairs = require('nvim-autopairs.completion.cmp')
|
||||
|
||||
cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done())
|
55
nvim/lua/_gitsigns.lua
Normal file
55
nvim/lua/_gitsigns.lua
Normal file
|
@ -0,0 +1,55 @@
|
|||
local status_ok, gitsigns = pcall(require, "gitsigns")
|
||||
if not status_ok then
|
||||
return
|
||||
end
|
||||
|
||||
gitsigns.setup {
|
||||
signs = {
|
||||
add = { text = '┃' },
|
||||
change = { text = '┃' },
|
||||
delete = { text = '_' },
|
||||
topdelete = { text = '‾' },
|
||||
changedelete = { text = '~' },
|
||||
untracked = { text = '┆' },
|
||||
},
|
||||
signs_staged = {
|
||||
add = { text = '┃' },
|
||||
change = { text = '┃' },
|
||||
delete = { text = '_' },
|
||||
topdelete = { text = '‾' },
|
||||
changedelete = { text = '~' },
|
||||
untracked = { text = '┆' },
|
||||
},
|
||||
signs_staged_enable = true,
|
||||
signcolumn = true, -- Toggle with `:Gitsigns toggle_signs`
|
||||
numhl = false, -- Toggle with `:Gitsigns toggle_numhl`
|
||||
linehl = false, -- Toggle with `:Gitsigns toggle_linehl`
|
||||
word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff`
|
||||
watch_gitdir = {
|
||||
follow_files = true
|
||||
},
|
||||
auto_attach = true,
|
||||
attach_to_untracked = false,
|
||||
current_line_blame = true, -- Toggle with `:Gitsigns toggle_current_line_blame`
|
||||
current_line_blame_opts = {
|
||||
virt_text = true,
|
||||
virt_text_pos = 'eol', -- 'eol' | 'overlay' | 'right_align'
|
||||
delay = 1000,
|
||||
ignore_whitespace = false,
|
||||
virt_text_priority = 100,
|
||||
use_focus = true,
|
||||
},
|
||||
current_line_blame_formatter = '<author>, <author_time:%R> - <summary>',
|
||||
sign_priority = 6,
|
||||
update_debounce = 100,
|
||||
status_formatter = nil, -- Use default
|
||||
max_file_length = 40000, -- Disable if file is longer than this (in lines)
|
||||
preview_config = {
|
||||
-- Options passed to nvim_open_win
|
||||
border = 'single',
|
||||
style = 'minimal',
|
||||
relative = 'cursor',
|
||||
row = 0,
|
||||
col = 1
|
||||
},
|
||||
}
|
8
nvim/lua/_gruvbox.lua
Normal file
8
nvim/lua/_gruvbox.lua
Normal file
|
@ -0,0 +1,8 @@
|
|||
require("gruvbox").setup({
|
||||
overrides = {
|
||||
SignColumn = { bg = "#282828" }
|
||||
},
|
||||
transparent_mode = false,
|
||||
})
|
||||
vim.o.background = "dark"
|
||||
vim.cmd([[colorscheme gruvbox]])
|
3
nvim/lua/_indentline.lua
Normal file
3
nvim/lua/_indentline.lua
Normal file
|
@ -0,0 +1,3 @@
|
|||
local hooks = require "ibl.hooks"
|
||||
hooks.register(hooks.type.WHITESPACE, hooks.builtin.hide_first_space_indent_level)
|
||||
require("ibl").setup()
|
142
nvim/lua/_keymaps.lua
Normal file
142
nvim/lua/_keymaps.lua
Normal file
|
@ -0,0 +1,142 @@
|
|||
local opts = { noremap = true, silent = true }
|
||||
local term_opts = { silent = true }
|
||||
local keymap = vim.api.nvim_set_keymap
|
||||
|
||||
-- Set leader to space
|
||||
keymap("", "<Space>", "<Nop>", opts)
|
||||
vim.g.mapleader = " "
|
||||
vim.g.maplocalleader = " "
|
||||
|
||||
keymap("n", "<leader>e", "<cmd>NvimTreeToggle<cr>", opts)
|
||||
|
||||
-- Old config...
|
||||
|
||||
ZenActive = true
|
||||
|
||||
local function toggle_zen()
|
||||
if not ZenActive then
|
||||
ZenActive = true
|
||||
|
||||
vim.cmd("set nonumber")
|
||||
vim.cmd("set norelativenumber")
|
||||
vim.lsp.inlay_hint.enable(false)
|
||||
else
|
||||
ZenActive = false
|
||||
|
||||
vim.cmd("set relativenumber")
|
||||
vim.cmd("set number")
|
||||
vim.lsp.inlay_hint.enable(true)
|
||||
end
|
||||
end
|
||||
|
||||
vim.api.nvim_create_user_command("ToggleZen", toggle_zen, {})
|
||||
|
||||
keymap("n", "<C-q>", "<cmd>ToggleZen<cr>", opts)
|
||||
keymap("n", "<leader>h", "<cmd>nohl<cr>", opts)
|
||||
|
||||
local function format_with_prettier()
|
||||
vim.fn.system('pnpm exec prettier --write ' .. vim.fn.expand('%:p'))
|
||||
vim.cmd('edit') -- Reload the buffer after formatting
|
||||
end
|
||||
vim.api.nvim_create_user_command("FormatWithPrettier", format_with_prettier, {})
|
||||
keymap("n", "<leader>pr", "<cmd>write<cr><cmd>FormatWithPrettier<cr>", opts)
|
||||
|
||||
-- Modes
|
||||
-- normal_mode = "n",
|
||||
-- insert_mode = "i",
|
||||
-- visual_mode = "v",
|
||||
-- visual_block_mode = "x",
|
||||
-- term_mode = "t",
|
||||
-- command_mode = "c",
|
||||
|
||||
keymap("n", "<C-h>", "<C-w>h", opts)
|
||||
keymap("n", "<C-j>", "<C-w>j", opts)
|
||||
keymap("n", "<C-k>", "<C-w>k", opts)
|
||||
keymap("n", "<C-l>", "<C-w>l", opts)
|
||||
keymap("n", "<C-c>", "<CMD>%bd|e#|bd#<CR>", opts)
|
||||
|
||||
|
||||
keymap("n", "<C-Up>", ":resize +2<CR>", opts)
|
||||
keymap("n", "<C-Down>", ":resize -2<CR>", opts)
|
||||
keymap("n", "<C-Left>", ":vertical resize -2<CR>", opts)
|
||||
keymap("n", "<C-Right>", ":vertical resize +2<CR>", opts)
|
||||
|
||||
-- Navigate buffers
|
||||
keymap("n", "<S-l>", ":bnext<CR>", opts)
|
||||
keymap("n", "<S-h>", ":bprevious<CR>", opts)
|
||||
|
||||
-- Visual --
|
||||
-- Stay in indent mode
|
||||
keymap("v", "<", "<gv", opts)
|
||||
keymap("v", ">", ">gv", opts)
|
||||
keymap("v", "p", '"_dP', opts)
|
||||
|
||||
-- Move text up and down
|
||||
keymap("x", "<C-j>", ":move '>+1<CR>gv-gv", opts)
|
||||
keymap("x", "<C-k>", ":move '<-2<CR>gv-gv", opts)
|
||||
|
||||
keymap(
|
||||
"n",
|
||||
"<leader>tm",
|
||||
"<cmd>lua require 'telescope.builtin'.lsp_document_symbols({ symbols = { 'method', 'function' } })<cr>",
|
||||
opts
|
||||
)
|
||||
|
||||
keymap(
|
||||
"n",
|
||||
"<leader>f",
|
||||
"<cmd>lua require'telescope.builtin'.find_files(require('telescope.themes').get_dropdown({ previewer = false }))<cr>",
|
||||
opts
|
||||
)
|
||||
keymap("n", "<leader>tg", "<cmd>Telescope live_grep<cr>", opts)
|
||||
|
||||
|
||||
keymap("n", "<leader>w", "<cmd>lua vim.lsp.buf.format({async = false})<cr><cmd>w<cr>", opts)
|
||||
keymap("n", "<leader>c", "<cmd>bdelete<cr>", opts)
|
||||
|
||||
keymap(
|
||||
"n",
|
||||
"<A-]>",
|
||||
[[<cmd>set so=999<cr> <cmd>/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<cr>jjj^0 <cmd>nohl<cr> <cmd>set so=6<cr>]],
|
||||
opts
|
||||
)
|
||||
|
||||
keymap(
|
||||
"n",
|
||||
"<A-[>",
|
||||
[[<cmd>set so=999<cr> <cmd>?\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<cr>nnjjj^0 <cmd>nohl<cr> <cmd>set so=6<cr>]],
|
||||
opts
|
||||
)
|
||||
|
||||
vim.g.font_size = 10
|
||||
vim.o.guifont = "JetbrainsMono Nerd Font:h" .. vim.g.font_size
|
||||
|
||||
keymap("n", "<C-e>", "5<C-e>", opts)
|
||||
|
||||
vim.keymap.set(
|
||||
"n",
|
||||
"<C-_>",
|
||||
[[<cmd>lua vim.g.font_size = vim.g.font_size - 1<CR><cmd>lua vim.o.guifont='JetbrainsMono Nerd Font:h'..vim.g.font_size<CR>]]
|
||||
)
|
||||
|
||||
vim.keymap.set(
|
||||
"n",
|
||||
"<C-+>",
|
||||
[[<cmd>lua vim.g.font_size = vim.g.font_size + 1<CR><cmd>lua vim.o.guifont='JetbrainsMono Nerd Font:h'..vim.g.font_size<CR>]]
|
||||
)
|
||||
keymap("n", "\\", "<cmd>ToggleTerm<cr>", opts)
|
||||
keymap("t", "<leader>\\", "<cmd>ToggleTerm<cr>", opts)
|
||||
|
||||
vim.api.nvim_set_keymap(
|
||||
"v",
|
||||
"<leader>re",
|
||||
[[ <Esc><Cmd>lua require('refactoring').refactor('Extract Function')<CR>]],
|
||||
{ noremap = true, silent = true, expr = false }
|
||||
)
|
||||
|
||||
vim.api.nvim_set_keymap(
|
||||
"v",
|
||||
"<leader>rf",
|
||||
[[ <Esc><Cmd>lua require('refactoring').refactor('Extract Function To File')<CR>]],
|
||||
{ noremap = true, silent = true, expr = false }
|
||||
)
|
120
nvim/lua/_lsp.lua
Normal file
120
nvim/lua/_lsp.lua
Normal file
|
@ -0,0 +1,120 @@
|
|||
local function supported_by_prettier(filetype)
|
||||
local filetypes = {
|
||||
'javascript',
|
||||
'javascriptreact',
|
||||
'javascript.jsx',
|
||||
'typescript',
|
||||
'typescriptreact',
|
||||
'typescript.tsx',
|
||||
'vue',
|
||||
'svelte',
|
||||
'astro',
|
||||
-- html
|
||||
'aspnetcorerazor',
|
||||
'astro',
|
||||
'astro-markdown',
|
||||
'blade',
|
||||
'clojure',
|
||||
'django-html',
|
||||
'htmldjango',
|
||||
'edge',
|
||||
'eelixir', -- vim ft
|
||||
'elixir',
|
||||
'ejs',
|
||||
'erb',
|
||||
'eruby', -- vim ft
|
||||
'gohtml',
|
||||
'gohtmltmpl',
|
||||
'haml',
|
||||
'handlebars',
|
||||
'hbs',
|
||||
'html',
|
||||
'htmlangular',
|
||||
'html-eex',
|
||||
'heex',
|
||||
'jade',
|
||||
'leaf',
|
||||
'liquid',
|
||||
'markdown',
|
||||
'mdx',
|
||||
'mustache',
|
||||
'njk',
|
||||
'nunjucks',
|
||||
'php',
|
||||
'razor',
|
||||
'slim',
|
||||
'twig',
|
||||
-- css
|
||||
'css',
|
||||
'less',
|
||||
'postcss',
|
||||
'sass',
|
||||
'scss',
|
||||
'stylus',
|
||||
'sugarss',
|
||||
-- js
|
||||
'javascript',
|
||||
'javascriptreact',
|
||||
'reason',
|
||||
'rescript',
|
||||
'typescript',
|
||||
'typescriptreact',
|
||||
-- mixed
|
||||
'vue',
|
||||
'svelte',
|
||||
'templ',
|
||||
}
|
||||
|
||||
for _, v in ipairs(filetypes) do
|
||||
if v == filetype then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local config = {
|
||||
virtual_text = true,
|
||||
signs = {
|
||||
text = {
|
||||
[vim.diagnostic.severity.ERROR] = '',
|
||||
[vim.diagnostic.severity.WARN] = '',
|
||||
[vim.diagnostic.severity.INFO] = '',
|
||||
[vim.diagnostic.severity.HINT] = '',
|
||||
}
|
||||
},
|
||||
update_in_insert = true,
|
||||
underline = true,
|
||||
severity_sort = true,
|
||||
float = {
|
||||
focusable = false,
|
||||
style = "normal",
|
||||
border = "rounded",
|
||||
source = "always",
|
||||
header = "",
|
||||
prefix = "",
|
||||
},
|
||||
}
|
||||
|
||||
vim.filetype.add({
|
||||
extension = {
|
||||
svx = "markdown",
|
||||
}
|
||||
})
|
||||
|
||||
vim.diagnostic.config(config)
|
||||
|
||||
vim.lsp.buf.hover({ border = "rounded" })
|
||||
vim.lsp.buf.signature_help({ border = "rounded" })
|
||||
vim.lsp.enable({
|
||||
'clangd',
|
||||
'luals',
|
||||
|
||||
'svelte',
|
||||
'tailwindcss',
|
||||
"ts_ls",
|
||||
"cssls",
|
||||
"eslint",
|
||||
"mdx_analyzer",
|
||||
})
|
||||
|
103
nvim/lua/_lualine.lua
Normal file
103
nvim/lua/_lualine.lua
Normal file
|
@ -0,0 +1,103 @@
|
|||
local status_ok, lualine = pcall(require, "lualine")
|
||||
if not status_ok then
|
||||
return
|
||||
end
|
||||
|
||||
local branch = {
|
||||
"branch",
|
||||
icons_enabled = true,
|
||||
icon = "",
|
||||
}
|
||||
|
||||
local diff = {
|
||||
"diff",
|
||||
colored = false,
|
||||
symbols = { added = " ", modified = " ", removed = " " }, -- changes diff symbols
|
||||
}
|
||||
|
||||
local location = {
|
||||
"location",
|
||||
padding = 0,
|
||||
}
|
||||
|
||||
local colors = {
|
||||
blue = "#458588",
|
||||
green = "#98971a",
|
||||
purple = "#b16286",
|
||||
cyan = "#83a598",
|
||||
red1 = "#cc241d",
|
||||
yellow = "#d79921",
|
||||
fg = "#ebdbb2",
|
||||
bg = "#282828",
|
||||
gray1 = "#928374",
|
||||
gray2 = "#7c6f64",
|
||||
gray3 = "#665c54",
|
||||
}
|
||||
|
||||
local gruvbox = {
|
||||
normal = {
|
||||
a = { fg = colors.bg, bg = colors.blue, gui = "bold" },
|
||||
c = { fg = colors.bg, bg = colors.blue, gui = "bold" },
|
||||
z = { fg = colors.bg, bg = colors.blue, gui = "bold" },
|
||||
},
|
||||
command = {
|
||||
a = { fg = colors.bg, bg = colors.yellow, gui = "bold" },
|
||||
c = { fg = colors.bg, bg = colors.yellow, gui = "bold" },
|
||||
z = { fg = colors.bg, bg = colors.yellow, gui = "bold" },
|
||||
},
|
||||
insert = {
|
||||
a = { fg = colors.bg, bg = colors.green, gui = "bold" },
|
||||
c = { fg = colors.bg, bg = colors.green, gui = "bold" },
|
||||
z = { fg = colors.bg, bg = colors.green, gui = "bold" },
|
||||
},
|
||||
visual = {
|
||||
a = { fg = colors.bg, bg = colors.purple, gui = "bold" },
|
||||
c = { fg = colors.bg, bg = colors.purple, gui = "bold" },
|
||||
z = { fg = colors.bg, bg = colors.purple, gui = "bold" },
|
||||
},
|
||||
terminal = {
|
||||
a = { fg = colors.bg, bg = colors.cyan, gui = "bold" },
|
||||
c = { fg = colors.bg, bg = colors.cyan, gui = "bold" },
|
||||
z = { fg = colors.bg, bg = colors.cyan, gui = "bold" },
|
||||
},
|
||||
replace = {
|
||||
a = { fg = colors.bg, bg = colors.red1, gui = "bold" },
|
||||
c = { fg = colors.bg, bg = colors.red1, gui = "bold" },
|
||||
z = { fg = colors.bg, bg = colors.red1, gui = "bold" },
|
||||
},
|
||||
inactive = {
|
||||
a = { fg = colors.gray1, bg = colors.bg, gui = "bold" },
|
||||
c = { fg = colors.gray1, bg = colors.bg, gui = "bold" },
|
||||
z = { fg = colors.gray1, bg = colors.bg, gui = "bold" },
|
||||
},
|
||||
}
|
||||
|
||||
lualine.setup({
|
||||
options = {
|
||||
icons_enabled = true,
|
||||
theme = gruvbox,
|
||||
component_separators = { left = "", right = "" },
|
||||
section_separators = { left = "", right = "" },
|
||||
disabled_filetypes = { "dashboard", "NvimTree", "Outline" },
|
||||
always_divide_middle = true,
|
||||
},
|
||||
sections = {
|
||||
lualine_a = { "filename" },
|
||||
lualine_b = { { "diagnostics", colored = false }},
|
||||
lualine_c = {},
|
||||
lualine_x = {branch, diff},
|
||||
lualine_y = { },
|
||||
lualine_z = { },
|
||||
},
|
||||
inactive_sections = {
|
||||
lualine_a = { "filename" },
|
||||
lualine_b = {},
|
||||
lualine_c = {},
|
||||
lualine_x = {},
|
||||
lualine_y = {},
|
||||
lualine_z = {},
|
||||
},
|
||||
tabline = {},
|
||||
extensions = {},
|
||||
})
|
||||
|
75
nvim/lua/_nvim_tree.lua
Normal file
75
nvim/lua/_nvim_tree.lua
Normal file
|
@ -0,0 +1,75 @@
|
|||
local status_ok, nvim_tree = pcall(require, "nvim-tree")
|
||||
if not status_ok then
|
||||
return
|
||||
end
|
||||
|
||||
local function my_on_attach(bufnr)
|
||||
local api = require "nvim-tree.api"
|
||||
|
||||
local function opts(desc)
|
||||
return { desc = "nvim-tree: " .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true }
|
||||
end
|
||||
|
||||
-- default mappings
|
||||
api.config.mappings.default_on_attach(bufnr)
|
||||
|
||||
-- custom mappings
|
||||
vim.keymap.set('n', '<C-t>', api.tree.change_root_to_parent, opts('Up'))
|
||||
vim.keymap.set('n', '?', api.tree.toggle_help, opts('Help'))
|
||||
end
|
||||
|
||||
nvim_tree.setup({
|
||||
on_attach = my_on_attach,
|
||||
actions = {
|
||||
open_file = {
|
||||
quit_on_open = true,
|
||||
},
|
||||
},
|
||||
|
||||
update_focused_file = {
|
||||
enable = true,
|
||||
update_cwd = false,
|
||||
},
|
||||
renderer = {
|
||||
root_folder_modifier = ":t",
|
||||
icons = {
|
||||
glyphs = {
|
||||
default = "",
|
||||
symlink = "",
|
||||
folder = {
|
||||
arrow_open = "",
|
||||
arrow_closed = "",
|
||||
default = "",
|
||||
open = "",
|
||||
empty = "",
|
||||
empty_open = "",
|
||||
symlink = "",
|
||||
symlink_open = "",
|
||||
},
|
||||
git = {
|
||||
unstaged = "",
|
||||
staged = "S",
|
||||
unmerged = "",
|
||||
renamed = "➜",
|
||||
untracked = "U",
|
||||
deleted = "",
|
||||
ignored = "◌",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
diagnostics = {
|
||||
enable = false,
|
||||
show_on_dirs = true,
|
||||
icons = {
|
||||
hint = "",
|
||||
info = "",
|
||||
warning = "",
|
||||
error = "",
|
||||
},
|
||||
},
|
||||
view = {
|
||||
width = 36,
|
||||
side = "right",
|
||||
},
|
||||
})
|
41
nvim/lua/_options.lua
Normal file
41
nvim/lua/_options.lua
Normal file
|
@ -0,0 +1,41 @@
|
|||
vim.g.loaded_netrw = 1
|
||||
vim.g.loaded_netrwPlugin = 1
|
||||
vim.opt.clipboard = "unnamedplus"
|
||||
vim.opt.completeopt = "menuone,noselect"
|
||||
vim.opt.fileencoding = "utf-32"
|
||||
vim.opt.ignorecase = true
|
||||
vim.opt.pumheight = 12
|
||||
vim.opt.splitbelow = true
|
||||
vim.opt.splitright = true
|
||||
vim.opt.swapfile = false
|
||||
vim.opt.termguicolors = true
|
||||
vim.opt.undofile = true
|
||||
vim.opt.updatetime = 300
|
||||
vim.opt.signcolumn = "yes"
|
||||
vim.opt.wrap = false
|
||||
vim.opt.scrolloff = 6
|
||||
vim.opt.sidescrolloff = 6
|
||||
vim.opt.showmode = false
|
||||
vim.opt.colorcolumn = "100"
|
||||
vim.opt.expandtab = true
|
||||
vim.opt.shiftwidth = 4
|
||||
vim.opt.tabstop = 4
|
||||
vim.opt.autoindent = true
|
||||
vim.opt.showtabline = 0
|
||||
vim.opt.cursorline = false
|
||||
vim.opt.numberwidth = 4
|
||||
vim.opt.shortmess:append("c")
|
||||
vim.opt.laststatus = 1
|
||||
vim.cmd('let g:neovide_cursor_vfx_mode = "pixiedust"')
|
||||
vim.cmd("let g:neovide_cursor_vfx_particle_density = 32.0")
|
||||
|
||||
-- lastplace
|
||||
vim.api.nvim_create_autocmd('BufReadPost', {
|
||||
callback = function()
|
||||
local mark = vim.api.nvim_buf_get_mark(0, '"')
|
||||
local lcount = vim.api.nvim_buf_line_count(0)
|
||||
if mark[1] > 0 and mark[1] <= lcount then
|
||||
vim.api.nvim_win_set_cursor(0, mark)
|
||||
end
|
||||
end
|
||||
})
|
38
nvim/lua/_plugins.lua
Normal file
38
nvim/lua/_plugins.lua
Normal file
|
@ -0,0 +1,38 @@
|
|||
require("_plugins_bootstrap")
|
||||
require("lazy").setup({
|
||||
spec = {
|
||||
-- Core
|
||||
{ 'nvim-lua/plenary.nvim' },
|
||||
|
||||
-- Navigation
|
||||
{ "kyazdani42/nvim-tree.lua" },
|
||||
{ 'nvim-telescope/telescope.nvim' },
|
||||
{ "slarwise/telescope-args.nvim" },
|
||||
|
||||
-- Aesthetics
|
||||
{ "lukas-reineke/indent-blankline.nvim" },
|
||||
{ "nvim-treesitter/nvim-treesitter", },
|
||||
{ "kyazdani42/nvim-web-devicons" },
|
||||
{ "nvim-lualine/lualine.nvim" },
|
||||
{ "ellisonleao/gruvbox.nvim" },
|
||||
{ "lewis6991/gitsigns.nvim" },
|
||||
{ "goolord/alpha-nvim" },
|
||||
{ "xiyaowong/transparent.nvim" },
|
||||
|
||||
-- Auto-complete
|
||||
{ "hrsh7th/nvim-cmp" },
|
||||
{ "hrsh7th/cmp-nvim-lsp" },
|
||||
{ "hrsh7th/cmp-nvim-lua" },
|
||||
{ "hrsh7th/cmp-buffer" },
|
||||
{ "hrsh7th/cmp-path" },
|
||||
{ "hrsh7th/cmp-cmdline" },
|
||||
{ "saadparwaiz1/cmp_luasnip" },
|
||||
{ "windwp/nvim-autopairs" },
|
||||
{ "L3MON4D3/LuaSnip" },
|
||||
|
||||
-- Lsp
|
||||
{ "neovim/nvim-lspconfig" },
|
||||
},
|
||||
install = { colorscheme = { "gruvbox" } },
|
||||
checker = { enabled = true },
|
||||
})
|
17
nvim/lua/_plugins_bootstrap.lua
Normal file
17
nvim/lua/_plugins_bootstrap.lua
Normal file
|
@ -0,0 +1,17 @@
|
|||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||
if not (vim.uv or vim.loop).fs_stat(lazypath) then
|
||||
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
|
||||
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
|
||||
if vim.v.shell_error ~= 0 then
|
||||
vim.api.nvim_echo({
|
||||
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
|
||||
{ out, "WarningMsg" },
|
||||
{ "\nPress any key to exit..." },
|
||||
}, true, {})
|
||||
vim.fn.getchar()
|
||||
os.exit(1)
|
||||
end
|
||||
end
|
||||
vim.opt.rtp:prepend(lazypath)
|
||||
vim.g.mapleader = " "
|
||||
vim.g.maplocalleader = "\\"
|
98
nvim/lua/_telescope.lua
Normal file
98
nvim/lua/_telescope.lua
Normal file
|
@ -0,0 +1,98 @@
|
|||
local status_ok, telescope = pcall(require, "telescope")
|
||||
if not status_ok then
|
||||
return
|
||||
end
|
||||
|
||||
telescope.load_extension("args")
|
||||
local actions = require("telescope.actions")
|
||||
|
||||
telescope.setup({
|
||||
defaults = {
|
||||
|
||||
file_ignore_patterns = { "doxygen", "^build", "^tests/assets", ".*\\.png$" },
|
||||
prompt_prefix = " ",
|
||||
selection_caret = " ",
|
||||
path_display = { "truncate" },
|
||||
|
||||
mappings = {
|
||||
i = {
|
||||
["<C-n>"] = actions.cycle_history_next,
|
||||
["<C-p>"] = actions.cycle_history_prev,
|
||||
|
||||
["<C-j>"] = actions.move_selection_next,
|
||||
["<C-k>"] = actions.move_selection_previous,
|
||||
|
||||
["<C-c>"] = actions.close,
|
||||
|
||||
["<Down>"] = actions.move_selection_next,
|
||||
["<Up>"] = actions.move_selection_previous,
|
||||
|
||||
["<CR>"] = actions.select_default,
|
||||
["<C-x>"] = actions.select_horizontal,
|
||||
["<C-v>"] = actions.select_vertical,
|
||||
["<C-t>"] = actions.select_tab,
|
||||
|
||||
["<C-u>"] = actions.preview_scrolling_up,
|
||||
["<C-d>"] = actions.preview_scrolling_down,
|
||||
|
||||
["<PageUp>"] = actions.results_scrolling_up,
|
||||
["<PageDown>"] = actions.results_scrolling_down,
|
||||
|
||||
["<Tab>"] = actions.toggle_selection + actions.move_selection_worse,
|
||||
["<S-Tab>"] = actions.toggle_selection + actions.move_selection_better,
|
||||
["<C-q>"] = actions.send_to_qflist + actions.open_qflist,
|
||||
["<M-q>"] = actions.send_selected_to_qflist + actions.open_qflist,
|
||||
["<C-l>"] = actions.complete_tag,
|
||||
["<C-_>"] = actions.which_key, -- keys from pressing <C-/>
|
||||
},
|
||||
|
||||
n = {
|
||||
["<esc>"] = actions.close,
|
||||
["<CR>"] = actions.select_default,
|
||||
["<C-x>"] = actions.select_horizontal,
|
||||
["<C-v>"] = actions.select_vertical,
|
||||
["<C-t>"] = actions.select_tab,
|
||||
|
||||
["<Tab>"] = actions.toggle_selection + actions.move_selection_worse,
|
||||
["<S-Tab>"] = actions.toggle_selection + actions.move_selection_better,
|
||||
["<C-q>"] = actions.send_to_qflist + actions.open_qflist,
|
||||
["<M-q>"] = actions.send_selected_to_qflist + actions.open_qflist,
|
||||
|
||||
["j"] = actions.move_selection_next,
|
||||
["k"] = actions.move_selection_previous,
|
||||
["H"] = actions.move_to_top,
|
||||
["M"] = actions.move_to_middle,
|
||||
["L"] = actions.move_to_bottom,
|
||||
|
||||
["<Down>"] = actions.move_selection_next,
|
||||
["<Up>"] = actions.move_selection_previous,
|
||||
["gg"] = actions.move_to_top,
|
||||
["G"] = actions.move_to_bottom,
|
||||
|
||||
["<C-u>"] = actions.preview_scrolling_up,
|
||||
["<C-d>"] = actions.preview_scrolling_down,
|
||||
|
||||
["<PageUp>"] = actions.results_scrolling_up,
|
||||
["<PageDown>"] = actions.results_scrolling_down,
|
||||
|
||||
["?"] = actions.which_key,
|
||||
},
|
||||
},
|
||||
},
|
||||
pickers = {
|
||||
-- Default configuration for builtin pickers goes here:
|
||||
-- picker_name = {
|
||||
-- picker_config_key = value,
|
||||
-- ...
|
||||
-- }
|
||||
-- Now the picker_config_key will be applied every time you call this
|
||||
-- builtin picker
|
||||
},
|
||||
extensions = {
|
||||
-- Your extension configuration goes here:
|
||||
-- extension_name = {
|
||||
-- extension_config_key = value,
|
||||
-- }
|
||||
-- please take a look at the readme of the extension you want to configure
|
||||
},
|
||||
})
|
20
nvim/lua/_treesitter.lua
Normal file
20
nvim/lua/_treesitter.lua
Normal file
|
@ -0,0 +1,20 @@
|
|||
local configs = require("nvim-treesitter.configs")
|
||||
|
||||
configs.setup({
|
||||
ensure_installed = "all",
|
||||
sync_install = false,
|
||||
ignore_install = { "" },
|
||||
autopairs = {
|
||||
enable = true,
|
||||
},
|
||||
context_commenting = {
|
||||
enable = true,
|
||||
enable_autocmd = false,
|
||||
},
|
||||
highlight = {
|
||||
enable = true,
|
||||
disable = { "" },
|
||||
additional_vim_regex_highlighting = true,
|
||||
},
|
||||
-- indent = { enable = true, disable = { "yaml" } },
|
||||
})
|
28
nvim/spell/en.utf-8.add
Normal file
28
nvim/spell/en.utf-8.add
Normal file
|
@ -0,0 +1,28 @@
|
|||
intranquility
|
||||
uv
|
||||
shader
|
||||
rasterizer
|
||||
rasterization
|
||||
applesthepi
|
||||
rasterize
|
||||
#OLINR
|
||||
NOLINT
|
||||
NOLINR/!
|
||||
glm
|
||||
mat4
|
||||
skybox
|
||||
TransformComponent
|
||||
param
|
||||
swapchain
|
||||
struct
|
||||
readonly
|
||||
writeonly
|
||||
samplerCueb
|
||||
samplerCube
|
||||
Vulkan
|
||||
accessor
|
||||
const
|
||||
cmd
|
||||
str
|
||||
RDB
|
||||
Rasterized
|
BIN
nvim/spell/en.utf-8.add.spl
Normal file
BIN
nvim/spell/en.utf-8.add.spl
Normal file
Binary file not shown.
Loading…
Add table
Reference in a new issue