Compare commits

..

32 Commits

Author SHA1 Message Date
de0e52f0db Add WezTerm multiplex support to navigation bindings 2025-01-12 20:21:35 +00:00
e929956a8c Add markdown table mode plugin 2024-12-20 22:44:55 +00:00
c895484b75 Fix comment alignment 2024-12-07 16:36:16 +00:00
2814270762 Add C/C++ include guard snippet 'once' 2024-12-04 14:54:59 +00:00
dc78a25253 Add :DiagnosticToggle command to quickly (dis,en)able diagnositcs 2024-11-22 14:20:59 +00:00
a13d97f3ff Switch to ruff from deprecated ruff_lsp 2024-11-08 22:08:52 +00:00
33f3e8e920 Refactor TODO highlight group overrides 2024-10-04 16:49:38 +01:00
cd5cd3ba69 Update comments in commands.lua 2024-09-21 10:32:18 +01:00
7963c56fd9 Add :Tac command to replace :!tac & be cross-platform 2024-09-21 10:26:46 +01:00
55f5da7db7 Make Powershell script TODO's not highlighted 2024-09-18 10:22:40 +01:00
0434fc3ac2 Don't use compdb on Windows since its borked 2024-09-18 10:22:22 +01:00
Kenneth Benzie (Benie)
2cd7d34375 Actually fix restarting the LSP in :BuildDir job callback 2024-08-06 17:29:36 +01:00
d1f83a05b9 Use LspStop and LspStart instead of LspRestart 2024-07-19 20:58:27 +01:00
8b4258408e Add :CheckboxToggle and mapping 2024-07-11 20:09:43 +01:00
8a5f4a3063 Switch to lazydev from the archived neodev 2024-07-11 19:50:31 +01:00
Kenneth Benzie (Benie)
aa7da3dfe2 Don't be clever with number/relativenumber in terminals 2024-07-08 14:12:14 +01:00
68e8635ae1 Switch back to upstream cmp-git 2024-07-02 13:15:26 +01:00
Kenneth Benzie (Benie)
6217dd7f54 Don't map 0 to #if 0 in normal mode 2024-06-11 12:34:56 +01:00
2bae0d50d6 Switch to nvim-impairative for pairwise mappings 2024-06-01 15:07:06 +01:00
59d3ea0978 Make cpp for snippet dynamic 2024-06-01 10:30:52 +01:00
0410dfc23d Switch to mini.comment from comment.nvim
Even though v0.10.0 introduced builtin support for `gc{motion}` to
toggle comments it does not support ignoring blank lines. Also switch to
using mini.comment as its the same author as the builtin support.
2024-05-28 23:28:49 +01:00
0d1983e8bb Fix weirdness in gopls completions 2024-05-25 23:37:57 +01:00
c3fe8e033a Remove stray print in :Rg command 2024-05-25 23:32:14 +01:00
0f4e759266 Add main Go snippet 2024-05-25 23:11:27 +01:00
b146971918 Change document symbols mapping 2024-05-25 13:17:54 +01:00
a365bcb6b5 Don't repeat yourself in custom lspconfigs 2024-05-25 13:14:05 +01:00
6affd78df7 Cleanup nvim-cmp config callback 2024-05-25 13:13:35 +01:00
fcd5cfbd54 Extend :Rg to support visual select mode
Also move away from using the telescope builtin grep for word under
cursor mapping by extending the `:Rg` command to work in the following
circumstances:

* `:Rg text to search for`
* `:Rg` word under cursor
* `'<,'>Rg` visual selection
2024-05-25 11:03:06 +01:00
1996e631a3 Add :PreProcIfWrap command and C/C++ mappings
Quickly wrap a line or range in `#if 0`/`#endif` to quickly disable
compilation of sections of code.
2024-05-25 11:02:57 +01:00
0602390a2d Add telescope extension to list luasnip snippets 2024-05-25 10:22:35 +01:00
b0cfb31645 Add func snippet for go 2024-05-24 23:09:47 +01:00
Kenneth Benzie (Benie)
aba1664d09 Cleanup unused arg in statusline implementation 2024-05-24 16:04:23 +01:00
22 changed files with 419 additions and 203 deletions

2
after/ftplugin/c.lua Normal file
View File

@@ -0,0 +1,2 @@
local opts = { buffer = true, remap = false, silent = true }
vim.keymap.set('v', '0', ':PreProcIfWrap<CR>', opts)

View File

@@ -1,2 +1,6 @@
vim.opt.commentstring = '//%s'
vim.opt.matchpairs:append('<:>')
local opts = { buffer = true, remap = false, silent = true }
-- vim.keymap.set('n', '0', ':PreProcIfWrap<CR>', opts)
vim.keymap.set('v', '0', ':PreProcIfWrap<CR>', opts)

View File

@@ -32,7 +32,13 @@ local kanagawa = {
vim.cmd.highlight('WinSeparator', 'guifg=' .. dragon.ui.bg_m3, 'guibg=' .. dragon.ui.bg_m3)
vim.cmd.highlight('MsgSeparator', 'guifg=' .. dragon.ui.bg_m3, 'guibg=' .. dragon.ui.bg_m3)
vim.cmd.highligh('TreesitterContext', 'guibg=' .. dragon.ui.bg_gutter)
vim.cmd.highlight('link zshTodo Comment')
-- Don't lighlight TODO specially in comments
for _, todo_group in pairs({
'zshTodo', 'ps1CommentTodo',
}) do
vim.cmd.highlight('link ' .. todo_group .. ' Comment')
end
end
}

View File

@@ -1,10 +0,0 @@
return {
-- TODO: v0.10.0 Added built-in |commenting| support.
'terrortylor/nvim-comment',
config = function()
require('nvim_comment').setup({
-- should comment out empty or whitespace only lines
comment_empty = false,
})
end
}

View File

@@ -26,7 +26,7 @@ if vim.fn.executable('pip') == 1 then
local ensure_install_from_pip = {
'cmake', -- CMake
'esbonio', -- Sphinx
'ruff_lsp', -- Python
'ruff', -- Python
}
for _, package in ipairs(ensure_install_from_pip) do
table.insert(ensure_installed, package)
@@ -50,11 +50,11 @@ return {
'saadparwaiz1/cmp_luasnip', -- Source for LuaSnip snippets
'hrsh7th/cmp-buffer', -- Source for buffer words
'hrsh7th/cmp-path', -- Source for filesystem paths
'kbenzie/cmp-git', -- Source for Git/GitHub/GitLab
'petertriho/cmp-git', -- Source for Git/GitHub/GitLab
'hrsh7th/nvim-cmp', -- Completion engine combines and uses the above
-- Lua vim module support in lua language server
'folke/neodev.nvim',
{ 'folke/lazydev.nvim', ft = 'lua', opts = {} },
-- Expose clangd extensions
'p00f/clangd_extensions.nvim',
@@ -72,57 +72,48 @@ return {
},
config = function()
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities = vim.tbl_deep_extend(
'force', capabilities, require('cmp_nvim_lsp').default_capabilities())
local lspconfig_default_opts = {
-- Broadcast full client capabilities to language servers
capabilities = vim.tbl_deep_extend(
'force', vim.lsp.protocol.make_client_capabilities(),
require('cmp_nvim_lsp').default_capabilities()),
}
local lspconfig_custom_opts = {
clangd = {
cmd = { 'clangd', '--completion-style=detailed' },
},
lua_ls = {
settings = {
Lua = {
diagnostics = {
disable = { 'missing-fields', },
globals = { 'vim', },
},
},
},
},
pyright = {
settings = {
pyright = {
disableOrganizeImports = true,
},
},
},
}
require('mason').setup()
require('mason-lspconfig').setup({
automatic_installation = false,
ensure_installed = ensure_installed,
handlers = {
-- Default handler, sets up everything unless a custom language server
-- setup handler is defined below
function(server_name)
require('lspconfig')[server_name].setup({
capabilities = capabilities,
})
local opts = vim.tbl_deep_extend("force",
lspconfig_default_opts, lspconfig_custom_opts[server_name] or {})
require('lspconfig')[server_name].setup(opts)
end,
['clangd'] = function()
require('lspconfig').clangd.setup({
capabilities = capabilities,
cmd = { 'clangd', '--completion-style=detailed' }
})
end,
['lua_ls'] = function()
require('neodev').setup()
require('lspconfig').lua_ls.setup({
capabilities = capabilities,
settings = {
Lua = {
diagnostics = {
disable = { 'missing-fields', },
globals = { 'vim', },
}
}
}
})
end,
['pyright'] = function()
require('lspconfig').pyright.setup({
capabilities = capabilities,
settings = {
pyright = {
disableOrganizeImports = true, -- Use ruff import sorter instead
},
}
})
end,
},
})
@@ -147,8 +138,8 @@ return {
}),
sources = {
{ name = 'nvim_lsp' },
{ name = 'luasnip' },
{ name = 'nvim_lsp' },
{ name = 'buffer' },
{ name = 'path' },
{ name = 'git' },
@@ -172,6 +163,8 @@ return {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(),
},
preselect = 'none', -- Don't preselect completions suggested by source
})
require("cmp_git").setup({})
@@ -180,11 +173,12 @@ return {
vim.api.nvim_create_autocmd('LspAttach', {
pattern = '*',
group = augroup,
callback = function(ev)
local opts = { noremap = true, buffer = ev.buf }
callback = function(event)
local opts = { noremap = true, buffer = event.buf }
-- Fixit mapping, or close enough, actually any code action
vim.keymap.set('n', '<leader>fi', require('actions-preview').code_actions, opts)
vim.keymap.set('n', '<leader>fi',
require('actions-preview').code_actions, opts)
-- Goto mappings
local tb = require('telescope.builtin')
@@ -195,7 +189,7 @@ return {
vim.keymap.set('n', 'gr', tb.lsp_references, opts)
vim.keymap.set('n', '<leader>ic', tb.lsp_incoming_calls, opts)
vim.keymap.set('n', '<leader>oc', tb.lsp_outgoing_calls, opts)
vim.keymap.set('n', '<leader>ss', tb.lsp_document_symbols, opts)
vim.keymap.set('n', '<leader>sd', tb.lsp_document_symbols, opts)
vim.keymap.set('n', '<leader>sw', tb.lsp_workspace_symbols, opts)
-- Refactoring mappings
@@ -212,7 +206,8 @@ return {
-- Swtich file using clangd extension
-- TODO: limit this to only filetypes supported by clangd
vim.keymap.set('n', '<leader>sf', ':ClangdSwitchSourceHeader<CR>', { silent = true })
vim.keymap.set('n', '<leader>sf',
':ClangdSwitchSourceHeader<CR>', { silent = true })
end
})

64
lua/plugins/mux.lua Normal file
View File

@@ -0,0 +1,64 @@
return {
'numToStr/Navigator.nvim',
config = function()
local navigator = require('Navigator')
navigator.setup({
disable_on_zoom = true,
})
local augroup = vim.api.nvim_create_augroup('mux', { clear = true })
if vim.env.TMUX ~= nil then
-- Integrate tmux navigation flag
local navigation_flag =
'@vim' .. vim.fn.substitute(vim.env.TMUX_PANE, '%', '\\%', 'g')
local function set_navigation_flag()
vim.fn.system('tmux set-window-option ' .. navigation_flag .. ' 1')
end
local function unset_navigation_flag()
-- FIXME: Due to a regression this causes SIGABRT when RelWithDebInfo
-- vim.fn.system('tmux set-window-option -u ' .. navigation_flag)
-- https://github.com/neovim/neovim/issues/21856 contains a workaround
vim.fn.jobstart(
'tmux set-window-option -u ' .. navigation_flag, { detach = true })
end
-- [Un]set tmux window option to detect when to change pane.
set_navigation_flag()
vim.api.nvim_create_autocmd('FocusGained', {
pattern = '*', group = augroup, callback = set_navigation_flag,
})
vim.api.nvim_create_autocmd('VimLeave', {
pattern = '*', group = augroup, callback = unset_navigation_flag,
})
elseif vim.env.TERM_PROGRAM ~= nil and vim.env.TERM_PROGRAM == 'WezTerm' then
local function set_wezterm_user_var(in_vim)
local value = in_vim and '1' or '0'
local template = "\x1b]1337;SetUserVar=%s=%s\a"
local command = template:format('vim', vim.base64.encode(tostring(value)))
vim.api.nvim_chan_send(vim.v.stderr, command)
end
vim.api.nvim_create_autocmd({ 'VimEnter', 'VimResume' }, {
pattern = '*',
group = augroup,
callback = function()
set_wezterm_user_var(true)
end,
})
vim.api.nvim_create_autocmd({ 'VimLeave', 'VimSuspend' }, {
pattern = '*',
group = augroup,
callback = function()
set_wezterm_user_var(false)
end,
})
end
-- Map nativation bindings
vim.keymap.set('n', "<C-h>", navigator.left)
vim.keymap.set('n', "<C-j>", navigator.down)
vim.keymap.set('n', "<C-k>", navigator.up)
vim.keymap.set('n', "<C-l>", navigator.right)
end
}

View File

@@ -22,5 +22,15 @@ return {
luasnip.jump(-1)
end
end, { silent = true })
-- vim.keymap.set('s', '<M-l>', function()
-- if luasnip.choice_active() then
-- luasnip.change_choice(1)
-- end
-- end, { silent = true })
-- vim.keymap.set('s', '<M-h>', function()
-- if luasnip.choice_active() then
-- luasnip.change_choice(-1)
-- end
-- end, { silent = true })
end
}

View File

@@ -0,0 +1,6 @@
return {
'Kicamon/markdown-table-mode.nvim',
config = function()
require('markdown-table-mode').setup()
end
}

View File

@@ -5,11 +5,10 @@ return {
'nvim-telescope/telescope-fzy-native.nvim',
'nvim-tree/nvim-web-devicons',
'axkirillov/easypick.nvim',
'catgoose/telescope-helpgrep.nvim',
'benfowler/telescope-luasnip.nvim',
},
config = function()
local telescope = require('telescope')
local actions = require('telescope.actions')
telescope.setup({
defaults = {
mappings = {
@@ -22,38 +21,23 @@ return {
['<C-s>'] = 'select_horizontal',
['<C-h>'] = 'preview_scrolling_left',
['<C-l>'] = 'preview_scrolling_right',
},
}
},
layout_config = {
height = 0.7,
},
},
extensions = {
helpgrep = {
mappings = {
i = {
["<CR>"] = actions.select_default,
["<C-v>"] = actions.select_vertical,
},
n = {
["<CR>"] = actions.select_default,
["<C-s>"] = actions.select_horizontal,
}
},
},
}
},
})
telescope.load_extension('fzy_native')
telescope.load_extension('luasnip')
local builtin = require('telescope.builtin')
local opts = { noremap = true }
vim.keymap.set('n', '<leader>gF', builtin.find_files, opts)
vim.keymap.set('n', '<leader>gf', builtin.git_files, opts)
vim.keymap.set('n', '<leader>gg', builtin.live_grep, opts)
vim.keymap.set('n', '<leader>rg', builtin.grep_string, opts)
vim.keymap.set('n', '<leader>gb', builtin.buffers, opts)
vim.keymap.set('n', '<leader>ht', builtin.help_tags, opts)
vim.keymap.set('n', '<leader>gh', require('telescope-helpgrep').live_grep, opts)
vim.keymap.set('n', '<leader>gh', builtin.help_tags, opts)
vim.keymap.set('n', '<leader>bl', builtin.current_buffer_fuzzy_find, opts)
require('easypick').setup({

View File

@@ -1,39 +0,0 @@
return {
'alexghergh/nvim-tmux-navigation',
config = function()
local plugin = require('nvim-tmux-navigation')
plugin.setup({
disable_when_zoomed = true,
})
-- Integrate tmux navigation flag
local navigation_flag =
'@vim' .. vim.fn.substitute(vim.env.TMUX_PANE, '%', '\\%', 'g')
local function set_navigation_flag()
vim.fn.system('tmux set-window-option ' .. navigation_flag .. ' 1')
end
local function unset_navigation_flag()
-- FIXME: Due to a regression this causes SIGABRT when RelWithDebInfo
-- vim.fn.system('tmux set-window-option -u ' .. navigation_flag)
-- https://github.com/neovim/neovim/issues/21856 contains a workaround
vim.fn.jobstart(
'tmux set-window-option -u ' .. navigation_flag, { detach = true})
end
-- [Un]set tmux window option to detect when to change pane.
set_navigation_flag()
local augroup = vim.api.nvim_create_augroup('tmux', { clear = true })
vim.api.nvim_create_autocmd('FocusGained', {
pattern = '*', group = augroup, callback = set_navigation_flag,
})
vim.api.nvim_create_autocmd('VimLeave', {
pattern = '*', group = augroup, callback = unset_navigation_flag,
})
-- Map nativation bindings
vim.keymap.set('n', "<C-h>", plugin.NvimTmuxNavigateLeft)
vim.keymap.set('n', "<C-j>", plugin.NvimTmuxNavigateDown)
vim.keymap.set('n', "<C-k>", plugin.NvimTmuxNavigateUp)
vim.keymap.set('n', "<C-l>", plugin.NvimTmuxNavigateRight)
end
}

View File

@@ -33,12 +33,13 @@ local noice = {
return {
-- noice,
{ 'echasnovski/mini.comment', opts = { options = { ignore_blank_line = true } } },
{
'tummetott/unimpaired.nvim',
'idanarye/nvim-impairative',
config = function()
require('unimpaired').setup({})
end
},
require('impairative').setup({})
require('impairative.replicate-unimpaired')()
end},
{ 'stevearc/dressing.nvim' },
{ 'kevinhwang91/nvim-bqf' },
}

View File

@@ -31,26 +31,6 @@ vim.api.nvim_create_autocmd('TermOpen', {
end
})
-- Don't show the line number column in terminal-insert mode
vim.api.nvim_create_autocmd('TermEnter', {
group = group, pattern = 'term://*',
callback = function()
vim.opt.number = false
vim.opt.relativenumber = false
vim.opt.signcolumn = 'no'
end
})
-- But do show the line number column in terminal-normal mode
vim.api.nvim_create_autocmd('TermLeave', {
group = group, pattern = 'term://*',
callback = function()
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.signcolumn = 'yes'
end
})
-- Automatically press enter when the terminal process exit successfully
vim.api.nvim_create_autocmd('TermClose', {
group = group,

View File

@@ -21,42 +21,58 @@ function build.set_dir(dirname)
end
build.dir = build_dir
echo('Processing compile_commands.json with compdb ...', 'DiagnosticInfo')
local compile_commands = current_dir .. '/compile_commands.json'
-- Post-process compile_commands.json with compdb as an async job to avoid
-- blocking the user interface
vim.fn.jobstart(
'compdb -p ' .. build.dir .. ' list > ' .. compile_commands, {
-- Restart clangd language server
-- TODO: Configure cmake language server?
on_exit = function()
vim.cmd.LspRestart('clangd')
echo('Build directory selected: ' .. dirname, 'DiagnosticInfo')
end,
if vim.fn.executable('compdb') == 1 then
echo('Processing compile_commands.json with compdb ...', 'DiagnosticInfo')
-- Post-process compile_commands.json with compdb as an async job to avoid
-- blocking the user interface
vim.fn.jobstart(
'compdb -p ' .. build.dir .. ' list > ' .. compile_commands, {
-- Display any error messages to the user
on_stderr = function(_, output, _)
-- Remove any lines containing a compdb warning
local error = {}
local warning = 'WARNING:compdb'
for _, line in ipairs(output) do
if string.sub(line, 1, #warning) ~= warning then
table.insert(error, line)
-- Restart clangd language server
on_exit = function()
-- This is a callback so doesn't run on the main thread which causes
-- issues for running commands, so schedule that on the main thread.
vim.schedule(function()
vim.cmd('LspRestart')
echo('Build directory selected: ' .. dirname, 'DiagnosticInfo')
end)
end,
-- Display any error messages to the user
on_stderr = function(_, output, _)
-- Remove any lines containing a compdb warning
local error = {}
local warning = 'WARNING:compdb'
for _, line in ipairs(output) do
if string.sub(line, 1, #warning) ~= warning then
table.insert(error, line)
end
end
end
-- Display the error message if there was one
if table.maxn(error) > 0 then
echo(vim.fn.join(error, '\n'), 'Error')
return
end
end,
-- Display the error message if there was one
if table.maxn(error) > 0 then
echo(vim.fn.join(error, '\n'), 'Error')
return
end
end,
stderr_buffered = true,
}
)
stderr_buffered = true,
}
)
else
vim.uv.fs_copyfile(build_dir .. '/compile_commands.json', compile_commands, nil,
function()
-- This is a callback so doesn't run on the main thread which causes
-- issues for running commands, so schedule that on the main thread.
vim.schedule(function()
vim.cmd('LspRestart')
echo('Build directory selected: ' .. dirname, 'DiagnosticInfo')
end)
end
)
end
end
function build.select_dir(callback)

View File

@@ -1,4 +1,4 @@
-- :RString strip white psace from right of all lines, ranges supported
-- :RStrip strip white psace from right of all lines, ranges supported
vim.api.nvim_create_user_command('RStrip', function(opts)
local pos = vim.fn.getcurpos(vim.api.nvim_get_current_win())
local range = opts.line1 .. ',' .. opts.line2
@@ -42,7 +42,7 @@ vim.api.nvim_create_user_command('Remove', function(opts)
end
end
end
-- Actually remove the file using the selecte callback.
-- Actually remove the file using the selected callback.
vim.loop.fs_unlink(path, callback)
end, { bang = true })
@@ -116,13 +116,83 @@ end, {
complete = 'file',
})
-- :Rg grep for the given string and fuzzy find the results, bang to enable
-- regex in given string
-- FIXME: Support visual select modes
-- :Rg grep for the given string, word under the cursor, or visual selection
-- then fuzzy find the results. Bang to enable regex in given string.
vim.api.nvim_create_user_command('Rg', function(opts)
local grep_opts = { search = opts.args }
local search = opts.args
if opts.range == 2 then
local lines = vim.fn.getline(vim.fn.line("'<"), vim.fn.line("'>"))
local start_col = vim.fn.col("'<")
local end_col = vim.fn.col("'>")
if #lines == 1 then
lines[1] = string.sub(lines[1], start_col, end_col)
else
lines[1] = string.sub(lines[1], start_col)
lines[#lines] = string.sub(lines[#lines], 1, end_col)
end
search = table.concat(lines, "\n")
elseif #search == 0 then
search = vim.fn.expand('<cword>')
end
local grep_opts = { search = search}
if opts.bang then
grep_opts['use_regex'] = true
end
require('telescope.builtin').grep_string(grep_opts)
end, { bang = true, nargs = '*' })
end, { bang = true, range = true, nargs = '*' })
-- :PreProcIfWrap wraps the given range of lines in #if 0 / #endif.
vim.api.nvim_create_user_command('PreProcIfWrap', function(opts)
local buffer = vim.api.nvim_get_current_buf()
vim.api.nvim_buf_set_lines(
buffer, opts.line2, opts.line2, true, { '#endif' })
vim.api.nvim_buf_set_lines(
buffer, opts.line1 - 1, opts.line1 - 1, true, { '#if 0' })
local window = vim.api.nvim_get_current_win()
vim.api.nvim_win_set_cursor(window, { opts.line1, 5 })
end, { range = true })
-- :CheckboxToggle toggles GitHub Flavoured Markdown style checkboxes.
vim.api.nvim_create_user_command('CheckboxToggle', function(opts)
local linenr = vim.fn.line('.')
local line = vim.fn.getline(linenr)
local pos = string.find(line, '[ ]', 0, true)
if pos == nil then
pos = string.find(line, '[x]', 0, true)
if pos == nil then
return
end
end
local x = string.sub(line, pos + 1, pos + 1)
if x == 'x' then x = ' ' else x = 'x' end
vim.fn.setline(linenr, string.sub(line, 1, pos) .. x .. string.sub(line, pos + 2))
end, {})
-- :Tac reverse the order of lines in the selected range or the whole file if
-- no range is specificed, works as if executing :!tac but purely in Lua making
-- it cross-platform.
vim.api.nvim_create_user_command('Tac', function(opts)
local buffer = vim.api.nvim_get_current_buf()
local line1 = opts.line1 - 1
local line2 = opts.line2
if opts.range == 0 then
line1 = 0
line2 = -1
end
print(opts.range, line1, line2)
local lines = vim.api.nvim_buf_get_lines(buffer, line1, line2, false)
if lines and #lines > 1 then
local temp = nil
for n = 1, math.floor(#lines / 2) do
temp = lines[n]
lines[n] = lines[#lines - (n - 1)]
lines[#lines - (n - 1)] = temp
end
vim.api.nvim_buf_set_lines(buffer, line1, line2, true, lines)
end
end, { range = true })
-- :DiagnosticToggle to disable diagnostics when enabled and vise versa.
vim.api.nvim_create_user_command('DiagnosticToggle', function(_)
vim.diagnostic.enable(not vim.diagnostic.is_enabled())
end, {})

View File

@@ -43,3 +43,10 @@ vim.keymap.set('t', '<C-w><C-g>', '<C-\\><C-n>:Gdb<CR>:startinsert<CR>', opts)
vim.keymap.set('t', '<C-w><C-e>', '<C-\\><C-n>:Program<CR>', opts)
vim.keymap.set('t', '<C-w><C-s>', '<C-\\><C-n>:Source<CR>', opts)
vim.keymap.set('t', '<C-w><C-a>', '<C-\\><C-n>:Asm<CR>', opts)
-- Mappings to grep for then fuzzy find the word under the cursor or visual selection
vim.keymap.set('n', '<leader>rg', ':Rg<CR>', opts)
vim.keymap.set('v', '<leader>rg', ":'<,'>Rg<CR>", opts)
-- Mapping to toggle checkboxes
vim.keymap.set('n', '<leader><CR>', ':CheckboxToggle<CR>', opts)

View File

@@ -75,7 +75,7 @@ local function special(group, name, title)
end
-- Construct a statusline for generic buffer types.
local function generic(group, name, show_lsp)
local function generic(group, name)
-- Display current mode with dynamic highlights.
local line = '%#' .. group .. '# ' .. name .. ' '
-- Display spell or paste if set with dusk highlights in a group to swallow
@@ -131,11 +131,11 @@ function _G.statusline_active()
return special('StatusLineLight', 'Terminal', '%f')
elseif vim.o.previewwindow then
if mode == 'Normal' then mode = 'Preview' end
return generic('StatusLineLight', mode, false)
return generic('StatusLineLight', mode)
elseif vim.o.filetype == 'man' then
return special('StatusLineDusk', 'Manual', '%f')
end
return generic('StatusLineLight', mode, true)
return generic('StatusLineLight', mode)
end
function _G.statusline_inactive()
@@ -152,11 +152,11 @@ function _G.statusline_inactive()
elseif vim.o.buftype == 'terminal' then
line = special('StatusLineDusk', 'Terminal', '%f')
elseif vim.o.previewwindow then
line = generic('StatusLineDusk', 'Preview', false)
line = generic('StatusLineDusk', 'Preview')
elseif vim.o.filetype == 'man' then
line = special('StatusLineDusk', 'Manual', '%f')
else
line = generic('StatusLineDusk', 'Idle', false)
line = generic('StatusLineDusk', 'Idle')
end
return line
end

View File

@@ -6,7 +6,7 @@ local snip = luasnip.snippet
local text = luasnip.text_node
-- local isn = luasnip.indent_snippet_node
-- local t = luasnip.text_node
local insert = luasnip.insert_node
local ins = luasnip.insert_node
local func = luasnip.function_node
-- local c = luasnip.choice_node
-- local d = luasnip.dynamic_node
@@ -67,7 +67,7 @@ for _, name in ipairs({ 'fixme', 'todo', 'hack', 'warn', 'note' }) do
snip(name, {
func(comment_prefix),
text(string.upper(name) .. ': '),
insert(0),
ins(0),
func(comment_suffix),
})
)

View File

@@ -7,6 +7,11 @@ local insert = luasnip.insert_node
local func = luasnip.function_node
local key = require("luasnip.nodes.key_indexer").new_key
local function getIncludeGuardName()
local filename = vim.fn.expand('%'):gsub('[^%w_]', '_'):upper()
return filename .. '_INCLUDED'
end
local snippets = {
snip('#include', {
text('#include '),
@@ -20,6 +25,21 @@ local snippets = {
end
end, key('open')),
}),
snip('once', {
text('#ifndef '),
func(function(args)
return args[1][1]
end, key('name')),
text({ '', '#define ' }),
insert(1, getIncludeGuardName(), { key = 'name' }),
text({ '', '', '', }),
insert(0, ''),
text({ '', '', '#endif // ' }),
func(function(args)
return args[1][1]
end, key('name')),
}),
}
return snippets

View File

@@ -1,5 +1,48 @@
# C++ LuaSnip Snippets
-- C++ LuaSnip Snippets
local luasnip = require('luasnip')
luasnip.filetype_extend('cpp', { 'c' })
local snip = luasnip.snippet
local text = luasnip.text_node
local ins = luasnip.insert_node
local dyn = luasnip.dynamic_node
local node = luasnip.snippet_node
local key = require("luasnip.nodes.key_indexer").new_key
local snippets = {
snip('for', {
text('for ('),
ins(1, 'auto'),
text(' '),
ins(2, 'index'),
text(' '),
ins(3, '='),
dyn(4, function(args)
local choice = args[2][1]
if choice == '=' then -- index based for loop
local var = args[1][1]
return node(nil, {
text(' '),
ins(1, '0'),
text('; ' .. var .. ' < '),
ins(2, 'count'),
text('; '),
ins(3, var .. '++'),
})
elseif choice == ':' then -- range based for loop
return node(nil, {
text(' '),
ins(1, 'container')
})
end
return node(nil, {})
end, { 2, 3 }, key('var')),
text({ ') {', '\t' }),
ins(0, ''),
text({ '', '}' })
}),
}
return snippets

View File

@@ -2,16 +2,6 @@
extends c
snippet for Range based
for (${1:auto} ${2:value} : ${3:container}) {
$0
}
snippet for Index based
for (${1:int} i = ${2:0}; i < ${3:count}; i++) {
$0
}
snippet namespace
namespace ${1} {
$0

59
snippets/go.lua Normal file
View File

@@ -0,0 +1,59 @@
# Go LuaSnip Snippets
local luasnip = require('luasnip')
local snip = luasnip.snippet
local text = luasnip.text_node
local ins = luasnip.insert_node
local func = luasnip.function_node
local node = luasnip.snippet_node
local key = require("luasnip.nodes.key_indexer").new_key
local function short_name(name)
local short = string.lower(string.sub(name, 1, 1))
for i = 2, #name do
local char = string.sub(name, i, i)
if char == string.upper(char) then
short = short .. char
end
end
return string.lower(short)
end
local snippets = {
snip('func', {
text('func '),
node(1, {
func(function(args)
if string.len(args[1][1]) > 0 then
return '(' .. short_name(args[1][1]) .. ' *'
end
return ''
end, key('type')),
ins(1, '', { key = 'type' }),
func(function(args)
if string.len(args[1][1]) > 0 then
return ') '
end
return ''
end, key('type')),
}),
ins(2, 'name'),
text('('),
ins(3, ''),
text(') '),
ins(4, '', { key = 'return' }),
func(function(args)
if string.len(args[1][1]) > 0 then
return ' '
end
return ''
end, key('return')),
text({ '{', '\t' }),
ins(0, ''),
text({ '', '}' }),
}),
}
return snippets

8
snippets/go.snippets Normal file
View File

@@ -0,0 +1,8 @@
# Go SnipMate snippets
snippet main
package main
func main() {
$0
}