Compare commits
27 Commits
811b7d9c07
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 87ab333ec9 | |||
| 93e281cbb5 | |||
| 4bd4d87f5b | |||
| 3ac01d9776 | |||
| 08784c625a | |||
| 59f4064788 | |||
| 74baebf3f8 | |||
| 3b7c034926 | |||
| 12152a20db | |||
| 3e6c115673 | |||
| fd6dd0ba8c | |||
| ee7157a23a | |||
| 3e3d7b8173 | |||
| 19cfaeab49 | |||
| 5b41b4d781 | |||
| 9faa5209bb | |||
| 36487d273e | |||
| 5b58207e16 | |||
| 270222bb57 | |||
| 75f9692e7d | |||
| 4bb854c54d | |||
| 15e21f333f | |||
| 1cb0d8ab2a | |||
| b6c4df13e0 | |||
| 3ded8e9e0d | |||
| 56136ef0f1 | |||
| e5f95df420 |
13
after/ftplugin/org.lua
Normal file
13
after/ftplugin/org.lua
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
-- make C-CR in insert mode behave like org_meta_return
|
||||||
|
-- in normal mode
|
||||||
|
|
||||||
|
vim.keymap.set(
|
||||||
|
"i",
|
||||||
|
"<C-CR>",
|
||||||
|
|
||||||
|
'<cmd>lua require("orgmode").action("org_mappings.meta_return")<CR>', {
|
||||||
|
silent = true,
|
||||||
|
buffer = true,
|
||||||
|
desc = 'ORG: meta return'
|
||||||
|
}
|
||||||
|
)
|
||||||
2
init.lua
2
init.lua
@@ -6,3 +6,5 @@ require('plugins')
|
|||||||
require('colorscheme')
|
require('colorscheme')
|
||||||
require('lsp')
|
require('lsp')
|
||||||
require('keybindings')
|
require('keybindings')
|
||||||
|
require('diary')
|
||||||
|
require('layout')
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ local adjustedLogo = logo .. '\n' .. paddedGreeting .. '\n\n' .. userNamePadded
|
|||||||
dashboard.section.header.val = vim.split(adjustedLogo, '\n')
|
dashboard.section.header.val = vim.split(adjustedLogo, '\n')
|
||||||
|
|
||||||
dashboard.section.buttons.val = {
|
dashboard.section.buttons.val = {
|
||||||
dashboard.button('o', ' AI Chat', '<cmd>OGPT<CR>'),
|
dashboard.button('d', ' Diary Entry', '<cmd>Diary<CR>'),
|
||||||
dashboard.button('n', ' New file', ':ene <BAR> startinsert <CR>'),
|
dashboard.button('n', ' New file', ':ene <BAR> startinsert <CR>'),
|
||||||
dashboard.button('s', ' Settings', '<cmd>WorkspacesOpen config-nvim<CR>'),
|
dashboard.button('s', ' Settings', '<cmd>WorkspacesOpen config-nvim<CR>'),
|
||||||
dashboard.button('u', ' Update plugins', '<cmd>Lazy update<CR>'),
|
dashboard.button('u', ' Update plugins', '<cmd>Lazy update<CR>'),
|
||||||
|
|||||||
@@ -1,32 +1,4 @@
|
|||||||
-- an alternative might be:
|
require("lualine").setup {
|
||||||
-- https://github.com/nvim-treesitter/nvim-treesitter-context
|
|
||||||
local function breadcrumb()
|
|
||||||
local result = require 'nvim-treesitter'.statusline(
|
|
||||||
{
|
|
||||||
type_patterns = {
|
|
||||||
"class",
|
|
||||||
"impl",
|
|
||||||
"function",
|
|
||||||
"method",
|
|
||||||
"import",
|
|
||||||
"for",
|
|
||||||
"if",
|
|
||||||
"while",
|
|
||||||
"variable",
|
|
||||||
"comment",
|
|
||||||
},
|
|
||||||
separator = " ▶ "
|
|
||||||
}
|
|
||||||
)
|
|
||||||
if result == "" then
|
|
||||||
result = ' '
|
|
||||||
elseif result == nil then
|
|
||||||
result = ''
|
|
||||||
end
|
|
||||||
return result
|
|
||||||
end
|
|
||||||
|
|
||||||
require("lualine").setup {
|
|
||||||
options = {
|
options = {
|
||||||
icons_enabled = false,
|
icons_enabled = false,
|
||||||
theme = 'papercolor_light',
|
theme = 'papercolor_light',
|
||||||
@@ -49,7 +21,7 @@
|
|||||||
lualine_a = { { 'filename', path = 1, shorting_target = 50 } },
|
lualine_a = { { 'filename', path = 1, shorting_target = 50 } },
|
||||||
lualine_b = { 'branch', 'diff', 'diagnostics' },
|
lualine_b = { 'branch', 'diff', 'diagnostics' },
|
||||||
lualine_c = {},
|
lualine_c = {},
|
||||||
lualine_x = { 'encoding', 'fileformat', 'filetype' },
|
lualine_x = { 'encoding', 'fileformat', 'filetype', 'lsp_status' },
|
||||||
lualine_y = { 'filesize' },
|
lualine_y = { 'filesize' },
|
||||||
lualine_z = { 'progress', 'location' }
|
lualine_z = { 'progress', 'location' }
|
||||||
},
|
},
|
||||||
@@ -63,22 +35,7 @@
|
|||||||
lualine_z = { 'location' }
|
lualine_z = { 'location' }
|
||||||
},
|
},
|
||||||
tabline = {},
|
tabline = {},
|
||||||
winbar = {
|
winbar = {}, -- formerly breadcrumb here
|
||||||
lualine_a = {
|
inactive_winbar = {},
|
||||||
{
|
|
||||||
breadcrumb,
|
|
||||||
color = { bg = '#2a2a2a', fg = '#cfcfcf' },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
inactive_winbar = {
|
|
||||||
lualine_a = {
|
|
||||||
{
|
|
||||||
breadcrumb,
|
|
||||||
color = { bg = '#101010', fg = '#999999' },
|
|
||||||
draw_empty = true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
extensions = {}
|
extensions = {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,95 +0,0 @@
|
|||||||
local has_words_before = function()
|
|
||||||
unpack = unpack or table.unpack
|
|
||||||
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
|
|
||||||
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
|
|
||||||
end
|
|
||||||
|
|
||||||
local luasnip = require("luasnip")
|
|
||||||
local cmp = require("cmp")
|
|
||||||
|
|
||||||
cmp.setup({
|
|
||||||
snippet = {
|
|
||||||
-- REQUIRED - you must specify a snippet engine
|
|
||||||
expand = function(args)
|
|
||||||
require('luasnip').lsp_expand(args.body) -- For `luasnip` users.
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
window = {
|
|
||||||
-- completion = cmp.config.window.bordered(),
|
|
||||||
-- documentation = cmp.config.window.bordered(),
|
|
||||||
},
|
|
||||||
|
|
||||||
mapping = cmp.mapping.preset.insert({
|
|
||||||
-- Use <C-b/f> to scroll the docs
|
|
||||||
['<C-b>'] = cmp.mapping.scroll_docs(-4),
|
|
||||||
['<C-f>'] = cmp.mapping.scroll_docs(4),
|
|
||||||
-- also scroll docs with page up / down
|
|
||||||
['<PageUp>'] = cmp.mapping.scroll_docs(-4),
|
|
||||||
['<PageDown>'] = cmp.mapping.scroll_docs(4),
|
|
||||||
|
|
||||||
-- ESC messes with standard ESC mapping, don't use
|
|
||||||
-- ['<Esc>'] = cmp.mapping.abort(),
|
|
||||||
['<C-e>'] = cmp.mapping.abort(),
|
|
||||||
|
|
||||||
-- Use <CR>(Enter) to confirm selection
|
|
||||||
-- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
|
|
||||||
['<CR>'] = cmp.mapping.confirm({ select = true }),
|
|
||||||
|
|
||||||
-- A super tab
|
|
||||||
-- sourc: https://github.com/hrsh7th/nvim-cmp/wiki/Example-mappings#luasnip
|
|
||||||
["<Tab>"] = cmp.mapping(function(fallback)
|
|
||||||
-- Hint: if the completion menu is visible select next one
|
|
||||||
if cmp.visible() then
|
|
||||||
cmp.select_next_item()
|
|
||||||
elseif luasnip.jumpable(1) then
|
|
||||||
luasnip.jump(1)
|
|
||||||
elseif has_words_before() then
|
|
||||||
cmp.complete()
|
|
||||||
else
|
|
||||||
fallback()
|
|
||||||
end
|
|
||||||
end, { "i", "s" }), -- i - insert mode; s - select mode
|
|
||||||
["<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" }),
|
|
||||||
}),
|
|
||||||
|
|
||||||
-- Let's configure the item's appearance
|
|
||||||
-- source: https://github.com/hrsh7th/nvim-cmp/wiki/Menu-Appearance
|
|
||||||
formatting = {
|
|
||||||
-- Set order from left to right
|
|
||||||
-- kind: single letter indicating the type of completion
|
|
||||||
-- abbr: abbreviation of "word"; when not empty it is used in the menu instead of "word"
|
|
||||||
-- menu: extra text for the popup menu, displayed after "word" or "abbr"
|
|
||||||
fields = { 'abbr', 'menu' },
|
|
||||||
|
|
||||||
-- customize the appearance of the completion menu
|
|
||||||
format = function(entry, vim_item)
|
|
||||||
vim_item.menu = ({
|
|
||||||
nvim_lsp = '[Lsp]',
|
|
||||||
luasnip = '[Luasnip]',
|
|
||||||
buffer = '[File]',
|
|
||||||
path = '[Path]',
|
|
||||||
})[entry.source.name]
|
|
||||||
return vim_item
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Set source precedence
|
|
||||||
sources = cmp.config.sources({
|
|
||||||
{ name = 'nvim_lsp' }, -- For nvim-lsp
|
|
||||||
{ name = 'luasnip' }, -- For luasnip user
|
|
||||||
{ name = 'buffer' }, -- For buffer word completion
|
|
||||||
{ name = 'path' }, -- For path completion
|
|
||||||
{ name = 'orgmode' }, -- for nvim-orgmode
|
|
||||||
{ name = 'sonicpi' }, -- for sonic-pi integration
|
|
||||||
})
|
|
||||||
})
|
|
||||||
22
lua/diary.lua
Normal file
22
lua/diary.lua
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
local diary_open = function(opts)
|
||||||
|
local date = opts.args ~= '' and opts.args or os.date('%Y-%m-%d')
|
||||||
|
local year, month = date:match('(%d%d%d%d)-(%d%d)')
|
||||||
|
local file = string.format('~/.diary/asciidoc/%s/diary-%s-%s.adoc', year, year, month)
|
||||||
|
print("file is:", file)
|
||||||
|
vim.cmd('e ' .. file)
|
||||||
|
vim.cmd('normal! G')
|
||||||
|
|
||||||
|
-- NOTE.2025-06-08 [1] and [2] should be replaced with snippet name, but I
|
||||||
|
-- don't know how -- neither do grok nor chatgpt ...
|
||||||
|
local snips = require('luasnip')
|
||||||
|
local asnippets = snips.get_snippets('asciidoc')
|
||||||
|
if vim.fn.getfsize(file) == 0 then
|
||||||
|
snips.snip_expand(asnippets[1])
|
||||||
|
vim.cmd('normal! G')
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.cmd('normal! 3o') -- insert some newlines before new entry
|
||||||
|
snips.snip_expand(asnippets[2])
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_create_user_command("Diary", diary_open, { nargs = '?' })
|
||||||
@@ -26,6 +26,9 @@ vim.keymap.set('n', '<leader>C', ":Calendar -view=year -split=vertical -width=27
|
|||||||
-- Open current file in browser (chromium)
|
-- Open current file in browser (chromium)
|
||||||
vim.keymap.set('n', '<space>o', ":silent !chromium '%'<cr>", { desc = "Open in browser" })
|
vim.keymap.set('n', '<space>o', ":silent !chromium '%'<cr>", { desc = "Open in browser" })
|
||||||
|
|
||||||
|
-- Open org file folder in neotree
|
||||||
|
vim.keymap.set('n', '<leader>of', ':silent :Neotree dir=/home/saschal/Documents/Eigene\\ (Briefe\\ etc.)/org<cr>', { desc = "Open org folder" })
|
||||||
|
|
||||||
-- toggle colorscheme between dark and light
|
-- toggle colorscheme between dark and light
|
||||||
vim.keymap.set('n', '<leader>m', function()
|
vim.keymap.set('n', '<leader>m', function()
|
||||||
if vim.opt.background:get() == "dark" then
|
if vim.opt.background:get() == "dark" then
|
||||||
@@ -61,6 +64,22 @@ local workspaces_fzf_picker = function(opts)
|
|||||||
end
|
end
|
||||||
vim.keymap.set('n', '<leader>w', workspaces_fzf_picker, { desc = "Workspaces" })
|
vim.keymap.set('n', '<leader>w', workspaces_fzf_picker, { desc = "Workspaces" })
|
||||||
|
|
||||||
|
------------------------------------------
|
||||||
|
--
|
||||||
|
-- Window layout save and restore
|
||||||
|
--
|
||||||
|
------------------------------------------
|
||||||
|
|
||||||
|
local layout = require('layout')
|
||||||
|
vim.keymap.set('n', '<leader>ss', function()
|
||||||
|
layout.save('default')
|
||||||
|
print("Window layout saved")
|
||||||
|
end, { desc = "Save window layout" })
|
||||||
|
vim.keymap.set('n', '<leader>sr', function()
|
||||||
|
layout.restore('default')
|
||||||
|
print("Window layout restored")
|
||||||
|
end, { desc = "Restore window layout" })
|
||||||
|
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
--
|
--
|
||||||
-- Word higlighting
|
-- Word higlighting
|
||||||
@@ -74,7 +93,7 @@ vim.keymap.set('n', '<space>mc', mywords.uhl_all, { desc = "Clear all highlights
|
|||||||
|
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
--
|
--
|
||||||
-- Some convenience keybindings
|
-- Moving lines up and down
|
||||||
--
|
--
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
|
|
||||||
|
|||||||
71
lua/layout.lua
Normal file
71
lua/layout.lua
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
-- save and restore current window layout
|
||||||
|
-- inspired by:
|
||||||
|
-- - https://github.com/dedowsdi/.vim/blob/master/autoload/ddd/layout.vim
|
||||||
|
-- - https://vi.stackexchange.com/a/22545/53081
|
||||||
|
--
|
||||||
|
-- added cursor position handling
|
||||||
|
|
||||||
|
local M = {}
|
||||||
|
local layouts = {}
|
||||||
|
local resize_cmds = {}
|
||||||
|
|
||||||
|
function M.save(name)
|
||||||
|
layouts[name] = vim.fn.winlayout()
|
||||||
|
resize_cmds[name] = vim.fn.winrestcmd()
|
||||||
|
M.add_buf_to_layout(layouts[name])
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.add_buf_to_layout(layout)
|
||||||
|
if layout[1] == "leaf" then
|
||||||
|
local win_id = layout[2]
|
||||||
|
table.insert(layout, vim.fn.winbufnr(win_id))
|
||||||
|
table.insert(layout, vim.api.nvim_win_get_cursor(win_id))
|
||||||
|
else
|
||||||
|
for _, child_layout in ipairs(layout[2]) do
|
||||||
|
M.add_buf_to_layout(child_layout)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.restore(name)
|
||||||
|
if not layouts[name] then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Create clean window
|
||||||
|
vim.cmd("new")
|
||||||
|
vim.cmd("wincmd o")
|
||||||
|
|
||||||
|
-- Recursively restore buffers and cursor positions
|
||||||
|
M.apply_layout(layouts[name], name)
|
||||||
|
|
||||||
|
-- Resize
|
||||||
|
vim.cmd(resize_cmds[name])
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.apply_layout(layout, name)
|
||||||
|
if layout[1] == "leaf" then
|
||||||
|
-- Load buffer for leaf
|
||||||
|
if vim.fn.bufexists(layout[3]) == 1 then
|
||||||
|
vim.cmd(string.format("b %d", layout[3]))
|
||||||
|
-- Restore cursor position
|
||||||
|
vim.api.nvim_win_set_cursor(vim.fn.win_getid(), layout[4])
|
||||||
|
end
|
||||||
|
else
|
||||||
|
-- Split cols or rows, split n-1 times
|
||||||
|
local split_method = layout[1] == "col" and "rightbelow split" or "rightbelow vsplit"
|
||||||
|
local wins = { vim.fn.win_getid() }
|
||||||
|
for i = 2, #layout[2] do
|
||||||
|
vim.cmd(split_method)
|
||||||
|
table.insert(wins, vim.fn.win_getid())
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Recursive into child windows
|
||||||
|
for index, win_id in ipairs(wins) do
|
||||||
|
vim.fn.win_gotoid(win_id)
|
||||||
|
M.apply_layout(layout[2][index], name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
||||||
69
lua/lsp.lua
69
lua/lsp.lua
@@ -1,4 +1,4 @@
|
|||||||
-- attach using autocommand, much better than doing it during mason
|
-- attach using autocommand and setup keybindings
|
||||||
vim.api.nvim_create_autocmd('LspAttach', {
|
vim.api.nvim_create_autocmd('LspAttach', {
|
||||||
group = vim.api.nvim_create_augroup('sl.lsp', {}),
|
group = vim.api.nvim_create_augroup('sl.lsp', {}),
|
||||||
callback = function(args)
|
callback = function(args)
|
||||||
@@ -34,6 +34,7 @@ vim.api.nvim_create_autocmd('LspAttach', {
|
|||||||
vim.keymap.set('n', '<space>]', vim.diagnostic.goto_next, { desc = "Previous diagnostics" })
|
vim.keymap.set('n', '<space>]', vim.diagnostic.goto_next, { desc = "Previous diagnostics" })
|
||||||
|
|
||||||
local gitsigns = require('gitsigns')
|
local gitsigns = require('gitsigns')
|
||||||
|
vim.keymap.set('n', '<space>=l', ":NeogitLogCurrent<CR>", { desc = "Neogit: log for this file" })
|
||||||
vim.keymap.set('n', '<space>==', gitsigns.preview_hunk_inline, { desc = "Git hunk preview" })
|
vim.keymap.set('n', '<space>==', gitsigns.preview_hunk_inline, { desc = "Git hunk preview" })
|
||||||
vim.keymap.set('n', '<space>=B', gitsigns.blame, { desc = "Git blame file" })
|
vim.keymap.set('n', '<space>=B', gitsigns.blame, { desc = "Git blame file" })
|
||||||
vim.keymap.set('n', '<space>=D', function() gitsigns.diffthis('~') end, { desc = "Git diff this (~)" })
|
vim.keymap.set('n', '<space>=D', function() gitsigns.diffthis('~') end, { desc = "Git diff this (~)" })
|
||||||
@@ -45,6 +46,8 @@ vim.api.nvim_create_autocmd('LspAttach', {
|
|||||||
vim.keymap.set('n', '<space>=d', gitsigns.diffthis, { desc = "Git diff this" })
|
vim.keymap.set('n', '<space>=d', gitsigns.diffthis, { desc = "Git diff this" })
|
||||||
vim.keymap.set('n', '<space>=r', gitsigns.reset_hunk, { desc = "Git reset hunk" })
|
vim.keymap.set('n', '<space>=r', gitsigns.reset_hunk, { desc = "Git reset hunk" })
|
||||||
vim.keymap.set('n', '<space>=s', gitsigns.stage_hunk, { desc = "Git stage hunk" })
|
vim.keymap.set('n', '<space>=s', gitsigns.stage_hunk, { desc = "Git stage hunk" })
|
||||||
|
vim.keymap.set('v', '<space>=s', function() gitsigns.stage_hunk({ vim.fn.line('.'), vim.fn.line('v') }) end,
|
||||||
|
{ desc = "Git stage hunk" })
|
||||||
|
|
||||||
-- vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts)
|
-- vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts)
|
||||||
vim.keymap.set('n', '<C-,>', fzf.lsp_references, { desc = "Find References" })
|
vim.keymap.set('n', '<C-,>', fzf.lsp_references, { desc = "Find References" })
|
||||||
@@ -52,28 +55,6 @@ vim.api.nvim_create_autocmd('LspAttach', {
|
|||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
require('mason').setup({
|
|
||||||
ui = {
|
|
||||||
icons = {
|
|
||||||
package_installed = "✓",
|
|
||||||
package_pending = "➜",
|
|
||||||
package_uninstalled = "✗"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
require('mason-lspconfig').setup({
|
|
||||||
-- A list of servers to automatically install if they're not already installed
|
|
||||||
ensure_installed = {
|
|
||||||
'lua_ls',
|
|
||||||
-- 'rust_analyzer', -- handled by rust mrcjkb/rustaceanvim
|
|
||||||
'yamlls',
|
|
||||||
'ts_ls',
|
|
||||||
'gopls',
|
|
||||||
'clangd',
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
-- lsp format selected range
|
-- lsp format selected range
|
||||||
function LSPRangeFormatFunction()
|
function LSPRangeFormatFunction()
|
||||||
vim.lsp.buf.format({
|
vim.lsp.buf.format({
|
||||||
@@ -85,21 +66,49 @@ function LSPRangeFormatFunction()
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Set different settings for different languages' LSP
|
|
||||||
local lspconfig = require('lspconfig')
|
|
||||||
|
|
||||||
lspconfig.ts_ls.setup {
|
-- VUE and Typescript as of vue-language-server 3.0.x
|
||||||
init_options = {
|
-- taken from:
|
||||||
plugins = {
|
-- https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.md#vtsls
|
||||||
{
|
local vue_language_server_path = '/home/saschal/.config/yarn/global/node_modules'
|
||||||
|
local vue_plugin = {
|
||||||
name = '@vue/typescript-plugin',
|
name = '@vue/typescript-plugin',
|
||||||
location = vim.fn.expand '$MASON/packages' .. '/vue-language-server' .. '/node_modules/@vue/language-server',
|
location = vue_language_server_path,
|
||||||
languages = { 'vue' },
|
languages = { 'vue' },
|
||||||
|
configNamespace = 'typescript',
|
||||||
|
}
|
||||||
|
local vtsls_config = {
|
||||||
|
settings = {
|
||||||
|
vtsls = {
|
||||||
|
tsserver = {
|
||||||
|
globalPlugins = {
|
||||||
|
vue_plugin,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
filetypes = { 'typescript', 'javascript', 'javascriptreact', 'typescriptreact', 'vue' },
|
filetypes = { 'typescript', 'javascript', 'javascriptreact', 'typescriptreact', 'vue' },
|
||||||
}
|
}
|
||||||
|
vim.lsp.config('vtsls', vtsls_config)
|
||||||
|
|
||||||
|
-- enable this list of lsps
|
||||||
|
local enable_this_lsp = {
|
||||||
|
'vue_ls',
|
||||||
|
'vtsls',
|
||||||
|
'gopls',
|
||||||
|
'bashls',
|
||||||
|
'html',
|
||||||
|
'lua_ls',
|
||||||
|
'jsonls', -- arch extra: vscode-json-languageserver
|
||||||
|
'kotlin_lsp', -- arch aur: kotlin-lsp-bin
|
||||||
|
'lemminx', -- arch aur: lemminx
|
||||||
|
'clangd',
|
||||||
|
}
|
||||||
|
|
||||||
|
for l in pairs(enable_this_lsp) do
|
||||||
|
vim.lsp.enable(enable_this_lsp[l])
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
-- add autoformat to Dioxus projects
|
-- add autoformat to Dioxus projects
|
||||||
vim.api.nvim_create_autocmd("BufWritePost", {
|
vim.api.nvim_create_autocmd("BufWritePost", {
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ vim.opt.expandtab = true -- tabs are spaces, mainly because of python and becaus
|
|||||||
vim.opt.number = true -- show absolute number
|
vim.opt.number = true -- show absolute number
|
||||||
vim.opt.relativenumber = false -- add numbers to each line on the left side
|
vim.opt.relativenumber = false -- add numbers to each line on the left side
|
||||||
vim.opt.cursorline = true -- highlight cursor line underneath the cursor horizontally
|
vim.opt.cursorline = true -- highlight cursor line underneath the cursor horizontally
|
||||||
|
vim.opt.guicursor = "" .. -- cursor highlight group needs to be Cursor to have lunaperche have a proper light cursor
|
||||||
|
"n-v-c-sm:block-Cursor,i-ci-ve:ver25-Cursor,r-cr-o:hor20,t:block-blinkon500-blinkoff500-Cursor"
|
||||||
vim.opt.splitbelow = true -- open new vertical split bottom
|
vim.opt.splitbelow = true -- open new vertical split bottom
|
||||||
vim.opt.splitright = true -- open new horizontal splits right
|
vim.opt.splitright = true -- open new horizontal splits right
|
||||||
vim.opt.termguicolors = true -- enable 24-bit RGB color in the TUI
|
vim.opt.termguicolors = true -- enable 24-bit RGB color in the TUI
|
||||||
|
|||||||
360
lua/plugins.lua
360
lua/plugins.lua
@@ -14,18 +14,103 @@ vim.opt.rtp:prepend(lazypath)
|
|||||||
require("lazy").setup({
|
require("lazy").setup({
|
||||||
-- Auto-completion engine
|
-- Auto-completion engine
|
||||||
{
|
{
|
||||||
"hrsh7th/nvim-cmp",
|
'saghen/blink.cmp',
|
||||||
dependencies = {
|
-- optional: provides snippets for the snippet source
|
||||||
"hrsh7th/cmp-nvim-lsp", -- lsp auto-completion
|
dependencies = { 'rafamadriz/friendly-snippets',
|
||||||
"hrsh7th/cmp-buffer", -- buffer auto-completion
|
{
|
||||||
"hrsh7th/cmp-path", -- path auto-completion
|
"L3MON4D3/LuaSnip",
|
||||||
"hrsh7th/cmp-cmdline", -- cmdline auto-completion
|
version = "v2.*"
|
||||||
"saadparwaiz1/cmp_luasnip", -- luasnip auto-completion
|
}
|
||||||
},
|
},
|
||||||
config = function()
|
|
||||||
require("config.nvim-cmp")
|
-- use a release tag to download pre-built binaries
|
||||||
end,
|
version = '1.*',
|
||||||
|
-- AND/OR build from source, requires nightly: https://rust-lang.github.io/rustup/concepts/channels.html#working-with-nightly-rust
|
||||||
|
-- build = 'cargo build --release',
|
||||||
|
-- If you use nix, you can build from source using latest nightly rust with:
|
||||||
|
-- build = 'nix run .#build-plugin',
|
||||||
|
|
||||||
|
---@module 'blink.cmp'
|
||||||
|
---@type blink.cmp.Config
|
||||||
|
opts = {
|
||||||
|
-- 'default' (recommended) for mappings similar to built-in completions (C-y to accept)
|
||||||
|
-- 'super-tab' for mappings similar to vscode (tab to accept)
|
||||||
|
-- 'enter' for enter to accept
|
||||||
|
-- 'none' for no mappings
|
||||||
|
--
|
||||||
|
-- All presets have the following mappings:
|
||||||
|
-- C-space: Open menu or open docs if already open
|
||||||
|
-- C-n/C-p or Up/Down: Select next/previous item
|
||||||
|
-- C-e: Hide menu
|
||||||
|
-- C-k: Toggle signature help (if signature.enabled = true)
|
||||||
|
--
|
||||||
|
-- See :h blink-cmp-config-keymap for defining your own keymap
|
||||||
|
keymap = {
|
||||||
|
-- preset = 'enter',
|
||||||
|
preset = 'default',
|
||||||
|
-- ['<Up>'] = { 'select_prev', 'fallback' },
|
||||||
|
-- ['<Down>'] = { 'select_next', 'fallback' },
|
||||||
|
-- ['<S-Tab>'] = { 'select_prev', 'fallback' },
|
||||||
|
-- ['<Tab>'] = { 'select_next', 'fallback' },
|
||||||
|
['<CR>'] = { 'select_and_accept', 'fallback' },
|
||||||
|
['<C-space>'] = { 'show_and_insert', 'fallback' },
|
||||||
|
-- ['<C-space>'] = { 'show', 'fallback' },
|
||||||
|
-- ['<C-n>'] = { 'accept', 'fallback' },
|
||||||
},
|
},
|
||||||
|
signature = { enabled = true },
|
||||||
|
|
||||||
|
appearance = {
|
||||||
|
-- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font'
|
||||||
|
-- Adjusts spacing to ensure icons are aligned
|
||||||
|
nerd_font_variant = 'mono'
|
||||||
|
},
|
||||||
|
|
||||||
|
-- (Default) Only show the documentation popup when manually triggered
|
||||||
|
completion = {
|
||||||
|
documentation = { auto_show = true },
|
||||||
|
menu = {
|
||||||
|
-- show more things in the menu
|
||||||
|
draw = {
|
||||||
|
columns = {
|
||||||
|
{ "label", "label_description", gap = 1 },
|
||||||
|
{ "kind_icon", "kind", gap = 1 },
|
||||||
|
{ "source_name" },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Default list of enabled providers defined so that you can extend it
|
||||||
|
-- elsewhere in your config, without redefining it, due to `opts_extend`
|
||||||
|
sources = {
|
||||||
|
default = { 'lsp', 'path', 'snippets', 'buffer', 'orgmode' },
|
||||||
|
-- per_filetype = {
|
||||||
|
-- org = { 'orgmode' }
|
||||||
|
-- },
|
||||||
|
|
||||||
|
providers = {
|
||||||
|
orgmode = {
|
||||||
|
name = 'Orgmode',
|
||||||
|
module = 'orgmode.org.autocompletion.blink',
|
||||||
|
fallbacks = { 'lsp', 'path', 'snippets', 'buffer' },
|
||||||
|
-- fallbacks = { 'buffer' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
snippets = { preset = 'luasnip' },
|
||||||
|
|
||||||
|
|
||||||
|
-- (Default) Rust fuzzy matcher for typo resistance and significantly better performance
|
||||||
|
-- You may use a lua implementation instead by using `implementation = "lua"` or fallback to the lua implementation,
|
||||||
|
-- when the Rust fuzzy matcher is not available, by using `implementation = "prefer_rust"`
|
||||||
|
--
|
||||||
|
-- See the fuzzy documentation for more information
|
||||||
|
fuzzy = { implementation = "prefer_rust_with_warning" }
|
||||||
|
},
|
||||||
|
opts_extend = { "sources.default" }
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
-- Code snippet engine
|
-- Code snippet engine
|
||||||
{
|
{
|
||||||
@@ -40,8 +125,8 @@ require("lazy").setup({
|
|||||||
--
|
--
|
||||||
-- LSP manager and others
|
-- LSP manager and others
|
||||||
--
|
--
|
||||||
"williamboman/mason.nvim",
|
-- "williamboman/mason.nvim",
|
||||||
"williamboman/mason-lspconfig.nvim",
|
-- "williamboman/mason-lspconfig.nvim",
|
||||||
"neovim/nvim-lspconfig",
|
"neovim/nvim-lspconfig",
|
||||||
|
|
||||||
-- Nice plugin to show what LSPs are doing in the background (and others
|
-- Nice plugin to show what LSPs are doing in the background (and others
|
||||||
@@ -63,6 +148,17 @@ require("lazy").setup({
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
-- fzf-lua
|
||||||
|
{
|
||||||
|
"ibhagwan/fzf-lua",
|
||||||
|
-- optional for icon support
|
||||||
|
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||||
|
config = function()
|
||||||
|
require('fzf-lua').register_ui_select()
|
||||||
|
end
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
-- neogit setup
|
-- neogit setup
|
||||||
{
|
{
|
||||||
"NeogitOrg/neogit",
|
"NeogitOrg/neogit",
|
||||||
@@ -89,10 +185,13 @@ require("lazy").setup({
|
|||||||
config = function()
|
config = function()
|
||||||
-- Setup orgmode
|
-- Setup orgmode
|
||||||
require('orgmode').setup({
|
require('orgmode').setup({
|
||||||
|
-- cf: https://github.com/nvim-orgmode/orgmode/blob/master/docs/configuration.org#mappings
|
||||||
mappings = {
|
mappings = {
|
||||||
org = {
|
org = {
|
||||||
org_move_subtree_up = { '<Leader>oK', '<C-M-Up>' },
|
org_move_subtree_up = { '<Leader>oK', '<C-M-Up>' },
|
||||||
org_move_subtree_down = { '<Leader>oJ', '<C-M-Down>' },
|
org_move_subtree_down = { '<Leader>oJ', '<C-M-Down>' },
|
||||||
|
org_promote_subtree = { '<s', '<C-M-Left>' },
|
||||||
|
org_demote_subtree = { '>s', '<C-M-Right>' },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
-- org_agenda_files = '~/orgfiles/**/*',
|
-- org_agenda_files = '~/orgfiles/**/*',
|
||||||
@@ -153,19 +252,6 @@ require("lazy").setup({
|
|||||||
-- comfortable table editing, esp. used in orgmode
|
-- comfortable table editing, esp. used in orgmode
|
||||||
{ 'dhruvasagar/vim-table-mode' },
|
{ 'dhruvasagar/vim-table-mode' },
|
||||||
|
|
||||||
-- fzf-lua
|
|
||||||
{
|
|
||||||
"ibhagwan/fzf-lua",
|
|
||||||
-- optional for icon support
|
|
||||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
|
||||||
config = function()
|
|
||||||
-- calling `setup` is optional for customization
|
|
||||||
local fzf = require("fzf-lua")
|
|
||||||
fzf.setup({ "default-title" })
|
|
||||||
fzf.register_ui_select()
|
|
||||||
end
|
|
||||||
},
|
|
||||||
|
|
||||||
-- which-key
|
-- which-key
|
||||||
{
|
{
|
||||||
"folke/which-key.nvim",
|
"folke/which-key.nvim",
|
||||||
@@ -316,15 +402,15 @@ require("lazy").setup({
|
|||||||
|
|
||||||
|
|
||||||
-- TODO, WARN, HACK, PERF, NOTE, TEST and others highlighting and searching
|
-- TODO, WARN, HACK, PERF, NOTE, TEST and others highlighting and searching
|
||||||
{
|
-- {
|
||||||
"folke/todo-comments.nvim",
|
-- "folke/todo-comments.nvim",
|
||||||
dependencies = { "nvim-lua/plenary.nvim" },
|
-- dependencies = { "nvim-lua/plenary.nvim" },
|
||||||
opts = {
|
-- opts = {
|
||||||
-- your configuration comes here
|
-- -- your configuration comes here
|
||||||
-- or leave it empty to use the default settings
|
-- -- or leave it empty to use the default settings
|
||||||
-- refer to the configuration section below
|
-- -- refer to the configuration section below
|
||||||
}
|
-- }
|
||||||
},
|
-- },
|
||||||
|
|
||||||
-- highlight word under cursor
|
-- highlight word under cursor
|
||||||
{
|
{
|
||||||
@@ -336,11 +422,6 @@ require("lazy").setup({
|
|||||||
"itchyny/calendar.vim"
|
"itchyny/calendar.vim"
|
||||||
},
|
},
|
||||||
|
|
||||||
-- treesitter asciidoc support
|
|
||||||
-- // NOTE.2025-01-17 seems to be broken
|
|
||||||
-- { "cpkio/nvim-treesitter-asciidoc" },
|
|
||||||
|
|
||||||
|
|
||||||
-- Greeter to run on NeoVim startup
|
-- Greeter to run on NeoVim startup
|
||||||
{
|
{
|
||||||
'goolord/alpha-nvim',
|
'goolord/alpha-nvim',
|
||||||
@@ -367,36 +448,6 @@ require("lazy").setup({
|
|||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Live Coding: sonic-pi music programming
|
|
||||||
{
|
|
||||||
'magicmonty/sonicpi.nvim',
|
|
||||||
config = function()
|
|
||||||
require('sonicpi').setup({
|
|
||||||
-- server_dir = '/opt/sonic-pi/app/server',
|
|
||||||
lsp_diagnostics = true,
|
|
||||||
mappings = {
|
|
||||||
{ 'n', '<leader>d', ':SonicPiStartDaemon<CR>', { desc = 'Sonic Pi: start daemon' } },
|
|
||||||
{ 'n', '<leader>s', require('sonicpi.remote').stop, { desc = 'Sonic Pi: stop' } },
|
|
||||||
{ 'i', '<M-s>', require('sonicpi.remote').stop, { desc = 'Sonic Pi: stop' } },
|
|
||||||
{ 'n', '<leader>r', require('sonicpi.remote').run_current_buffer, { desc = 'Sonic Pi: run' } },
|
|
||||||
{ 'i', '<M-r>', require('sonicpi.remote').run_current_buffer, { desc = 'Sonic Pi: run' } },
|
|
||||||
{ 'n', '<leader>R', ':SonicPiSendBuffer<CR>', { desc = 'Sonic Pi: send buffer' } },
|
|
||||||
{ 'i', '<M-R>', ':SonicPiSendBuffer<CR>', { desc = 'Sonic Pi: send buffer' } },
|
|
||||||
{ 'v', '<leader>s', require('sonicpi.remote').stop, { desc = 'Sonic Pi: stop' } },
|
|
||||||
{ 'v', '<leader>v',
|
|
||||||
function()
|
|
||||||
require('sonicpi.remote').run_code(SL_get_visual_selection())
|
|
||||||
end, { desc = 'Sonic Pi: send visual range' } }
|
|
||||||
},
|
|
||||||
single_file = true,
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
dependencies = {
|
|
||||||
'hrsh7th/nvim-cmp',
|
|
||||||
'kyazdani42/nvim-web-devicons'
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
-- easy term on a shortcut
|
-- easy term on a shortcut
|
||||||
{
|
{
|
||||||
"akinsho/toggleterm.nvim",
|
"akinsho/toggleterm.nvim",
|
||||||
@@ -416,18 +467,6 @@ require("lazy").setup({
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Live Coding: tidal cycles support
|
|
||||||
{
|
|
||||||
'tidalcycles/vim-tidal',
|
|
||||||
config = function()
|
|
||||||
vim.g.tidal_sc_enable = 1
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
|
|
||||||
-- debugging support, needed for things like rustaceanvim
|
|
||||||
{
|
|
||||||
'mfussenegger/nvim-dap'
|
|
||||||
},
|
|
||||||
|
|
||||||
-- show indent markers
|
-- show indent markers
|
||||||
{
|
{
|
||||||
@@ -438,147 +477,32 @@ require("lazy").setup({
|
|||||||
opts = {},
|
opts = {},
|
||||||
},
|
},
|
||||||
|
|
||||||
-- ollama and LLM integration
|
|
||||||
|
-- improved (wrapping!) diagnostics
|
||||||
{
|
{
|
||||||
{
|
"rachartier/tiny-inline-diagnostic.nvim",
|
||||||
"huynle/ogpt.nvim",
|
event = "VeryLazy", -- one of LspAttach, VeryLazy
|
||||||
event = "VeryLazy",
|
priority = 1000, -- needs to be loaded in first
|
||||||
opts = {
|
config = function()
|
||||||
default_provider = "ollama",
|
require('tiny-inline-diagnostic').setup({
|
||||||
edgy = true, -- enable this!
|
options = {
|
||||||
single_window = false, -- set this to true if you want only one OGPT window to appear at a time
|
use_icons_from_diagnostic = true,
|
||||||
providers = {
|
enable_on_insert = true,
|
||||||
ollama = {
|
show_all_diags_on_cursorline = true,
|
||||||
api_host = os.getenv("OLLAMA_API_HOST") or "http://localhost:11434",
|
|
||||||
api_key = os.getenv("OLLAMA_API_KEY") or "",
|
|
||||||
model = "llama3.2-vision:sl",
|
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
},
|
vim.diagnostic.config({ virtual_text = false }) -- Only if needed in your configuration, if you already have native LSP diagnostics
|
||||||
dependencies = {
|
end
|
||||||
"MunifTanjim/nui.nvim",
|
|
||||||
"nvim-lua/plenary.nvim",
|
|
||||||
"nvim-telescope/telescope.nvim"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"folke/edgy.nvim",
|
|
||||||
event = "VeryLazy",
|
|
||||||
init = function()
|
|
||||||
vim.opt.laststatus = 3
|
|
||||||
vim.opt.splitkeep = "screen" -- or "topline" or "screen"
|
|
||||||
end,
|
|
||||||
opts = {
|
|
||||||
exit_when_last = false,
|
|
||||||
animate = {
|
|
||||||
enabled = false,
|
|
||||||
},
|
|
||||||
wo = {
|
|
||||||
winbar = true,
|
|
||||||
winfixwidth = true,
|
|
||||||
winfixheight = false,
|
|
||||||
winhighlight = "WinBar:EdgyWinBar,Normal:EdgyNormal",
|
|
||||||
spell = false,
|
|
||||||
signcolumn = "no",
|
|
||||||
},
|
|
||||||
keys = {
|
|
||||||
-- -- close window
|
|
||||||
["q"] = function(win)
|
|
||||||
win:close()
|
|
||||||
end,
|
|
||||||
-- close sidebar
|
|
||||||
["Q"] = function(win)
|
|
||||||
win.view.edgebar:close()
|
|
||||||
end,
|
|
||||||
-- increase width
|
|
||||||
["<S-Right>"] = function(win)
|
|
||||||
win:resize("width", 3)
|
|
||||||
end,
|
|
||||||
-- decrease width
|
|
||||||
["<S-Left>"] = function(win)
|
|
||||||
win:resize("width", -3)
|
|
||||||
end,
|
|
||||||
-- increase height
|
|
||||||
["<S-Up>"] = function(win)
|
|
||||||
win:resize("height", 3)
|
|
||||||
end,
|
|
||||||
-- decrease height
|
|
||||||
["<S-Down>"] = function(win)
|
|
||||||
win:resize("height", -3)
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
right = {
|
|
||||||
{
|
|
||||||
title = "OGPT Popup",
|
|
||||||
ft = "ogpt-popup",
|
|
||||||
size = { width = 0.2 },
|
|
||||||
wo = {
|
|
||||||
wrap = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title = "OGPT Parameters",
|
|
||||||
ft = "ogpt-parameters-window",
|
|
||||||
size = { height = 6 },
|
|
||||||
wo = {
|
|
||||||
wrap = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title = "OGPT Template",
|
|
||||||
ft = "ogpt-template",
|
|
||||||
size = { height = 6 },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title = "OGPT Sessions",
|
|
||||||
ft = "ogpt-sessions",
|
|
||||||
size = { height = 6 },
|
|
||||||
wo = {
|
|
||||||
wrap = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title = "OGPT System Input",
|
|
||||||
ft = "ogpt-system-window",
|
|
||||||
size = { height = 6 },
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title = "OGPT",
|
|
||||||
ft = "ogpt-window",
|
|
||||||
size = { height = 0.5 },
|
|
||||||
wo = {
|
|
||||||
wrap = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title = "OGPT {{{selection}}}",
|
|
||||||
ft = "ogpt-selection",
|
|
||||||
size = { width = 80, height = 4 },
|
|
||||||
wo = {
|
|
||||||
wrap = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title = "OGPt {{{instruction}}}",
|
|
||||||
ft = "ogpt-instruction",
|
|
||||||
size = { width = 80, height = 4 },
|
|
||||||
wo = {
|
|
||||||
wrap = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title = "OGPT Chat",
|
|
||||||
ft = "ogpt-input",
|
|
||||||
size = { width = 80, height = 4 },
|
|
||||||
wo = {
|
|
||||||
wrap = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
|
|
||||||
-- new plugins here
|
|
||||||
|
|
||||||
|
-- 2025-05-21 not yet clear if this is a good thing or not
|
||||||
|
{
|
||||||
|
'xemptuous/sqlua.nvim',
|
||||||
|
lazy = true,
|
||||||
|
cmd = 'SQLua',
|
||||||
|
config = function() require('sqlua').setup() end
|
||||||
},
|
},
|
||||||
|
|
||||||
|
-- new plugins BEFORE here
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,16 +1,24 @@
|
|||||||
" Vim Syntax file for CON files
|
" Vim Syntax file for CON files
|
||||||
|
|
||||||
syn match SetLength /^\d\{3\}/ nextgroup=SetKeyword,SetKeywordMarked
|
syn match SetLength /^\d\{3\}/ nextgroup=SetKeyword,SetKeywordMarked,SetKeywordInfoMarked
|
||||||
syn match SetKeyword /\d\{4\}/ contained
|
|
||||||
syn match SetKeywordMarked /310[123]\|5000/ contained nextgroup=SetKeywordMarkedInfo
|
|
||||||
syn match SetKeywordMarkedInfo /..*/ contained
|
|
||||||
|
|
||||||
hi SetLength guifg=grey
|
hi SetLength guifg=grey
|
||||||
|
|
||||||
|
syn match SetKeyword /\d\{4\}/ contained
|
||||||
hi SetKeyword guifg=lightgreen
|
hi SetKeyword guifg=lightgreen
|
||||||
|
|
||||||
|
" Visitations marked completely
|
||||||
|
syn match SetKeywordMarked /310[123]\|5000/ contained nextgroup=SetKeywordMarkedInfo
|
||||||
hi SetKeywordMarked gui=inverse guifg=lightgreen
|
hi SetKeywordMarked gui=inverse guifg=lightgreen
|
||||||
|
|
||||||
|
" Treatments only mark treatment info
|
||||||
|
syn match SetKeywordInfoMarked /5001/ contained nextgroup=SetKeywordMarkedInfo
|
||||||
|
hi SetKeywordInfoMarked guifg=lightgreen
|
||||||
|
|
||||||
|
" mark keyword value
|
||||||
|
syn match SetKeywordMarkedInfo /..*/ contained
|
||||||
hi SetKeywordMarkedInfo gui=inverse
|
hi SetKeywordMarkedInfo gui=inverse
|
||||||
|
|
||||||
|
" Mark datasets like patient
|
||||||
syn match SetStart /^0138000/ nextgroup=SetType
|
syn match SetStart /^0138000/ nextgroup=SetType
|
||||||
syn match SetType /con0\|con9\|besa\|adt0\|adt9\|010[1-4]\|rvsa/ contained " 0101
|
syn match SetType /con0\|con9\|besa\|adt0\|adt9\|010[1-4]\|rvsa/ contained " 0101
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user