From 499efa20f1c4619c4ecfd1169ed70b451f6f7976 Mon Sep 17 00:00:00 2001 From: Buliway Date: Fri, 24 Jan 2025 16:31:00 +0300 Subject: [PATCH] refactor and add new theme --- nvim/README.md | 55 ++++++++++++++------ nvim/ftplugin/nix.lua | 4 ++ nvim/init.lua | 3 -- nvim/lazy-lock.json | 2 +- nvim/lua/kickstart/plugins/autoformat.lua | 17 ++++-- nvim/lua/kickstart/plugins/lsp.lua | 31 +++++++---- nvim/lua/kickstart/plugins/telescope.lua | 2 +- nvim/lua/kickstart/plugins/themes.lua | 63 +++++++++++++++++++++-- nvim/lua/kickstart/plugins/treesitter.lua | 53 ++++++++++--------- nvim/lua/kickstart/plugins/vim-sleuth.lua | 5 -- nvim/lua/kickstart/settings.lua | 4 +- 11 files changed, 172 insertions(+), 67 deletions(-) create mode 100644 nvim/ftplugin/nix.lua delete mode 100644 nvim/lua/kickstart/plugins/vim-sleuth.lua diff --git a/nvim/README.md b/nvim/README.md index fc27c1c..3bbec16 100644 --- a/nvim/README.md +++ b/nvim/README.md @@ -47,6 +47,27 @@ ln -s ~/nixos-private-dots/nvim ~/.config/nvim Чтоб понять есть ли проблемы с конфигом, может какие-то пакеты отсутствуют, можно запустить `:healthcheck`. +## Изменить в будущем + +Сейчас я сделал в стоке везде табуляцию в 4 символа на таб. Не пробелы. Если захочу это исправить и сделать per language настройки, то это можно сделать по разному. Сейчас у меня lsp/formatter сами заменяют табы на пробелы при сохранении файла. + +Use `:h ftplugin` together with `:h :setlocal` +В каталоге nvim надо сделать каталог `ftplugin` и в него добавлять файлы `filetype.lua`. Например для python будет `python.lua`. И там можно писать настройки для каждого отдельного языка: +```lua +vim.bo.tabstop = 4 -- size of a hard tabstop (ts). +vim.bo.shiftwidth = 4 -- size of an indentation (sw). +vim.bo.expandtab = true -- always uses spaces instead of tab characters (et). +vim.bo.softtabstop = 4 -- number of spaces a counts for. When 0, feature is off (sts) +``` + +Если не хочется возиться с тонной файлов, то можно добавить это в init.vim (надо переписать для init.lua): +```vim +autocmd BufEnter *.py :setlocal tabstop=4 shiftwidth=4 expandtab +autocmd BufEnter *.js :setlocal tabstop=2 shiftwidth=2 expandtab +``` + +Per project можно использовать `.editorconfig` файл в корне проекта. Нвим должен работать с его настройками. + ## Бинды Тут будет список биндов, которых нет в стандартном NeoVim @@ -57,22 +78,23 @@ ln -s ~/nixos-private-dots/nvim ~/.config/nvim Я не помню откуда эти бинды, может они есть в стоке, а может нет, но они полезные. -| Bind | Description | -|---------------------|-------------------------------------| -| `K` | Hover documentation | -| `ctrl+o` | Go back | -| `ctrl+i` | Go forward (if you went backwards) | -| `p` | Paste from nvim register | -| `ctrl+shift+v` | Paste from system clipboard | -| `y` | Yank(copy) to nvim register | -| `space y` | Yank(copy) to system clipboard | -| `d` | Delete(copy) to nvim register | -| `space d` | Delete(copy) to system clipboard | -| `alt + up/down/j/k` | Move lines in visual mode | -| `[d` | Go to previous `D`iagnostic message | -| `]d` | Go to next `D`iagnostic message | -| `space e` | Show diagnostic `E`rror message | -| `space q` | Open diagnostic `Q`uickfix | +| Bind | Description | +|---------------------|---------------------------------------------------------| +| `K` | Hover documentation | +| `ctrl+o` | Go back | +| `ctrl+i` | Go forward (if you went backwards) | +| `p` | Paste from nvim register | +| `ctrl+shift+v` | Paste from system clipboard | +| `y` | Yank(copy) to nvim register | +| `space y` | Yank(copy) to system clipboard | +| `d` | Delete(copy) to nvim register | +| `space d` | Delete(copy) to system clipboard | +| `alt + up/down/j/k` | Move lines in visual mode | +| `[d` | Go to previous `D`iagnostic message | +| `]d` | Go to next `D`iagnostic message | +| `space e` | Show diagnostic `E`rror message | +| `space q` | Open diagnostic `Q`uickfix | +| `ctrl+l` | Перейти к следующему плейсхолдеру сниппета в insert mod | Бинды в таблице ниже нажимаются без пробела перед ними. Просто бинд @@ -192,6 +214,7 @@ Normal mode. С пробелом - `YAML LSP` имеет [опциональные настройки](https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.txt#yamlls) - `JSON LSP` имеет [опциональные настройки](https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.txt#jsonls) - `rust-analyzer` имеет много опциональных настроек +- Чтоб `sql` работал внутри `.go` файлов, sql запросы надо писать внутри \`` так `\`. Тоесть внутри \` с пробелом в начале и конце, а не просто строка. - `sqlfluff` требует иметь `.sqlfluff` в директории проекта. Вот пример конфига: ```toml [sqlfluff] diff --git a/nvim/ftplugin/nix.lua b/nvim/ftplugin/nix.lua new file mode 100644 index 0000000..55de27d --- /dev/null +++ b/nvim/ftplugin/nix.lua @@ -0,0 +1,4 @@ +vim.bo.expandtab = true +vim.bo.tabstop = 2 +vim.bo.shiftwidth = 2 +vim.bo.softtabstop = 2 diff --git a/nvim/init.lua b/nvim/init.lua index 314e2d8..bab56e1 100644 --- a/nvim/init.lua +++ b/nvim/init.lua @@ -32,9 +32,6 @@ require('lazy').setup({ -- Установлены из коробки в kickstart.nvim -- --------------------------------------------- - -- Detect expandtab and shiftwidth automatically - require 'kickstart.plugins.vim-sleuth', - -- Git integration for buffers require 'kickstart.plugins.gitsigns', diff --git a/nvim/lazy-lock.json b/nvim/lazy-lock.json index 1bb4d42..a93642c 100644 --- a/nvim/lazy-lock.json +++ b/nvim/lazy-lock.json @@ -14,6 +14,7 @@ "gitsigns.nvim": { "branch": "main", "commit": "5f808b5e4fef30bd8aca1b803b4e555da07fc412" }, "go.nvim": { "branch": "master", "commit": "c6d5ca26377d01c4de1f7bff1cd62c8b43baa6bc" }, "gruvbox-material": { "branch": "master", "commit": "e41451337d33997aff4c078a83165a9f66e2d38d" }, + "gruvbox.nvim": { "branch": "main", "commit": "68c3460a5d1d1a362318960035c9f3466d5011f5" }, "guihua.lua": { "branch": "master", "commit": "d783191eaa75215beae0c80319fcce5e6b3beeda" }, "image.nvim": { "branch": "master", "commit": "f1163cc2f6fff5b0de7c23c7502eee0df23a3e0e" }, "indent-blankline.nvim": { "branch": "master", "commit": "259357fa4097e232730341fa60988087d189193a" }, @@ -52,6 +53,5 @@ "telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" }, "todo-comments.nvim": { "branch": "main", "commit": "ae0a2afb47cf7395dc400e5dc4e05274bf4fb9e0" }, "tokyonight.nvim": { "branch": "main", "commit": "7bb270adaa7692c2c33befc35f5567fc596a2504" }, - "vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" }, "which-key.nvim": { "branch": "main", "commit": "1f8d414f61e0b05958c342df9b6a4c89ce268766" } } diff --git a/nvim/lua/kickstart/plugins/autoformat.lua b/nvim/lua/kickstart/plugins/autoformat.lua index 4de5c4a..8ce5e72 100644 --- a/nvim/lua/kickstart/plugins/autoformat.lua +++ b/nvim/lua/kickstart/plugins/autoformat.lua @@ -40,9 +40,9 @@ return { end, formatters_by_ft = { lua = { 'stylua' }, + go = { 'gofmt', 'injected' }, sql = { 'sqlfluff' }, - -- sql = { 'sql_formatter' }, - -- ["*"] = { "injected" }, -- enables injected-lang formatting for all filetypes + -- ['*'] = { 'injected' }, -- enables injected-lang formatting for all filetypes -- Conform can also run multiple formatters sequentially -- python = { "isort", "black" }, @@ -67,8 +67,19 @@ return { -- end, -- stdin = true, -- }, + sqlfluff = { + command = 'sqlfluff', + args = { + 'format', + -- 'fix', + -- '--dialect', + -- 'postgres', + -- '--disable-progress-bar', + '-', + }, + stdin = true, + }, }, }, }, } - diff --git a/nvim/lua/kickstart/plugins/lsp.lua b/nvim/lua/kickstart/plugins/lsp.lua index 695c852..bf52479 100644 --- a/nvim/lua/kickstart/plugins/lsp.lua +++ b/nvim/lua/kickstart/plugins/lsp.lua @@ -93,7 +93,7 @@ return { -- Fuzzy find all the symbols in your current document. -- Symbols are things like variables, functions, types, etc. -- Было ds [D]ocument [S]ymbols - map('S', require('telescope.builtin').lsp_document_symbols, 'Document [S]ymbols') + map('ss', require('telescope.builtin').lsp_document_symbols, 'Document [S]ymbols') -- Fuzzy find all the symbols in your current workspace. -- Similar to document symbols, except searches over your entire project. @@ -190,8 +190,28 @@ return { -- taplo } + -- local util = require 'lspconfig.util' local lspconfig = require 'lspconfig' + -- require('lspconfig.configs').postgres_lsp = { + -- default_config = { + -- name = 'postgres_lsp', + -- cmd = { 'postgres_lsp' }, + -- filetypes = { 'sql' }, + -- single_file_support = true, + -- root_dir = util.root_pattern 'root-file.txt', + -- }, + -- } + + -- SQL + -- lspconfig.postgres_lsp.setup { force_setup = true } + lspconfig.sqls.setup { + on_attach = function(client) + -- Выключить форматирование + client.server_capabilities.documentFormattingProvider = false + end, + } + -- Nix lspconfig.nixd.setup {} @@ -199,15 +219,6 @@ return { lspconfig.gopls.setup {} lspconfig.templ.setup {} - -- SQL - -- lspconfig.postgres_lsp.setup {} - lspconfig.sqls.setup { - on_attach = function(client, bufnr) - -- Выключить форматирование - client.server_capabilities.documentFormattingProvider = false - end, - } - -- Frontend lspconfig.tailwindcss.setup {} lspconfig.ts_ls.setup {} diff --git a/nvim/lua/kickstart/plugins/telescope.lua b/nvim/lua/kickstart/plugins/telescope.lua index c6bf852..6acc98b 100644 --- a/nvim/lua/kickstart/plugins/telescope.lua +++ b/nvim/lua/kickstart/plugins/telescope.lua @@ -84,7 +84,7 @@ return { vim.keymap.set('n', 'sh', builtin.help_tags, { desc = '[S]earch [H]elp' }) vim.keymap.set('n', 'sk', builtin.keymaps, { desc = '[S]earch [K]eymaps' }) vim.keymap.set('n', 'sf', builtin.find_files, { desc = '[S]earch [F]iles' }) - vim.keymap.set('n', 'ss', builtin.builtin, { desc = '[S]earch [S]elect Telescope' }) + vim.keymap.set('n', 'sS', builtin.builtin, { desc = '[S]earch [S]elect Telescope' }) vim.keymap.set('n', 'sw', builtin.grep_string, { desc = '[S]earch current [W]ord' }) vim.keymap.set('n', 'sg', builtin.live_grep, { desc = '[S]earch by [G]rep' }) vim.keymap.set('n', 'sd', builtin.diagnostics, { desc = '[S]earch [D]iagnostics' }) diff --git a/nvim/lua/kickstart/plugins/themes.lua b/nvim/lua/kickstart/plugins/themes.lua index d54772c..486365a 100644 --- a/nvim/lua/kickstart/plugins/themes.lua +++ b/nvim/lua/kickstart/plugins/themes.lua @@ -95,6 +95,60 @@ return { -- Гандоны не дают выбрать тему нормально -- -- Приходится конфиг переписывать ради выбора расцветок -- ---------------------------------------------------------- + { + 'ellisonleao/gruvbox.nvim', + priority = 1000, + config = true, + -- opts = ... + init = function() + local colors = require('gruvbox').palette + colors.neutral_aqua = '#8bba7f' + colors.bright_red = '#f2594b' + colors.bright_green = '#a4ab43' + -- Default options: + require('gruvbox').setup { + terminal_colors = true, -- add neovim terminal colors + undercurl = true, -- underline errors + underline = true, -- underline links + bold = false, -- bold keywords + italic = { + strings = true, + emphasis = true, -- курсив выделения + comments = true, + operators = false, + folds = true, -- курсив для сворачиваемых блоков кода + }, + strikethrough = true, -- зачёркиваниe удалённых или устаревших элементов + invert_selection = false, + invert_signs = false, + invert_tabline = false, + invert_intend_guides = false, + inverse = true, -- invert background for search, diffs, statuslines and errors + contrast = '', -- can be "hard", "soft" or empty string + palette_overrides = {}, + overrides = { + LspReferenceText = { -- ссылки на элементы под курсором + bg = '#504945', + }, + LspReferenceWrite = { + bg = '#504945', + }, + LspReferenceRead = { + bg = '#504945', + }, + String = { + fg = colors.neutral_aqua, + }, + ['@keyword.import.go'] = { + fg = colors.bright_red, + }, + }, + dim_inactive = false, + transparent_mode = false, + } + vim.cmd.colorscheme 'gruvbox' + end, + }, { 'sainnhe/gruvbox-material', priority = 1000, @@ -105,11 +159,15 @@ return { vim.g.gruvbox_material_foreground = 'mix' -- 'grey', 'colored', 'highlighted' vim.g.gruvbox_material_diagnostic_virtual_text = 'colored' - vim.g.gruvbox_material_better_performance = 1 vim.g.gruvbox_material_diagnostic_line_highlight = 1 vim.g.gruvbox_material_diagnostic_text_highlight = 1 + + -- vim.g.gruvbox_material_inlay_hints_background = 'dimmed' + -- vim.g.gruvbox_material_better_performance = 1 + -- vim.g.gruvbox_material_spell_foreground = 'colored' + -- vim.g.gruvbox_material_enable_bold = 1 -- vim.g.gruvbox_material_enable_italic = true - vim.cmd.colorscheme 'gruvbox-material' + -- vim.cmd.colorscheme 'gruvbox-material' end, }, { @@ -147,4 +205,3 @@ return { end, }, } - diff --git a/nvim/lua/kickstart/plugins/treesitter.lua b/nvim/lua/kickstart/plugins/treesitter.lua index ef3464d..0c80789 100644 --- a/nvim/lua/kickstart/plugins/treesitter.lua +++ b/nvim/lua/kickstart/plugins/treesitter.lua @@ -3,6 +3,34 @@ return { { 'nvim-treesitter/nvim-treesitter', + dependencies = { + { + 'nvim-treesitter/nvim-treesitter-context', + config = function() + require('treesitter-context').setup { + enable = true, -- Enable this plugin (Can be enabled/disabled later via commands) + multiwindow = false, -- Enable multiwindow support. + max_lines = 0, -- How many lines the window should span. Values <= 0 mean no limit. + min_window_height = 0, -- Minimum editor window height to enable context. Values <= 0 mean no limit. + line_numbers = true, + multiline_threshold = 3, -- Maximum number of lines to show for a single context + trim_scope = 'outer', -- Which context lines to discard if `max_lines` is exceeded. Choices: 'inner', 'outer' + mode = 'cursor', -- Line used to calculate context. Choices: 'cursor', 'topline' + -- Separator between context and content. Should be a single character string, like '-'. + -- When separator is set, the context will only show up when there are at least 2 lines above cursorline. + separator = nil, + zindex = 20, -- The Z-index of the context window + on_attach = nil, -- (fun(buf: integer): boolean) return false to disable attaching + } + vim.keymap.set('n', 'gp', function() + require('treesitter-context').go_to_context(vim.v.count1) + end, { silent = true, desc = '[G]oto context ([P]arent)' }) + end, + }, + -- { + -- 'nvim-treesitter/nvim-treesitter-textobjects', + -- }, + }, build = ':TSUpdate', main = 'nvim-treesitter.configs', -- Sets main module to use for opts -- [[ Configure Treesitter ]] See `:help nvim-treesitter` @@ -34,6 +62,7 @@ return { 'toml', 'yaml', 'cmake', + 'printf', }, -- Autoinstall languages that are not installed auto_install = true, @@ -53,28 +82,4 @@ return { -- - Show your current context: https://github.com/nvim-treesitter/nvim-treesitter-context -- - Treesitter + textobjects: https://github.com/nvim-treesitter/nvim-treesitter-textobjects }, - { - 'nvim-treesitter/nvim-treesitter-context', - dependencies = { 'nvim-treesitter/nvim-treesitter' }, - config = function() - require('treesitter-context').setup { - enable = true, -- Enable this plugin (Can be enabled/disabled later via commands) - multiwindow = false, -- Enable multiwindow support. - max_lines = 0, -- How many lines the window should span. Values <= 0 mean no limit. - min_window_height = 0, -- Minimum editor window height to enable context. Values <= 0 mean no limit. - line_numbers = true, - multiline_threshold = 3, -- Maximum number of lines to show for a single context - trim_scope = 'outer', -- Which context lines to discard if `max_lines` is exceeded. Choices: 'inner', 'outer' - mode = 'cursor', -- Line used to calculate context. Choices: 'cursor', 'topline' - -- Separator between context and content. Should be a single character string, like '-'. - -- When separator is set, the context will only show up when there are at least 2 lines above cursorline. - separator = nil, - zindex = 20, -- The Z-index of the context window - on_attach = nil, -- (fun(buf: integer): boolean) return false to disable attaching - } - vim.keymap.set('n', 'gp', function() - require('treesitter-context').go_to_context(vim.v.count1) - end, { silent = true, desc = '[G]oto context ([P]arent)' }) - end, - }, } diff --git a/nvim/lua/kickstart/plugins/vim-sleuth.lua b/nvim/lua/kickstart/plugins/vim-sleuth.lua deleted file mode 100644 index d882bcd..0000000 --- a/nvim/lua/kickstart/plugins/vim-sleuth.lua +++ /dev/null @@ -1,5 +0,0 @@ --- NOTE: Plugins can be added with a link (or for a github repo: 'owner/repo' link). -return { - 'tpope/vim-sleuth', -- Detect expandtab and shiftwidth automatically -} - diff --git a/nvim/lua/kickstart/settings.lua b/nvim/lua/kickstart/settings.lua index 96736e0..a6c0fba 100644 --- a/nvim/lua/kickstart/settings.lua +++ b/nvim/lua/kickstart/settings.lua @@ -19,7 +19,9 @@ vim.opt.relativenumber = true -- Табуляция в 4 символа vim.opt.tabstop = 4 --- vim.opt.shiftwidth = 4 +vim.opt.shiftwidth = 4 +-- Юзать пробелы вместо табов +vim.opt.expandtab = true -- Enable mouse mode, can be useful for resizing splits for example! vim.opt.mouse = 'a'