Vis Editor updates.

This commit is contained in:
2026-10-06 09:14:01 +02:00
parent bc408c412b
commit aeb9df3e0e
7 changed files with 382 additions and 286 deletions
+54 -30
View File
@@ -1,51 +1,75 @@
-- load the standard vis module (provides the Lua API)
require('vis')
-- ~/.config/vis/fzf.lua and ~/.config/vis/build.lua
local fzf = require('fzf')
local pickers = require('pickers')
local build = require('build')
require('plugins/vis-ctags')
-- ---------------------------------------------------------------------------
-- Odin syntax highlighting (lexer lives in ~/.config/vis/lexers/odin.lua)
-- Syntax highlighting: ~/.config/vis/lexers/odin.lua
-- ---------------------------------------------------------------------------
if vis.ftdetect then
if vis.ftdetect.extensions then -- newer vis (git master)
vis.ftdetect.extensions.odin = 'odin'
end
if vis.ftdetect.filetypes then -- vis 0.9 and earlier
vis.ftdetect.filetypes.odin = { ext = { '%.odin$' } }
end
-- vis 0.9 and earlier
if vis.ftdetect.filetypes then
vis.ftdetect.filetypes.odin = { ext = { '%.odin$' } }
end
end
-- ---------------------------------------------------------------------------
-- Global options, key mappings and commands
-- ---------------------------------------------------------------------------
vis.events.subscribe(vis.events.INIT, function()
vis:command('set escdelay 15')
vis:command('set autoindent on')
vis:command('set theme custom')
vis:command('set escdelay 1')
vis:command('set autoindent off')
vis:command('set theme custom_zen')
-- pickers
vis:map(vis.modes.NORMAL, '<C-p>', fzf.files, 'Fuzzy find / create a file')
vis:map(vis.modes.NORMAL, '<C-f>', fzf.grep, 'Live grep the project with ripgrep')
vis:command_register('files', function() fzf.files() return true end, 'Fuzzy find / create a file')
vis:command_register('grep', function() fzf.grep() return true end, 'Live grep the project with ripgrep')
vis:command_register('fm', function() fzf.fm() return true end, 'Pick a file with a terminal file manager')
-- pickers
vis:map(vis.modes.NORMAL, '<C-p>', pickers.files, 'Fuzzy find / create a file')
vis:map(vis.modes.NORMAL, '<C-f>', pickers.grep, 'Live grep the project with ripgrep')
vis:map(vis.modes.NORMAL, '<C-e>', pickers.fm, 'terminal file manager')
-- picker commands
vis:command_register('files', function() pickers.files() return true end, 'Fuzzy find / create a file')
vis:command_register('grep', function() pickers.grep() return true end, 'Live grep the project with ripgrep')
vis:command_register('fm', function() pickers.fm() return true end, 'Pick a file with a terminal file manager')
vis:command_register('git', function() pickers.git() return true end, 'Open gitu')
-- build.sh setup
vis:map(vis.modes.NORMAL, '<C-b>', function() build.run({}) end, 'Run ./build.sh')
vis:command_register('build', function(argv)
local args = {}
for i = 1, #argv do table.insert(args, argv[i]) end
build.run(args)
return true
end, 'Run ./build.sh with optional flags, e.g. :build run')
-- system clipboard
local function clip_copy()
vis:feedkeys(':>wl-copy 2>/dev/null<Enter>')
vis:feedkeys('<Escape>') -- drop the selection / leave visual mode
end
local function clip_paste()
vis:feedkeys(':<wl-paste --no-newline<Enter>')
vis:feedkeys('<Escape>') -- clear any selection left on the pasted text
end
vis:map(vis.modes.VISUAL, '<C-y>', clip_copy, 'Copy selection to system clipboard')
vis:map(vis.modes.VISUAL, '<C-v>', clip_paste, 'Paste system clipboard at cursor')
vis:map(vis.modes.NORMAL, '<C-v>', clip_paste, 'Paste system clipboard at cursor')
-- ctags: 'gd' to jump to tag definition under cursor
-- vis-ctags binds <C-]> (jump) and <C-t> (back) itself;
vis:map(vis.modes.NORMAL, 'gd', '<C-]>')
vis:map(vis.modes.NORMAL, '<C-b>', function() build.run({}) end, 'Run ./build.sh')
vis:command_register('build', function(argv)
local args = {}
for i = 1, #argv do table.insert(args, argv[i]) end
build.run(args)
return true
end, 'Run ./build.sh with optional flags, e.g. :build run')
end)
-- ---------------------------------------------------------------------------
-- Per-window options
-- ---------------------------------------------------------------------------
vis.events.subscribe(vis.events.WIN_OPEN, function(win) -- luacheck: no unused args
vis:command('set tabwidth 4')
vis:command('set expandtab on')
vis:command('set number on')
vis.events.subscribe(vis.events.WIN_OPEN, function(win)
vis:command('set tabwidth 4')
vis:command('set expandtab on')
vis:command('set number on')
end)