summaryrefslogtreecommitdiffstats
path: root/lua/conf/binds.lua
blob: 3e9a3aadd88f2d8fb713fa2560920373ced6fe78 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
local conf = require('core.conf')

local function map(mode, bind, cmd, opts)
  opts = opts or {}
  opts['noremap'] = true
  opts['silent'] = true

  if type(bind) == 'table' then
    for i in pairs(bind) do
      vim.keymap.set(mode, bind[i], cmd, opts)
    end
  elseif type(bind) == 'string' then
    vim.keymap.set(mode, bind, cmd, opts)
  end
end

-- vim binds ------------------------------------------------------------------
g.mapleader = ' ' -- set leader key

map('x', '<leader>p', [["_dP]], { desc = 'Greatest remap of all time.' })
map('n', '<esc>', ':nohlsearch<Bar>:echo<CR>', { desc = 'Clear search.' })
map('t', '<esc>', '<C-\\><C-n>', { desc = 'make <esc> work in terminals.' })
-- move selected text up/down
map('v', '<S-k>', ":m '<-2<CR>gv=gv", { desc = 'Move selected text up.' })
map('v', '<S-j>', ":m '>+1<CR>gv=gv", { desc = 'Move selected text down.' })

-- the cursor STAYS IN THE MIDDLE
map('n', '<S-j>', 'mzJ`z<cmd>delm z<CR>') -- when combining lines
map('n', 'n', 'nzzzv') -- when searching
map('n', 'N', 'Nzzzv')
map('n', '<C-d>', '<C-d>zz') -- half page jumping
map('n', '<C-u>', '<C-u>zz')

map('n', '<leader>x', '<cmd>!chmod +x "%"<CR>') -- execute order 111

-- add some keybinds to the file view (netrw)
a.nvim_create_autocmd('FileType', {
  pattern = 'netrw',
  callback = function()
    local bind = function(lhs, rhs)
      vim.keymap.set('n', lhs, rhs, { remap = true, buffer = true })
    end
    bind('h', '-^') -- Go up a directory
    bind('l', '<CR>') -- Go down a directory / open a file
    bind('.', 'gh') -- Toggle hidden files
    bind('P', '<C-w>z') -- Close preview window
    bind('<esc>', '<cmd>q<CR>') -- Close netrw
  end
})

-- tabs
map('n', '[]', '<cmd>tabnew<CR>')
map('n', '][', '<cmd>tabc<CR>')
map('n', '[[', '<cmd>tabp<CR>')
map('n', ']]', '<cmd>tabN<CR>')

-- config binds ---------------------------------------------------------------
map('n', '<leader>m', conf.configmenu, { desc = 'Neovim config manager menu', })

-- plugin binds ---------------------------------------------------------------

-- pretty lsp view
map('n', 'gd', '<CMD>Glance definitions<CR>')
map('n', 'gr', '<CMD>Glance references<CR>')
map('n', 'gy', '<CMD>Glance type_definitions<CR>')
map('n', 'gi', '<CMD>Glance implementations<CR>')

if pcall(require, "treesj") then
  local treesj = require('treesj') -- treesj
  map('n', '<leader>j', treesj.toggle)
end

if pcall(require, "telescope") then
  local telebuilt = require('telescope.builtin') -- telescope
  -- local telexten = require('telescope').extensions
  map('n', '<leader>sf', telebuilt.find_files, { desc = 'Find files.' })
  map('n', '<leader>so', telebuilt.oldfiles, { desc = 'Find old files.' })
  map('n', '<leader>sg', telebuilt.git_files, { desc = 'Find git files.' })
  -- search urls in buffer
  map('n', '<leader>su', '<Cmd>UrlView<CR>', { desc = 'Find urls in buffer.' })
  -- search lsp symbols
  map('n', '<leader>ss', telebuilt.lsp_document_symbols,
    { desc = 'Find LSP Symbols.' })
  -- search for keybinds
  map('n', '<leader>sk', telebuilt.keymaps,
    { desc = 'Find nvim Keymaps.' })
  -- search for highlights
  map('n', '<leader>sh', telebuilt.highlights,
    { desc = 'Find nvim Highlights.' })
  -- search for autocommands
  map('n', '<leader>sa', telebuilt.autocommands,
    { desc = 'Find nvim Autocommands.' })
  -- search for vim options
  map('n', '<leader>sv', telebuilt.vim_options, { desc = 'Find vim options.' })
  -- search for string in project
  map('n', '<leader>sp', function()
    vim.ui.input({ prompt = 'Find string in project' }, function(input)
      if not input or input == '' then
        vim.notify('No query!', vim.log.levels.WARN, { title = misc.appid })
        return nil
      end
      telebuilt.grep_string({ search = input })
    end)
  end, { desc = 'Find string in project.' })
  -- Code Actions (requires telescope)
  if pcall(require, "actions-preview") then
    map({ "n", "v" }, "<leader>ca", require("actions-preview").code_actions, {
      desc = 'preview code actions'
    })
  end
end

map('n', '<leader>u', '<cmd>UndotreeToggle<CR>', { desc = 'Open undo tree.' })
map('n', '<leader>f', '<cmd>SFMToggle<CR>', { desc = 'Open file tree view.' })
map('n', '<leader>b', '<cmd>JABSOpen<CR>', { desc = 'Switch between buffers.' })

if pcall(require, "smart-splits") then
  local smartsplits = require('smart-splits') -- resizing buffers (toggleable)
  map('n', '<leader>r', smartsplits.start_resize_mode)
end

-- toggle term (don't use leader key in these binds)
map({'n', 't'}, '<C-\\>', '<cmd>ToggleTerm direction=float<CR>')
map({'n', 't'}, '<C-g>', '<cmd>lua _glow()<CR>')

-- git
map('n', '<leader>gp', '<cmd>Gitsigns preview_hunk_inline<CR>')
map('n', '<leader>gs', '<cmd>Gitsigns stage_hunk<CR>')
map('n', '<leader>gb', '<cmd>Gitsigns blame_line<CR>')
map('n', '<leader>g]', '<cmd>Gitsigns next_hunk<CR>')
map('n', '<leader>g[', '<cmd>Gitsigns prev_hunk<CR>')

-- neogen
if pcall(require, "neogen") then
  map('n', '<leader>df', require("neogen").generate, {
    desc = 'Generate anotations',
  })
end

-- venn
function _G.Toggle_venn()
  local mapb = vim.api.nvim_buf_set_keymap
  local venn_enabled = vim.inspect(vim.b.venn_enabled)
  if venn_enabled == "nil" then
    vim.b.venn_enabled = true
    vim.cmd([[setlocal ve=all]])
    -- draw a line on HJKL keystokes
    mapb(0, "n", "J", "<C-v>j:VBox<CR>", { noremap = true })
    mapb(0, "n", "K", "<C-v>k:VBox<CR>", { noremap = true })
    mapb(0, "n", "L", "<C-v>l:VBox<CR>", { noremap = true })
    mapb(0, "n", "H", "<C-v>h:VBox<CR>", { noremap = true })
    -- draw a box by pressing "f" with visual selection
    mapb(0, "v", "f", ":VBox<CR>", { noremap = true })
  else
    vim.cmd[[setlocal ve=]]
    vim.cmd[[mapclear <buffer>]]
    vim.b.venn_enabled = nil
  end
end
-- toggle keymappings for venn using <leader>v
map('n', '<leader>v', ":lua Toggle_venn()<CR>")