neovim

Personal neovim configuration files
git clone git://gtms.dev/neovim
Log | Files | Refs

commit 1a31b6a161f7286267e456950b45b82edeb59c69
parent 9c1b0c7e5a87f0423ba73907d37028e92b67eb7d
Author: Tomas Nemec <owl@gtms.dev>
Date:   Thu,  9 May 2024 10:50:18 +0200

update

Diffstat:
Mafter/plugin/lsp.lua | 95++++++++++++++++++++++++++++++-------------------------------------------------
Mafter/plugin/telescope.lua | 114+++++++++++++++++++++++++++++++++++++------------------------------------------
Mftplugin/dart.lua | 1+
Minit.lua | 2++
Mlua/tms/ft/dart/package.lua | 6+++---
Mlua/tms/keymap.lua | 22+++++++++++-----------
Alua/tms/lsp/references.lua | 120+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mlua/tms/p/telescope.lua | 42+++++++-----------------------------------
Alua/tms/quickfix.lua | 37+++++++++++++++++++++++++++++++++++++
Mlua/tms/toggle.lua | 6++++--
Mplugin/diagnostic.lua | 52++++++++++++++++------------------------------------
Dplugin/quickfix.vim | 26--------------------------
Mplugin/snippet.lua | 6+++---
Mplugin/unimpaired.lua | 77++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------
14 files changed, 345 insertions(+), 261 deletions(-)

diff --git a/after/plugin/lsp.lua b/after/plugin/lsp.lua @@ -11,110 +11,87 @@ local function keymap(client, buf) -- client.server_capabilities.semanticTokensProvider = nil + local prefix = 'gl' + if client.supports_method('textDocument/definition') then vim.keymap.set('n', 'gd', vim.lsp.buf.definition, opt 'LSP Definition') - vim.keymap.set('n', 'crd', vim.lsp.buf.definition, opt 'LSP Definition') + vim.keymap.set('n', prefix .. 'd', vim.lsp.buf.definition, opt 'LSP Definition') end if client.supports_method('textDocument/typeDefinition') then - vim.keymap.set('n', 'crt', vim.lsp.buf.type_definition, opt 'LSP Type Definition') + vim.keymap.set('n', prefix .. 't', vim.lsp.buf.type_definition, opt 'LSP Type Definition') end if client.supports_method('callHierarchy/incomingCalls') then - vim.keymap.set('n', 'cri', vim.lsp.buf.incoming_calls, opt 'LSP Incoming calls') + vim.keymap.set('n', prefix .. 'i', vim.lsp.buf.incoming_calls, opt 'LSP Incoming calls') + vim.keymap.set('n', ']e', vim.lsp.buf.incoming_calls, opt 'LSP Incoming calls') end if client.supports_method('callHierarchy/outgoingCalls') then - vim.keymap.set('n', 'cro', vim.lsp.buf.outgoing_calls, opt 'LSP Outgoing calls') + vim.keymap.set('n', prefix .. 'o', vim.lsp.buf.outgoing_calls, opt 'LSP Outgoing calls') + vim.keymap.set('n', '[e', vim.lsp.buf.outgoing_calls, opt 'LSP Outgoing calls') end if client.supports_method('textDocument/implementation') then - vim.keymap.set('n', 'crm', vim.lsp.buf.implementation, opt 'LSP Implementation') - vim.keymap.set('i', '<c-w><c-m>', function() + vim.keymap.set('n', prefix .. 'm', vim.lsp.buf.implementation, opt 'LSP Implementation') + vim.keymap.set('i', '<c-r><c-m>', function() vim.cmd.split() vim.lsp.buf.implementation() - end, opt('LSP Implementation (Split)')) + end, opt 'LSP Implementation (Split)') end if client.supports_method('textDocument/signatureHelp') then - vim.keymap.set({ 'n', 'i' }, '<c-s>', vim.lsp.buf.signature_help, opt('LSP Signature Help')) + vim.keymap.set({ 'n', 'i' }, '<c-s>', vim.lsp.buf.signature_help, opt 'LSP Signature Help') end if client.supports_method('textDocument/references') then - vim.keymap.set('n', 'crf', function() - vim.lsp.buf.references({ includeDeclaration = false }) - end, opt('LSP References')) - - vim.keymap.set('n', '[I', function() - vim.lsp.buf.references({ includeDeclaration = false }, { - on_list = function(opts) - local curr_filename = vim.api.nvim_buf_get_name(opts.context.bufnr) - opts.items = vim.tbl_filter(function(item) - return item.filename == curr_filename - end, opts.items) - - if #opts.items == 0 then - vim.notify('No references in current file') - return - end - - opts.title = 'References (Current File)' - vim.fn.setloclist(0, {}, ' ', opts) - vim.api.nvim_command('botright lopen') - end - }) - end, opt('LSP References (Current File)')) - - vim.keymap.set('n', ']I', function() - vim.lsp.buf.references({ includeDeclaration = false }, { - on_list = function(opts) - local curr_filename = vim.api.nvim_buf_get_name(opts.context.bufnr) - local curr_lnum = opts.context.params.position.line - opts.items = vim.tbl_filter(function(item) - return item.filename == curr_filename and item.lnum > curr_lnum - end, opts.items) - - if #opts.items == 0 then - vim.notify('No references after current line') - return - end - - opts.title = 'References (After Current Line)' - vim.fn.setloclist(0, {}, ' ', opts) - vim.api.nvim_command('botright lopen') - end - }) - end, opt('LSP References (After Current Line)')) + local rhs = { + all = function() require 'tms.lsp.references'.all { includeDeclaration = false } end, + curr_file = function() + require 'tms.lsp.references'.all { includeDeclaration = false, loclist = true, curr_file = true } + end, + after_line = function() + require 'tms.lsp.references'.all { includeDeclaration = false, loclist = true, after_line = true } + end, + } + + vim.keymap.set('n', prefix .. 'f', rhs.all, opt 'LSP References') + vim.keymap.set('n', '[<c-i>', rhs.all, opt 'LSP References') + vim.keymap.set('n', '[I', rhs.curr_file, opt 'LSP References in Current File') + vim.keymap.set('n', ']I', rhs.after_line, opt 'LSP References Below') + vim.keymap.set('n', '[i', require 'tms.lsp.references'.prev, opt 'LSP Previous Reference') + vim.keymap.set('n', ']i', require 'tms.lsp.references'.next, opt 'LSP Next Reference') end if client.supports_method('textDocument/codeAction') then - vim.keymap.set({ 'n', 'v' }, 'cra', vim.lsp.buf.code_action, opt('LSP Code Actions')) + vim.keymap.set({ 'n', 'v' }, prefix .. 'a', vim.lsp.buf.code_action, opt 'LSP Code Actions') end if client.supports_method('textDocument/documentHighlight') then - vim.keymap.set('n', '<leader>k', vim.lsp.buf.document_highlight, opt('LSP Highlight')) + vim.keymap.set('n', '<leader>k', vim.lsp.buf.document_highlight, opt 'LSP Highlight') vim.api.nvim_create_autocmd('CursorMoved', { group = lsp_group, buffer = buf, callback = vim.lsp.buf.clear_references }) end if client.supports_method('textDocument/inlayHint') then - vim.keymap.set('n', 'crh', function() + vim.keymap.set('n', prefix .. 'h', function() vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled()) - end, opt('LSP Inlay hints')) + end, opt 'LSP Inlay hints') end if client.supports_method('textDocument/rename') then - vim.keymap.set('n', 'crn', vim.lsp.buf.rename, opt('LSP Rename')) + vim.keymap.set('n', 'cd', vim.lsp.buf.rename, opt 'LSP Rename (Change Definition)') + vim.keymap.set('n', prefix .. 'n', vim.lsp.buf.rename, opt 'LSP Rename') end if client.supports_method('typeHierarchy/supertypes') then - vim.keymap.set('n', 'crp', function() + vim.keymap.set('n', prefix .. 'p', function() vim.lsp.buf.typehierarchy('supertypes') end, opt 'LSP Supertypes (Parents)') end if client.supports_method('typeHierarchy/subtypes') then - vim.keymap.set('n', 'crc', function() + vim.keymap.set('n', prefix .. 'c', function() vim.lsp.buf.typehierarchy('subtypes') end, opt 'LSP Subtypes (Children)') end diff --git a/after/plugin/telescope.lua b/after/plugin/telescope.lua @@ -2,77 +2,69 @@ if not pcall(require, 'telescope') then return end -local telescope = require 'telescope' -local actions = require 'telescope.actions' +require 'telescope'.setup { + defaults = require 'telescope.themes'.get_dropdown({ + layout_config = { width = 120 } + }), + pickers = { + git_status = { + previewer = false, + } + } -telescope.setup { - defaults = { mappings = { i = { ['<esc>'] = actions.close, ['<c-y>'] = actions.select_default } } }, - extensions = { fzy_native = { override_generic_sorter = false, override_file_sorter = true } }, + -- defaults = { mappings = { i = { ['<esc>'] = actions.close, ['<c-y>'] = actions.select_default } } }, + -- extensions = { fzy_native = { override_generic_sorter = false, override_file_sorter = true } }, } -- extensions -pcall(telescope.load_extension, 'fzy_native') -pcall(telescope.load_extension, 'dap') -pcall(telescope.load_extension, 'zk') -pcall(telescope.load_extension, 'git_worktree') -pcall(telescope.load_extension, 'advanced_git_search') +-- pcall(telescope.load_extension, 'fzy_native') +-- pcall(telescope.load_extension, 'dap') +pcall(require('telescope').load_extension, 'zk') +pcall(require('telescope').load_extension, 'git_worktree') +pcall(require('telescope').load_extension, 'advanced_git_search') -local l = require 'tms.p.telescope'.L - -local function builtin(name, theme) - return function() - require 'telescope.builtin'[name](theme) - end -end - -vim.keymap.set('n', '<space>q', builtin('quickfix', l.dd_large()), { desc = 'Telescope Quickfix' }) -vim.keymap.set('n', '<space>k', builtin('keymaps', l.dd_large()), { desc = 'Telescope Keymaps' }) -vim.keymap.set('n', '<space>o', builtin('oldfiles'), { desc = 'Telescope Old Files' }) -vim.keymap.set('n', '<space>s', builtin('spell_suggest', l.dd()), { desc = 'Telescope Spell Suggest' }) -vim.keymap.set('n', '<space>t', builtin('treesitter'), { desc = 'Telescope Treesitter' }) -vim.keymap.set('n', '<space>c', builtin('git_status', l.dd_large()), { desc = 'Telescope Git Status' }) -vim.keymap.set('n', '<space>e', builtin('grep_string'), { desc = 'Telescope Grep String' }) -vim.keymap.set('n', '<space>l', function() - require 'telescope.builtin'['current_buffer_fuzzy_find'](l.dd_large_noprev()) -end, { desc = 'Telescope Buffer Lines' }) -vim.keymap.set('n', '<space>b', builtin('buffers', l.dd_large()), { desc = 'Telescope Buffers' }) -vim.keymap.set('n', '<space>h', builtin('help_tags'), { desc = 'Telescope Help Tags' }) -vim.keymap.set('n', '<space>d', builtin('diagnostics', l.dd_large()), { desc = 'Telescope Diagnostics' }) -vim.keymap.set('n', '<space>f', builtin('find_files', l.dd_large_noprev()), { desc = 'Telescope Find Files' }) -vim.keymap.set('n', '<space>F', function() - require 'telescope.builtin'.find_files(l.dd_large_noprev({ no_ignore = true, hidden = true })) -end, { desc = 'Telescope Find All Files' }) - -vim.keymap.set('n', '<space>P', function() - require 'telescope.builtin'.reloader(l.dd_noprev()) -end, { desc = 'Telescope Reloader' }) - -vim.keymap.set('n', '<space>wo', function() - require 'telescope'.extensions.git_worktree.git_worktrees() -end, { desc = 'Telescope Git Worktree List' }) - -vim.keymap.set('n', '<space>wi', function() - require 'telescope'.extensions.git_worktree.create_git_worktree() -end, { desc = 'Telescope Git Worktree Create' }) +local rhs = { + find_all_files = function() + require 'telescope.builtin'.find_files { no_ignore = true, hidden = true } + end, + find_dotfiles = function() + require 'telescope.builtin'.find_files({ + prompt_title = 'dotfiles', + cwd = '~/.config/nvim', + previewer = false, + }) + end, +} -vim.keymap.set('n', '<space>n', function() - require 'telescope.builtin'.find_files(require 'telescope.themes'.get_dropdown { - prompt_title = 'dotfiles', - cwd = '~/.config/nvim', - previewer = false, - }) -end, { desc = 'Telescope Dotfiles' }) +vim.keymap.set('n', '<space>q', require 'telescope.builtin'.quickfix, { desc = 'Telescope Quickfix' }) +vim.keymap.set('n', '<space>Q', require 'telescope.builtin'.loclist, { desc = 'Telescope Loclist' }) +vim.keymap.set('n', '<space>k', require 'telescope.builtin'.keymaps, { desc = 'Telescope Keymaps' }) +vim.keymap.set('n', '<space>o', require 'telescope.builtin'.oldfiles, { desc = 'Telescope Old Files' }) +vim.keymap.set('n', '<space>s', require 'telescope.builtin'.spell_suggest, { desc = 'Telescope Spell Suggest' }) +vim.keymap.set('n', '<space>t', require 'telescope.builtin'.treesitter, { desc = 'Telescope Treesitter' }) +vim.keymap.set('n', '<space>c', require 'telescope.builtin'.git_status, { desc = 'Telescope Git Status' }) +vim.keymap.set('n', '<space>e', require 'telescope.builtin'.grep_string, { desc = 'Telescope Grep String' }) +vim.keymap.set('n', '<space>l', require 'telescope.builtin'.current_buffer_fuzzy_find, + { desc = 'Telescope Buffer Lines' }) +vim.keymap.set('n', '<space>b', require 'telescope.builtin'.buffers, { desc = 'Telescope Buffers' }) +vim.keymap.set('n', '<space>h', require 'telescope.builtin'.help_tags, { desc = 'Telescope Help Tags' }) +vim.keymap.set('n', '<space>d', require 'telescope.builtin'.diagnostics, { desc = 'Telescope Diagnostics' }) +vim.keymap.set('n', '<space>f', require 'telescope.builtin'.find_files, { desc = 'Telescope Find Files' }) +vim.keymap.set('n', '<space>F', rhs.find_all_files, { desc = 'Telescope Find All Files' }) +vim.keymap.set('n', '<space>P', require 'telescope.builtin'.reloader, { desc = 'Telescope Reloader' }) +vim.keymap.set('n', '<space>wo', require 'telescope'.extensions.git_worktree.git_worktrees, + { desc = 'Telescope Git Worktree List' }) +vim.keymap.set('n', '<space>wi', require 'telescope'.extensions.git_worktree.create_git_worktree, + { desc = 'Telescope Git Worktree Create' }) +vim.keymap.set('n', '<space>n', rhs.find_dotfiles, { desc = 'Telescope Dotfiles' }) local group = vim.api.nvim_create_augroup('user-telescope', {}) vim.api.nvim_create_autocmd('LspAttach', { group = group, callback = function() - vim.keymap.set('n', '<space>m', function() - require 'telescope.builtin'.lsp_document_symbols(l.dd_large()) - end, { desc = 'Telescope Lsp Document Symbols' }) - - vim.keymap.set('n', '<space>M', function() - require 'telescope.builtin'.lsp_dynamic_workspace_symbols() - end, { desc = 'Telescope LSP Dynamic Workspace Symbols' }) + vim.keymap.set('n', '<space>m', require 'telescope.builtin'.lsp_document_symbols, + { desc = 'Telescope Lsp Document Symbols' }) + vim.keymap.set('n', '<space>M', require 'telescope.builtin'.lsp_dynamic_workspace_symbols, + { desc = 'Telescope LSP Dynamic Workspace Symbols' }) end, }) diff --git a/ftplugin/dart.lua b/ftplugin/dart.lua @@ -3,6 +3,7 @@ vim.opt_local.commentstring = '//%s' vim.opt_local.includeexpr = [[v:lua.require('tms.ft.dart.package').package_path(v:fname)]] vim.opt_local.isfname:append { ':' } vim.opt_local.iskeyword:append { '$' } +vim.opt_local.include = [[^import\s*]] vim.opt_local.textwidth = 80 vim.opt_local.shiftwidth = 2 vim.opt_local.formatoptions:remove('t') diff --git a/init.lua b/init.lua @@ -6,3 +6,5 @@ vim.cmd.colorscheme('tms') require('tms.options') require('tms.keymap') require('tms.autocmd') + +vim.g.type_fmt_loaded = true diff --git a/lua/tms/ft/dart/package.lua b/lua/tms/ft/dart/package.lua @@ -73,14 +73,14 @@ function M.package_name() return nil end return name - end function M.package_path(uri) if not string.find(uri, 'package:') then return nil end - local package_name = string.match(uri, '^package:(.+)/.*') + + local package_name = string.match(uri, '^package:([^/.]+)/.*') if not package_name then return nil end @@ -92,7 +92,7 @@ function M.package_path(uri) local package_paths = packages[package_name] if not package_paths then - vim.notify('no package mapping for ' .. package_name, vim.log.levels.ERROR) + -- vim.print('no package mapping for ' .. package_name) return nil end local package_lib = package_paths.lib diff --git a/lua/tms/keymap.lua b/lua/tms/keymap.lua @@ -28,19 +28,19 @@ vim.keymap.set('t', '<a-r>', '<c-\\><c-n>', {}) vim.keymap.set('n', '<c-w><c-v>', '<cmd>vnew<cr>', {}) vim.keymap.set('n', '<c-w><c-s>', '<cmd>new<cr>', {}) -- line movement -vim.keymap.set('n', '<c-j>', ':m .+1<cr>==', {}) -vim.keymap.set('n', '<c-k>', ':m .-2<cr>==', {}) -vim.keymap.set('i', '<c-j>', '<esc>:m .+1<cr>==', {}) -vim.keymap.set('i', '<c-k>', '<esc>:m .-2<cr>==', {}) -vim.keymap.set('v', '<c-j>', ':m \'>+1<cr>gv=gv', {}) -vim.keymap.set('v', '<c-k>', ':m \'<-2<cr>gv=gv', {}) +-- vim.keymap.set('n', '<c-j>', ':m .+1<cr>==', {}) +-- vim.keymap.set('n', '<c-k>', ':m .-2<cr>==', {}) +-- vim.keymap.set('i', '<c-j>', '<esc>:m .+1<cr>==', {}) +-- vim.keymap.set('i', '<c-k>', '<esc>:m .-2<cr>==', {}) +-- vim.keymap.set('v', '<c-j>', ':m \'>+1<cr>gv=gv', {}) +-- vim.keymap.set('v', '<c-k>', ':m \'<-2<cr>gv=gv', {}) -- quickfix/loclist -vim.keymap.set('n', '<leader>q', '<cmd>call ToggleList("Quickfix List", "c")<cr>', {}) -vim.keymap.set('n', '<leader>Q', '<cmd>cexpr []|cclose<cr>', {}) -vim.keymap.set('n', '<leader>l', '<cmd>call ToggleList("Location List", "l")<cr>', {}) -vim.keymap.set('n', '<leader>L', '<cmd>lexpr []|lclose<cr>', {}) +vim.keymap.set('n', '<leader>q', require 'tms.quickfix'.toggle_qflist, { desc = "Toggel Quickfix list" }) +vim.keymap.set('n', '<leader>Q', require 'tms.quickfix'.clear_qflist, { desc = "Clear Quickfix List" }) +vim.keymap.set('n', '<leader>l', require 'tms.quickfix'.toggle_loclist, { desc = "Toggle Location List" }) +vim.keymap.set('n', '<leader>L', require 'tms.quickfix'.clear_loclist, { desc = "Clear Location list" }) -- file operation -vim.keymap.set('n', 'cp', require'tms.p.rename_file'.rename_file, { desc = 'Rename File (Change Path)' }) +vim.keymap.set('n', 'cp', require 'tms.p.rename_file'.rename_file, { desc = 'Rename File (Change Path)' }) -- remap double usage vim.keymap.set('n', 'y.', 'yy', {}) vim.keymap.set('n', 'z.', 'mmz.`m', {}) diff --git a/lua/tms/lsp/references.lua b/lua/tms/lsp/references.lua @@ -0,0 +1,120 @@ +local M = {} + +local function set_list(opts) + opts = opts or {} + + return function(o) + if opts.loclist then + vim.fn.setloclist(0, {}, ' ', { title = o.title, items = o.items }) + vim.api.nvim_command('botright lopen') + else + vim.fn.setqflist({}, ' ', { title = o.title, items = o.items }) + vim.api.nvim_command('botright copen') + end + end +end + +local function after_line_list(opts) + opts = opts or {} + + return function(o) + local curr_filename = vim.api.nvim_buf_get_name(o.context.bufnr) + local curr_lnum = vim.fn.getcurpos()[2] + o.items = vim.tbl_filter(function(item) + return item.filename == curr_filename and item.lnum > curr_lnum + end, o.items) + + if #o.items == 0 then + vim.notify('No references after current line') + return + end + + o.title = 'References (After Current Line)' + set_list(opts)(o) + end +end + +local function curr_file_list(opts) + opts = opts or {} + + return function(o) + local curr_filename = vim.api.nvim_buf_get_name(o.context.bufnr) + o.items = vim.tbl_filter(function(item) + return item.filename == curr_filename + end, o.items) + + if #o.items == 0 then + vim.notify('No references in current file') + return + end + + o.title = 'References (Current File)' + set_list(opts)(o) + end +end + +local function prev(opts) + opts = opts or {} + return function(o) + local curr_filename = vim.api.nvim_buf_get_name(o.context.bufnr) + local curr_lnum = vim.fn.getcurpos()[2] + + o.items = vim.tbl_filter(function(item) + return item.filename == curr_filename and item.lnum < curr_lnum + end, o.items) + + if #o.items == 0 then + vim.notify('No Previous References') + return + end + + local client = assert(vim.lsp.get_client_by_id(o.context.client_id)) + vim.lsp.util.jump_to_location(o.items[#o.items].user_data, client.offset_encoding) + end +end + +local function next(opts) + opts = opts or {} + return function(o) + local curr_filename = vim.api.nvim_buf_get_name(o.context.bufnr) + local curr_lnum = vim.fn.getcurpos()[2] + + vim.print(curr_lnum) + vim.print(o) + o.items = vim.tbl_filter(function(item) + return item.filename == curr_filename and item.lnum > curr_lnum + end, o.items) + vim.print(o) + + if #o.items == 0 then + vim.notify('No Following References') + return + end + + local client = assert(vim.lsp.get_client_by_id(o.context.client_id)) + vim.lsp.util.jump_to_location(o.items[1].user_data, client.offset_encoding) + end +end + + +function M.prev(opts) + vim.lsp.buf.references(opts, { on_list = prev(opts) }) +end + +function M.next(opts) + vim.lsp.buf.references(opts, { on_list = next(opts) }) +end + +function M.all(opts) + opts = opts or {} + + if opts.curr_file then + vim.lsp.buf.references(opts, { on_list = curr_file_list(opts) }) + elseif opts.after_line then + vim.lsp.buf.references(opts, { on_list = after_line_list(opts) }) + else + vim.lsp.buf.references(opts, { on_list = set_list(opts) }) + end +end + +return M diff --git a/lua/tms/p/telescope.lua b/lua/tms/p/telescope.lua @@ -1,41 +1,13 @@ -local themes = require('telescope.themes') -local actions = require('telescope.actions') -local action_set = require('telescope.actions.set') -local action_state = require('telescope.actions.state') -local pickers = require('telescope.pickers') -local finders = require('telescope.finders') -local sorters = require('telescope.sorters') - local M = {} -local L = {} -M.L = L - -function L.dd(opts) - opts = opts or {} - return themes.get_dropdown(opts) -end - -function L.dd_noprev(opts) - opts = opts or {} - opts.previewer = false - return themes.get_dropdown(opts) -end - -function L.dd_large(opts) - opts = opts or {} - opts.layout_config = { width = 120 } - return themes.get_dropdown(opts) -end - -function L.dd_large_noprev(opts) - opts = opts or {} - opts.previewer = false - opts.layout_config = { width = 120 } - return themes.get_dropdown(opts) -end - function M.mail_address() + local actions = require('telescope.actions') + local action_set = require('telescope.actions.set') + local action_state = require('telescope.actions.state') + local pickers = require('telescope.pickers') + local finders = require('telescope.finders') + local sorters = require('telescope.sorters') + pickers.new { results_title = 'Adresses', finder = finders.new_oneshot_job({ 'mates', 'email-query' }), diff --git a/lua/tms/quickfix.lua b/lua/tms/quickfix.lua @@ -0,0 +1,37 @@ +local M = {} + +function M.clear_loclist() + vim.fn.setloclist(0, {}, 'r') +end + +function M.clear_qflist() + vim.fn.setqflist({}, 'r') +end + +function M.toggle_loclist() + local wins = vim.fn.getwininfo() + local qf_open = vim.tbl_contains(wins, function(win) + return win.loclist == 1 + end, { predicate = true }) + + if qf_open then + vim.cmd.lclose() + else + vim.cmd [[silent! lwindow]] + end +end + +function M.toggle_qflist() + local wins = vim.fn.getwininfo() + local qf_open = vim.tbl_contains(wins, function(win) + return win.quickfix == 1 + end, { predicate = true }) + + if qf_open then + vim.cmd.cclose() + else + vim.cmd [[botright cwindow]] + end +end + +return M diff --git a/lua/tms/toggle.lua b/lua/tms/toggle.lua @@ -1,7 +1,9 @@ local M = {} +local keymap_prefix = 'yo'; + function M.option(letter, option, mode) - vim.keymap.set('n', 'yo' .. letter, function() + vim.keymap.set('n', keymap_prefix .. letter, function() local scope if mode == 'local' then scope = vim.opt_local @@ -25,7 +27,7 @@ function M.option(letter, option, mode) end function M.fn(letter, fn, desc) - vim.keymap.set('n', 'yo' .. letter, function() + vim.keymap.set('n', keymap_prefix .. letter, function() fn() end, { desc = 'Toggle ' .. desc }) end diff --git a/plugin/diagnostic.lua b/plugin/diagnostic.lua @@ -1,38 +1,18 @@ -vim.diagnostic.config({ virtual_text = false, underline = false, float = { border = 'single' }, severity_sort = true }) +vim.diagnostic.config({ + virtual_text = false, + underline = false, + float = { border = 'single' }, + severity_sort = true +}) --- local d = { --- next = function() --- vim.diagnostic.goto_next({ float = false }) --- end, --- prev = function() --- vim.diagnostic.goto_prev({ float = false }) --- end, --- open = function() --- vim.diagnostic.open_float() --- end, --- open_cursor = function() --- vim.diagnostic.open_float({ scope = 'cursor' }) --- end, --- ll = function() --- vim.diagnostic.setloclist() --- end, --- ql = function() --- vim.diagnostic.setqflist() --- end, --- ql_error = function() --- vim.diagnostic.setqflist({ severity = vim.diagnostic.severity.ERROR }) --- end, --- } +local rhs = { + local_errors = function() vim.diagnostic.setloclist { severity = vim.diagnostic.severity.ERROR } end, + all_errors = function() vim.diagnostic.setqflist { severity = vim.diagnostic.severity.ERROR } end, +} --- local o = function(desc) --- return { desc = desc, silent = true } --- end - --- vim.keymap.set('n', 'gww', d.open, o('Diagnostic Open for Line')) --- vim.keymap.set('n', 'gw.', d.open, o('Diagnostic Open for Line')) --- vim.keymap.set('n', 'gwc', d.open_cursor, o('Diagnostic Open for Cursor')) --- vim.keymap.set('n', 'gwl', d.ll, o('Diagnostic to Location List')) --- vim.keymap.set('n', 'gwq', d.ql_error, o('Diagnostic of Error to Quickfix List')) --- vim.keymap.set('n', 'gwQ', d.ql, o('Diagnostic to Quickfix List')) --- vim.keymap.set('n', '<c-l><c-d>', d.next, o('Diagnostic Next')) --- vim.keymap.set('n', '<c-h><c-d>', d.prev, o('Diagnostic Previous')) +vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = "Previous Diagnostic" }) +vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = "Next Diagnostic" }) +vim.keymap.set('n', '[<c-d>', vim.diagnostic.setqflist, { desc = "All Diagnostic" }) +vim.keymap.set('n', '[D', rhs.all_errors, { desc = "All Errors" }) +vim.keymap.set('n', ']<c-d>', vim.diagnostic.setloclist, { desc = "Local Diagnostic" }) +vim.keymap.set('n', ']D', rhs.local_errors, { desc = "Local Errors" }) diff --git a/plugin/quickfix.vim b/plugin/quickfix.vim @@ -1,26 +0,0 @@ -function! GetBufferList() - redir =>buflist - silent! ls! - redir END - return buflist -endfunction - -function! ToggleList(bufname, pfx) - let buflist = GetBufferList() - for bufnum in map(filter(split(buflist, '\n'), 'v:val =~ "'.a:bufname.'"'), 'str2nr(matchstr(v:val, "\\d\\+"))') - if bufwinnr(bufnum) != -1 - exec(a:pfx.'close') - return - endif - endfor - if a:pfx == 'l' && len(getloclist(0)) == 0 - echohl ErrorMsg - echo "Location List is Empty." - return - endif - let winnr = winnr() - exec(a:pfx.'open') - if winnr() != winnr - wincmd p - endif -endfunction diff --git a/plugin/snippet.lua b/plugin/snippet.lua @@ -1,17 +1,17 @@ vim.keymap.set({ 'i', 's' }, '<c-l>', function() - if vim.snippet.jumpable(1) then + if vim.snippet.active() then vim.snippet.jump(1) end end, { desc = 'Snippet Jump Forward' }) vim.keymap.set({ 'i', 's' }, '<c-h>', function() - if vim.snippet.jumpable(-1) then + if vim.snippet.active() then vim.snippet.jump(-1) end end, { desc = 'Snippet Jump Forward' }) vim.keymap.set({ 'i', 's' }, '<c-e>', function() if vim.snippet.active() then - vim.snippet.exit() + vim.snippet.stop() end end, { desc = 'Snippet Exit' }) diff --git a/plugin/unimpaired.lua b/plugin/unimpaired.lua @@ -1,28 +1,55 @@ -- remap ] and [ -vim.keymap.set('n', '<c-l><c-q>', '<cmd>cnext<cr>') -vim.keymap.set('n', '<c-h><c-q>', '<cmd>cprev<cr>') -vim.keymap.set('n', '<c-l>q', '<cmd>clast<cr>') -vim.keymap.set('n', '<c-h>q', '<cmd>cfirst<cr>') -vim.keymap.set('n', '<c-l><c-a>', '<cmd>next<cr>') -vim.keymap.set('n', '<c-h><c-a>', '<cmd>prev<cr>') -vim.keymap.set('n', '<c-l>a', '<cmd>last<cr>') -vim.keymap.set('n', '<c-h>a', '<cmd>first<cr>') -vim.keymap.set('n', '<c-l><c-b>', '<cmd>bnext<cr>') -vim.keymap.set('n', '<c-h><c-b>', '<cmd>bprev<cr>') -vim.keymap.set('n', '<c-l>b', '<cmd>blast<cr>') -vim.keymap.set('n', '<c-h>b', '<cmd>bfirst<cr>') -vim.keymap.set('n', '<c-l><c-l>', '<cmd>lnext<cr>') -vim.keymap.set('n', '<c-h><c-l>', '<cmd>lprev<cr>') -vim.keymap.set('n', '<c-l>l', '<cmd>llast<cr>') -vim.keymap.set('n', '<c-h>l', '<cmd>lfirst<cr>') -vim.keymap.set('n', '<c-l><c-t>', '<cmd>tnext<cr>') -vim.keymap.set('n', '<c-h><c-t>', '<cmd>tprev<cr>') -vim.keymap.set('n', '<c-l>t', '<cmd>tlast<cr>') -vim.keymap.set('n', '<c-h>t', '<cmd>tfirst<cr>') -vim.keymap.set('n', '<c-l><c-s>', ']s') -vim.keymap.set('n', '<c-h><c-s>', '[s') -vim.keymap.set('n', '<c-l>s', ']S') -vim.keymap.set('n', '<c-h>s', '[S') +-- vim.keymap.set('n', '<c-l><c-q>', '<cmd>cnext<cr>') +-- vim.keymap.set('n', '<c-h><c-q>', '<cmd>cprev<cr>') +-- vim.keymap.set('n', '<c-l>q', '<cmd>clast<cr>') +-- vim.keymap.set('n', '<c-h>q', '<cmd>cfirst<cr>') +-- vim.keymap.set('n', '<c-l><c-a>', '<cmd>next<cr>') +-- vim.keymap.set('n', '<c-h><c-a>', '<cmd>prev<cr>') +-- vim.keymap.set('n', '<c-l>a', '<cmd>last<cr>') +-- vim.keymap.set('n', '<c-h>a', '<cmd>first<cr>') +-- vim.keymap.set('n', '<c-l><c-b>', '<cmd>bnext<cr>') +-- vim.keymap.set('n', '<c-h><c-b>', '<cmd>bprev<cr>') +-- vim.keymap.set('n', '<c-l>b', '<cmd>blast<cr>') +-- vim.keymap.set('n', '<c-h>b', '<cmd>bfirst<cr>') +-- vim.keymap.set('n', '<c-l><c-l>', '<cmd>lnext<cr>') +-- vim.keymap.set('n', '<c-h><c-l>', '<cmd>lprev<cr>') +-- vim.keymap.set('n', '<c-l>l', '<cmd>llast<cr>') +-- vim.keymap.set('n', '<c-h>l', '<cmd>lfirst<cr>') +-- vim.keymap.set('n', '<c-l><c-t>', '<cmd>tnext<cr>') +-- vim.keymap.set('n', '<c-h><c-t>', '<cmd>tprev<cr>') +-- vim.keymap.set('n', '<c-l>t', '<cmd>tlast<cr>') +-- vim.keymap.set('n', '<c-h>t', '<cmd>tfirst<cr>') +-- vim.keymap.set('n', '<c-l><c-s>', ']s') +-- vim.keymap.set('n', '<c-h><c-s>', '[s') +-- vim.keymap.set('n', '<c-l>s', ']S') +-- vim.keymap.set('n', '<c-h>s', '[S') + +-- vim.keymap.set('n', ']q', '<cmd>cnext<cr>') +-- vim.keymap.set('n', '[q', '<cmd>cprev<cr>') +-- vim.keymap.set('n', ']q', '<cmd>cnfile<cr>') +-- vim.keymap.set('n', '[q', '<cmd>cpfile<cr>') +-- vim.keymap.set('n', ']Q', '<cmd>clast<cr>') +-- vim.keymap.set('n', '[Q', '<cmd>cfirst<cr>') +-- vim.keymap.set('n', ']a', '<cmd>next<cr>') +-- vim.keymap.set('n', '[a', '<cmd>prev<cr>') +-- vim.keymap.set('n', ']A', '<cmd>last<cr>') +-- vim.keymap.set('n', '[A', '<cmd>first<cr>') +-- vim.keymap.set('n', ']b', '<cmd>bnext<cr>') +-- vim.keymap.set('n', '[b', '<cmd>bprev<cr>') +-- vim.keymap.set('n', ']B', '<cmd>blast<cr>') +-- vim.keymap.set('n', '[B', '<cmd>bfirst<cr>') +-- vim.keymap.set('n', ']l', '<cmd>lnext<cr>') +-- vim.keymap.set('n', '[l', '<cmd>lprev<cr>') +-- vim.keymap.set('n', ']L', '<cmd>llast<cr>') +-- vim.keymap.set('n', '[L', '<cmd>lfirst<cr>') +-- vim.keymap.set('n', ']t', '<cmd>tnext<cr>') +-- vim.keymap.set('n', '[t', '<cmd>tprev<cr>') +-- vim.keymap.set('n', ']T', '<cmd>tlast<cr>') +-- vim.keymap.set('n', '[T', '<cmd>tfirst<cr>') +-- vim.keymap.set('n', ']<c-s>', ']s') +-- vim.keymap.set('n', '[<c-s>', '[s') +-- vim.keymap.set('n', ']s', ']S') +-- vim.keymap.set('n', '[s', '[S') local toggle = require('tms.toggle') toggle.option('c', 'cursorline', 'local') @@ -33,5 +60,5 @@ toggle.option('l', 'list', 'local') toggle.option('n', 'number', 'local') toggle.option('r', 'relativenumber', 'local') toggle.option('s', 'spell', 'local') -toggle.option('w', 'wrap', 'local') +-- toggle.option('w', 'wrap', 'local') toggle.option('d', 'cmdheight', 'global')