-- Setup fzf-lua keybindings and some other searches local fzf = require('fzf-lua') vim.keymap.set('n', 'b', fzf.buffers, { desc = "Buffers" }) vim.keymap.set('n', 'fG', fzf.grep_cword, { desc = "Grep word under cursor" }) vim.keymap.set('n', 'fT', fzf.treesitter, { desc = "Treesitter symbols" }) vim.keymap.set('n', 'fc', fzf.commands, { desc = "Commands" }) vim.keymap.set('n', 'ff', fzf.files, { desc = "Find file" }) vim.keymap.set('n', 'fg', fzf.live_grep, { desc = "Grep" }) vim.keymap.set('n', 'fm', fzf.manpages, { desc = "Manpages" }) vim.keymap.set('n', 'fr', fzf.resume, { desc = "Resume last search" }) vim.keymap.set('n', 'fs', fzf.blines, { desc = "Search buffer" }) vim.keymap.set('n', 'ft', ":TodoFzfLua", { desc = "Todos" }) -- use fzf buffer lines as default search vim.keymap.set('n', '', fzf.blines, { desc = "Search buffer" }) vim.keymap.set('n', 'z=', fzf.spell_suggest, { desc = "Spelling suggestions" }) -- open file manager and git vim.keymap.set('n', 'g', ":Neogit", { desc = "Neogit" }) vim.keymap.set('n', 'T', ":Neotree reveal", { desc = "File Manager" }) -- calendar vim.keymap.set('n', 'c', ":Calendar -split=horizontal -position=below -height=12", { desc = "Show calendar below" }) vim.keymap.set('n', 'C', ":Calendar -view=year -split=vertical -width=27", { desc = "Show calendar right" }) -- Open current file in browser (chromium) vim.keymap.set('n', 'o', ":silent !chromium '%'", { desc = "Open in browser" }) -- toggle colorscheme between dark and light vim.keymap.set('n', 'm', function() if vim.opt.background:get() == "dark" then vim.o.background = "light" else vim.o.background = "dark" end end, { desc = "Toggle dark/light mode" }) -- -- configure workspaces -- also add a custom picker to fzf -- local workspaces = require('workspaces') local workspaces_fzf_picker = function(opts) local fzf_lua = require('fzf-lua') opts = opts or {} opts.prompt = "Workspaces> " opts.actions = { ['default'] = function(selected) workspaces.open(selected[1]) end } fzf_lua.fzf_exec(function(fzf_cb) -- NOP local ws = workspaces.get() ws = ws or {} for i = 1, #ws do fzf_cb(ws[i].name) end fzf_cb() -- EOF end, opts) end vim.keymap.set('n', 'w', workspaces_fzf_picker, { desc = "Workspaces" }) ------------------------------------------ -- -- Window layout save and restore -- ------------------------------------------ local layout = require('layout') vim.keymap.set('n', 'ss', function() layout.save('default') end, { desc = "Save window layout" }) vim.keymap.set('n', 'sr', function() layout.restore('default') end, { desc = "Restore window layout" }) ------------------------------------------ -- -- Word higlighting -- ------------------------------------------ local mywords = require('mywords') vim.keymap.set('n', 'mm', mywords.hl_toggle, { desc = "Highlight current word" }) vim.keymap.set('n', 'mr', mywords.hl_toggle_regex, { desc = "Highlight regexp" }) vim.keymap.set('n', 'mc', mywords.uhl_all, { desc = "Clear all highlights" }) ------------------------------------------ -- -- Some convenience keybindings -- ------------------------------------------ vim.keymap.set('n', '', ":m -2", { desc = "Move current line up" }) vim.keymap.set('n', '', ":m +1", { desc = "Move current line down" }) vim.keymap.set('i', '', ":m -2", { desc = "Move current line up" }) vim.keymap.set('i', '', ":m +1", { desc = "Move current line down" }) ------------------------------------------ -- -- Shortcuts which are known from Emacs -- ------------------------------------------ vim.keymap.set('n', 'q', "gwap", { desc = "Wrap paragraph" }) vim.keymap.set('n', '', ":silent! nohls", { desc = "Clear search" }) vim.keymap.set('i', '', 'dW', {desc = "Delete word right" }) -- horizontally scroll with mouse vim.keymap.set('n', '', 'zh') vim.keymap.set('n', '', 'zl') vim.keymap.set('i', '', 'zh') vim.keymap.set('i', '', 'zl')