Files
neovim-configuration/lua/keybindings.lua

115 lines
4.4 KiB
Lua

-- Setup fzf-lua keybindings and some other searches
local fzf = require('fzf-lua')
vim.keymap.set('n', '<leader>b', fzf.buffers, { desc = "Buffers" })
vim.keymap.set('n', '<leader>fG', fzf.grep_cword, { desc = "Grep word under cursor" })
vim.keymap.set('n', '<leader>fT', fzf.treesitter, { desc = "Treesitter symbols" })
vim.keymap.set('n', '<leader>fc', fzf.commands, { desc = "Commands" })
vim.keymap.set('n', '<leader>ff', fzf.files, { desc = "Find file" })
vim.keymap.set('n', '<leader>fg', fzf.live_grep, { desc = "Grep" })
vim.keymap.set('n', '<leader>fm', fzf.manpages, { desc = "Manpages" })
vim.keymap.set('n', '<leader>fr', fzf.resume, { desc = "Resume last search" })
vim.keymap.set('n', '<leader>fs', fzf.blines, { desc = "Search buffer" })
vim.keymap.set('n', '<leader>ft', ":TodoFzfLua<CR>", { desc = "Todos" })
-- use fzf buffer lines as default search
vim.keymap.set('n', '<C-/>', 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', '<leader>g', ":Neogit<CR>", { desc = "Neogit" })
vim.keymap.set('n', '<leader>T', ":Neotree reveal<CR>", { desc = "File Manager" })
-- calendar
vim.keymap.set('n', '<leader>c', ":Calendar -split=horizontal -position=below -height=12<CR>", { desc = "Show calendar below" })
vim.keymap.set('n', '<leader>C', ":Calendar -view=year -split=vertical -width=27<CR>", { desc = "Show calendar right" })
-- Open current file in browser (chromium)
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
vim.keymap.set('n', '<leader>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', '<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') end, { desc = "Save window layout" })
vim.keymap.set('n', '<leader>sr', function() layout.restore('default') end, { desc = "Restore window layout" })
------------------------------------------
--
-- Word higlighting
--
------------------------------------------
local mywords = require('mywords')
vim.keymap.set('n', '<space>mm', mywords.hl_toggle, { desc = "Highlight current word" })
vim.keymap.set('n', '<space>mr', mywords.hl_toggle_regex, { desc = "Highlight regexp" })
vim.keymap.set('n', '<space>mc', mywords.uhl_all, { desc = "Clear all highlights" })
------------------------------------------
--
-- Some convenience keybindings
--
------------------------------------------
vim.keymap.set('n', '<M-Up>', ":m -2<cr>", { desc = "Move current line up" })
vim.keymap.set('n', '<M-Down>', ":m +1<cr>", { desc = "Move current line down" })
vim.keymap.set('i', '<M-Up>', "<c-o>:m -2<cr>", { desc = "Move current line up" })
vim.keymap.set('i', '<M-Down>', "<c-o>:m +1<cr>", { desc = "Move current line down" })
------------------------------------------
--
-- Shortcuts which are known from Emacs
--
------------------------------------------
vim.keymap.set('n', '<space>q', "gwap", { desc = "Wrap paragraph" })
vim.keymap.set('n', '<esc><esc>', ":silent! nohls<CR>", { desc = "Clear search" })
vim.keymap.set('i', '<c-Del>', '<c-o>dW', {desc = "Delete word right" })
-- horizontally scroll with mouse
vim.keymap.set('n', '<S-ScrollWheelUp>', 'zh')
vim.keymap.set('n', '<S-ScrollWheelDown>', 'zl')
vim.keymap.set('i', '<S-ScrollWheelUp>', '<c-o>zh')
vim.keymap.set('i', '<S-ScrollWheelDown>', '<c-o>zl')