init nvim
This commit is contained in:
479
pwnvim/mappings.lua
Normal file
479
pwnvim/mappings.lua
Normal file
@@ -0,0 +1,479 @@
|
||||
-- We use which-key in mappings, which is loaded before plugins, so set up here
|
||||
local which_key = require("which-key")
|
||||
which_key.setup({
|
||||
plugins = {
|
||||
marks = true, -- shows a list of your marks on ' and `
|
||||
registers = true, -- shows your registers on " in NORMAL or <C-r> in INSERT mode
|
||||
spelling = {
|
||||
enabled = true, -- enabling this will show WhichKey when pressing z= to select spelling suggestions
|
||||
suggestions = 20 -- how many suggestions should be shown in the list?
|
||||
},
|
||||
-- the presets plugin, adds help for a bunch of default keybindings in Neovim
|
||||
-- No actual key bindings are created
|
||||
presets = {
|
||||
operators = true, -- adds help for operators like d, y, ... and registers them for motion / text object completion
|
||||
motions = false, -- adds help for motions
|
||||
text_objects = true, -- help for text objects triggered after entering an operator
|
||||
windows = true, -- default bindings on <c-w>
|
||||
nav = true, -- misc bindings to work with windows
|
||||
z = true, -- bindings for folds, spelling and others prefixed with z
|
||||
g = true -- bindings for prefixed with g
|
||||
}
|
||||
},
|
||||
icons = {
|
||||
breadcrumb = "»", -- symbol used in the command line area that shows your active key combo
|
||||
separator = "➜", -- symbol used between a key and it's label
|
||||
group = "+" -- symbol prepended to a group
|
||||
},
|
||||
popup_mappings = {
|
||||
scroll_down = "<c-d>", -- binding to scroll down inside the popup
|
||||
scroll_up = "<c-u>" -- binding to scroll up inside the popup
|
||||
},
|
||||
window = {
|
||||
border = "rounded", -- none, single, double, shadow
|
||||
position = "bottom", -- bottom, top
|
||||
margin = { 1, 0, 1, 0 }, -- extra window margin [top, right, bottom, left]
|
||||
padding = { 2, 2, 2, 2 }, -- extra window padding [top, right, bottom, left]
|
||||
winblend = 0
|
||||
},
|
||||
layout = {
|
||||
height = { min = 4, max = 25 }, -- min and max height of the columns
|
||||
width = { min = 20, max = 50 }, -- min and max width of the columns
|
||||
spacing = 3, -- spacing between columns
|
||||
align = "left" -- align columns left, center or right
|
||||
},
|
||||
ignore_missing = true, -- enable this to hide mappings for which you didn't specify a label
|
||||
hidden = {
|
||||
"<silent>", "<CMD>", "<cmd>", "<Cmd>", "<cr>", "<CR>", "call", "lua",
|
||||
"^:", "^ "
|
||||
}, -- hide mapping boilerplate
|
||||
show_help = true, -- show help message on the command line when the popup is visible
|
||||
triggers = "auto" -- automatically setup triggers
|
||||
-- triggers = {"<leader>"} -- or specify a list manually
|
||||
})
|
||||
-- This file is for mappings that will work regardless of filetype. Always available.
|
||||
local options = { noremap = true, silent = true }
|
||||
|
||||
-- Make F1 act like escape for accidental hits
|
||||
vim.api.nvim_set_keymap('', '#1', '<Esc>', options)
|
||||
vim.api.nvim_set_keymap('!', '#1', '<Esc>', options)
|
||||
|
||||
-- TODO: try using the WinNew and WinClosed autocmd events with CHADtree filetype
|
||||
-- to remap #2 to either open or close commands. Or BufDelete, BufAdd, BufWinLeave, BufWinEnter
|
||||
-- Make F2 bring up a file browser
|
||||
vim.api.nvim_set_keymap('', '#2', '<cmd>NvimTreeToggle<CR>', options)
|
||||
vim.api.nvim_set_keymap('!', '#2', '<cmd>NvimTreeToggle<CR>', options)
|
||||
vim.api.nvim_set_keymap('', '-', '<cmd>NvimTreeFindFile<CR>', options)
|
||||
|
||||
-- Make ctrl-p open a file finder
|
||||
-- When using ctrl-p, screen out media files that we probably don't want
|
||||
-- to open in vim. And if we really want, then we can use ,ff
|
||||
vim.api
|
||||
.nvim_set_keymap('', '<c-p>', ':silent Telescope find_files<CR>', options)
|
||||
vim.api.nvim_set_keymap('!', '<c-p>', '<ESC>:silent Telescope find_files<CR>',
|
||||
options)
|
||||
|
||||
-- Make F4 toggle showing invisible characters
|
||||
vim.api
|
||||
.nvim_set_keymap('', '_z', ':set list<CR>:map #4 _Z<CR>', { silent = true })
|
||||
vim.api.nvim_set_keymap('', '_Z', ':set nolist<CR>:map #4 _z<CR>',
|
||||
{ silent = true })
|
||||
vim.api.nvim_set_keymap('', '#4', '_Z', {})
|
||||
|
||||
-- Enter the date on F8
|
||||
vim.api.nvim_set_keymap('', '#8', '"=strftime("%Y-%m-%d")<CR>P', options)
|
||||
vim.api.nvim_set_keymap('!', '#8', '<C-R>=strftime("%Y-%m-%d")<CR>', options)
|
||||
|
||||
-- Make F9 toggle distraction-free writing setup
|
||||
vim.api.nvim_set_keymap('', '#9', ':TZAtaraxis<CR>', options)
|
||||
vim.api.nvim_set_keymap('!', '#9', '<ESC>:TZAtaraxis<CR>', options)
|
||||
|
||||
-- Make F10 quicklook. Not sure how to do this best in linux so mac only for now
|
||||
vim.api.nvim_set_keymap('', '<F10>', ':silent !qlmanage -p "%"<CR>', options)
|
||||
vim.api.nvim_set_keymap('!', '<F10>', '<ESC>:silent !qlmanage -p "%"<CR>', options)
|
||||
|
||||
-- Make F12 restart highlighting
|
||||
vim.api.nvim_set_keymap('', '<F12>', ':syntax sync fromstart<CR>', options)
|
||||
vim.api
|
||||
.nvim_set_keymap('!', '<F12>', '<C-o>:syntax sync fromstart<CR>', options)
|
||||
|
||||
-- Have ctrl-l continue to do what it did, but also temp clear search match highlighting
|
||||
vim.api.nvim_set_keymap('', '<C-l>', ':<C-u>nohlsearch<CR><C-l>',
|
||||
{ silent = true })
|
||||
-- Yank to end of line using more familiar method
|
||||
vim.api.nvim_set_keymap('', 'Y', 'y$', options)
|
||||
|
||||
-- Center screen vertically when navigating by half screens
|
||||
vim.keymap.set("n", "<C-d>", "<C-d>zz")
|
||||
vim.keymap.set("n", "<C-u>", "<C-u>zz")
|
||||
|
||||
-- Center search hits vertically on screen
|
||||
vim.keymap.set("n", "n", "nzzzv")
|
||||
vim.keymap.set("n", "N", "Nzzzv")
|
||||
|
||||
-- Move visually selected lines up and down
|
||||
vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv")
|
||||
vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv")
|
||||
|
||||
local global_leader_opts = {
|
||||
mode = "n", -- NORMAL mode
|
||||
prefix = "<leader>",
|
||||
buffer = nil, -- Global mappings. Specify a buffer number for buffer local mappings
|
||||
silent = true, -- use `silent` when creating keymaps
|
||||
noremap = true, -- use `noremap` when creating keymaps
|
||||
nowait = true -- use `nowait` when creating keymaps
|
||||
}
|
||||
local global_leader_opts_visual = {
|
||||
mode = "v", -- VISUAL mode
|
||||
prefix = "<leader>",
|
||||
buffer = nil, -- Global mappings. Specify a buffer number for buffer local mappings
|
||||
silent = true, -- use `silent` when creating keymaps
|
||||
noremap = true, -- use `noremap` when creating keymaps
|
||||
nowait = true -- use `nowait` when creating keymaps
|
||||
}
|
||||
|
||||
local leader_mappings = {
|
||||
["e"] = { "<cmd>NvimTreeToggle<cr>", "Explorer" },
|
||||
["/"] = { "<cmd>nohlsearch<CR>", "No Highlight" },
|
||||
["x"] = { "<cmd>Bdelete!<CR>", "Close Buffer" },
|
||||
["q"] = {
|
||||
[["<cmd>".(get(getqflist({"winid": 1}), "winid") != 0? "cclose" : "botright copen")."<cr>"]],
|
||||
"Toggle Quicklist"
|
||||
},
|
||||
f = {
|
||||
name = "Find",
|
||||
f = { "<cmd>lua require('telescope.builtin').find_files()<CR>", "Files" },
|
||||
g = { "<cmd>lua require('telescope.builtin').live_grep()<CR>", "Grep" },
|
||||
b = {
|
||||
"<cmd>lua require('telescope.builtin').buffers(require('telescope.themes').get_dropdown{previewer = false})<cr>",
|
||||
"Buffers"
|
||||
},
|
||||
h = { "<cmd>lua require('telescope.builtin').oldfiles()<cr>", "History" },
|
||||
q = { "<cmd>lua require('telescope.builtin').quickfix()<cr>", "Quickfix" },
|
||||
l = { "<cmd>lua require('telescope.builtin').loclist()<cr>", "Loclist" },
|
||||
p = { "<cmd>Telescope projects<cr>", "Projects" },
|
||||
k = { "<cmd>Telescope keymaps<cr>", "Keymaps" },
|
||||
t = { "<cmd>lua require('telescope.builtin').grep_string{search = \"^\\\\s*[*-] \\\\[ \\\\]\", previewer = false, glob_pattern = \"*.md\", use_regex = true, disable_coordinates=true}<cr>",
|
||||
"Todos" },
|
||||
n = { "<Cmd>ZkNotes { match = {vim.fn.input('Search: ')} }<CR>", "Find" },
|
||||
},
|
||||
-- Quickly change indent defaults in a file
|
||||
i = {
|
||||
name = "Indent",
|
||||
["1"] = { "<cmd>lua require('pwnvim.options').tabindent()<CR>", "Tab" },
|
||||
["2"] = {
|
||||
"<cmd>lua require('pwnvim.options').twospaceindent()<CR>", "Two Space"
|
||||
},
|
||||
["4"] = {
|
||||
"<cmd>lua require('pwnvim.options').fourspaceindent()<CR>",
|
||||
"Four Space"
|
||||
},
|
||||
r = { "<cmd>%retab!<cr>", "Change existing indent to current with retab" }
|
||||
},
|
||||
g = {
|
||||
name = "Git",
|
||||
s = { "<cmd>lua require('telescope.builtin').git_status()<cr>", "Status" },
|
||||
b = {
|
||||
"<cmd>lua require('telescope.builtin').git_branches()<cr>",
|
||||
"Branches"
|
||||
},
|
||||
c = {
|
||||
"<cmd>lua require('telescope.builtin').git_commits()<cr>", "Commits"
|
||||
},
|
||||
h = { "<cmd>lua require 'gitsigns'.toggle_current_line_blame<cr>", "Toggle Blame" },
|
||||
["-"] = { "<cmd>lua require 'gitsigns'.reset_hunk()<cr>", "Reset Hunk" },
|
||||
["+"] = { "<cmd>lua require 'gitsigns'.stage_hunk()<cr>", "Stage Hunk" }
|
||||
},
|
||||
n = {
|
||||
name = "Notes",
|
||||
d = {
|
||||
"<cmd>ZkNew { dir = vim.env.ZK_NOTEBOOK_DIR .. '/Calendar', title = os.date('%Y%m%d') }<CR>",
|
||||
"New diary"
|
||||
},
|
||||
e = { "<cmd>!mv \"<cfile>\" \"<c-r>=expand('%:p:h')<cr>/\"<cr>", "Embed file moving to current file's folder" },
|
||||
f = { "<Cmd>ZkNotes { match = {vim.fn.input('Search: ') }}<CR>", "Find" },
|
||||
g = {
|
||||
"<cmd>lua require('pwnvim.plugins').grammar_check()<cr>",
|
||||
"Check Grammar"
|
||||
},
|
||||
h = { "<cmd>edit ~/Notes/Notes/HotSheet.md<CR>", "Open HotSheet" },
|
||||
i = {
|
||||
c = { "<cmd>r!/opt/homebrew/bin/icalBuddy --bullet '* ' --timeFormat '\\%H:\\%M' --dateFormat '' --noPropNames --noCalendarNames --excludeAllDayEvents --includeCals 'IC - Work' --includeEventProps datetime,title,attendees,location --propertyOrder datetime,title,attendees,location --propertySeparators '| |\\n * |\\n * | |' eventsToday<cr>",
|
||||
"Insert today's calendar" },
|
||||
o = { "<cmd>r!gtm-okr goals<cr>", "Insert OKRs" },
|
||||
j = { "<cmd>r!( (curl -s https://icanhazdadjoke.com/ | grep '\\\"subtitle\\\"') || curl -s https://icanhazdadjoke.com/ ) | sed 's/<[^>]*>//g' | sed -z 's/\\n/ /'<cr>",
|
||||
"Insert joke" },
|
||||
},
|
||||
m = {
|
||||
"<cmd>lua require('zk.commands').get('ZkNew')({ dir = vim.fn.input({prompt='Folder: ',default=vim.env.ZK_NOTEBOOK_DIR .. '/Notes/meetings',completion='dir'}), title = vim.fn.input('Title: ') })<CR>",
|
||||
"New meeting"
|
||||
},
|
||||
n = {
|
||||
"<Cmd>ZkNew { dir = vim.fn.input({prompt='Folder: ',default=vim.env.ZK_NOTEBOOK_DIR .. '/Notes',completion='dir'}), title = vim.fn.input('Title: ') }<CR>",
|
||||
"New"
|
||||
},
|
||||
o = { "<cmd>ZkNotes<CR>", "Open" },
|
||||
t = { "<cmd>ZkTags<CR>", "Open by tag" },
|
||||
-- in open note (defined in plugins.lua as local-only shortcuts):
|
||||
-- p: new peer note
|
||||
-- l: show outbound links
|
||||
-- r: show outbound links
|
||||
-- i: info preview
|
||||
},
|
||||
t = {
|
||||
name = "Tasks",
|
||||
--d = { "<cmd>lua require('pwnvim.tasks').completeTask()<cr>", "Done" },
|
||||
d = { function() require('pwnvim.tasks').completeTaskDirect() end, "Done" },
|
||||
c = { function() require('pwnvim.tasks').createTaskDirect() end, "Create" },
|
||||
s = { function() require('pwnvim.tasks').scheduleTaskPrompt() end, "Schedule" },
|
||||
t = { function() require('pwnvim.tasks').scheduleTaskTodayDirect() end, "Today" },
|
||||
}
|
||||
}
|
||||
local leader_visual_mappings = {
|
||||
t = {
|
||||
name = "Tasks",
|
||||
a = { ':grep "^\\s*[*-] \\[ \\] "<cr>:Trouble quickfix<cr>', "All tasks quickfix" },
|
||||
--d = { function() require("pwnvim.tasks").eachSelectedLine(require("pwnvim.tasks").completeTask) end, "Done" },
|
||||
d = { ":luado return require('pwnvim.tasks').completeTask(line)<cr>", "Done" },
|
||||
s = { require("pwnvim.tasks").scheduleTaskBulk, "Schedule" },
|
||||
-- s needs a way to call the prompt then reuse the value
|
||||
--t = { function() require("pwnvim.tasks").eachSelectedLine(require("pwnvim.tasks").scheduleTaskToday) end, "Today" },
|
||||
t = { ":luado return require('pwnvim.tasks').scheduleTaskToday(line)<cr>", "Today" },
|
||||
},
|
||||
n = {
|
||||
e = { "\"0y:!mv \"<c-r>0\" \"<c-r>=expand('%:p:h')<cr>/\"<cr>", "Embed file moving to current file's folder" },
|
||||
f = { ":'<,'>ZkMatch<CR>", "Find Selected" }
|
||||
},
|
||||
i = leader_mappings.i,
|
||||
f = leader_mappings.f,
|
||||
e = leader_mappings.e,
|
||||
q = leader_mappings.q,
|
||||
x = leader_mappings.x
|
||||
}
|
||||
|
||||
which_key.register(leader_mappings, global_leader_opts)
|
||||
which_key.register(leader_visual_mappings, global_leader_opts_visual)
|
||||
|
||||
vim.api.nvim_set_keymap('', '<leader>fd',
|
||||
':silent Telescope lsp_document_symbols<CR>', options)
|
||||
|
||||
-- Set cwd to current file's dir
|
||||
vim.api.nvim_set_keymap('', '<leader>cd', ':cd %:h<CR>', options)
|
||||
vim.api.nvim_set_keymap('', '<leader>lcd', ':lcd %:h<CR>', options)
|
||||
-- Debug syntax files
|
||||
vim.api.nvim_set_keymap('', '<leader>sd',
|
||||
[[:echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')<CR>]],
|
||||
options)
|
||||
|
||||
-- """"""""" Global Shortcuts """""""""""""
|
||||
|
||||
vim.api.nvim_set_keymap('', '<D-j>', 'gj', options)
|
||||
vim.api.nvim_set_keymap('', '<D-4>', 'g$', options)
|
||||
vim.api.nvim_set_keymap('', '<D-6>', 'g^', options)
|
||||
vim.api.nvim_set_keymap('', '<D-0>', 'g^', options)
|
||||
|
||||
-- Bubble lines up and down using the unimpaired plugin
|
||||
vim.api.nvim_set_keymap('n', '<A-Up>', '[e', options)
|
||||
vim.api.nvim_set_keymap('n', '<A-Down>', ']e', options)
|
||||
vim.api.nvim_set_keymap('v', '<A-Up>', '[egv', options)
|
||||
vim.api.nvim_set_keymap('v', '<A-Down>', ']egv', options)
|
||||
|
||||
-- Visually select the text that was last edited/pasted
|
||||
-- Similar to gv but works after paste
|
||||
vim.api.nvim_set_keymap('', 'gV', '`[v`]', options)
|
||||
|
||||
-- What do these do?
|
||||
-- inoremap <C-U> <C-G>u<C-U>
|
||||
-- nnoremap & :&&<CR>
|
||||
-- xnoremap & :&&<CR>
|
||||
|
||||
-- Indent/outdent shortcuts
|
||||
vim.api.nvim_set_keymap('n', '<D-[>', '<<', options)
|
||||
vim.api.nvim_set_keymap('v', '<D-[>', '<gv', options)
|
||||
vim.api.nvim_set_keymap('!', '<D-[>', '<C-o><<', options)
|
||||
vim.api.nvim_set_keymap('n', '<D-]>', '>>', options)
|
||||
vim.api.nvim_set_keymap('v', '<D-]>', '>gv', options)
|
||||
vim.api.nvim_set_keymap('!', '<D-]>', '<C-o>>>', options)
|
||||
-- keep visual block so you can move things repeatedly
|
||||
vim.api.nvim_set_keymap('v', "<", "<gv", options)
|
||||
vim.api.nvim_set_keymap('v', ">", ">gv", options)
|
||||
|
||||
-- TODO: this should be in programming setup
|
||||
-- nmap <D-b> :make<CR>
|
||||
-- imap <D-b> <C-o>:make<CR>
|
||||
|
||||
-- easy expansion of the active directory with %% on cmd
|
||||
local options_nosilent = { noremap = true, silent = false }
|
||||
|
||||
vim.api.nvim_set_keymap('c', '%%', "<c-r>=expand('%:p:h')<cr>/", options_nosilent)
|
||||
|
||||
-- gx is a built-in to open URLs under the cursor, but when
|
||||
-- not using netrw, it doesn't work right. Or maybe it's just me
|
||||
-- but anyway this command works great.
|
||||
-- /Users/pwalsh/Documents/md2rtf-style.html
|
||||
-- ../README.md
|
||||
-- ~/Desktop/Screen Shot 2018-04-06 at 5.19.32 PM.png
|
||||
-- [abc](https://github.com/adsr/mle/commit/e4dc4314b02a324701d9ae9873461d34cce041e5.patch)
|
||||
vim.api.nvim_set_keymap('', 'gx',
|
||||
":silent !open \"<c-r><c-f>\" || xdg-open \"<c-r><c-f>\"<cr>",
|
||||
options)
|
||||
vim.api.nvim_set_keymap('v', 'gx',
|
||||
"\"0y:silent !open \"<c-r>0\" || xdg-open \"<c-r>0\"<cr>gv",
|
||||
options)
|
||||
vim.api.nvim_set_keymap('', '<CR>',
|
||||
":silent !open \"<c-r><c-f>\" || xdg-open \"<c-r><c-f>\"<cr>",
|
||||
options)
|
||||
vim.api.nvim_set_keymap('v', '<CR>',
|
||||
"\"0y:silent !open \"<c-r>0\" || xdg-open \"<c-r>0\"<cr>gv",
|
||||
options)
|
||||
|
||||
-- open/close folds with space bar
|
||||
vim.api.nvim_set_keymap('', '<Space>',
|
||||
[[@=(foldlevel('.')?'za':"\<Space>")<CR>]], options)
|
||||
|
||||
-- Make nvim terminal more sane
|
||||
vim.api.nvim_set_keymap('t', '<Esc>', [[<C-\><C-n>]], options)
|
||||
vim.api.nvim_set_keymap('t', '<M-[>', "<Esc>", options)
|
||||
vim.api.nvim_set_keymap('t', '<C-v><Esc>', "<Esc>", options)
|
||||
|
||||
-- gui nvim stuff
|
||||
-- Adjust font sizes
|
||||
vim.api.nvim_set_keymap('', '<D-=>', [[:silent! let &guifont = substitute(
|
||||
\ &guifont,
|
||||
\ ':h\zs\d\+',
|
||||
\ '\=eval(submatch(0)+1)',
|
||||
\ '')<CR>]], options)
|
||||
vim.api.nvim_set_keymap('', '<C-=>', [[:silent! let &guifont = substitute(
|
||||
\ &guifont,
|
||||
\ ':h\zs\d\+',
|
||||
\ '\=eval(submatch(0)+1)',
|
||||
\ '')<CR>]], options)
|
||||
vim.api.nvim_set_keymap('', '<D-->', [[:silent! let &guifont = substitute(
|
||||
\ &guifont,
|
||||
\ ':h\zs\d\+',
|
||||
\ '\=eval(submatch(0)-1)',
|
||||
\ '')<CR>]], options)
|
||||
vim.api.nvim_set_keymap('', '<C-->', [[:silent! let &guifont = substitute(
|
||||
\ &guifont,
|
||||
\ ':h\zs\d\+',
|
||||
\ '\=eval(submatch(0)-1)',
|
||||
\ '')<CR>]], options)
|
||||
|
||||
-- Need to map cmd-c and cmd-v to get natural copy/paste behavior
|
||||
vim.api.nvim_set_keymap('n', '<D-v>', '"*p', options)
|
||||
vim.api.nvim_set_keymap('v', '<D-v>', '"*p', options)
|
||||
vim.api.nvim_set_keymap('!', '<D-v>', '<C-R>*', options)
|
||||
vim.api.nvim_set_keymap('c', '<D-v>', '<C-R>*', options)
|
||||
vim.api.nvim_set_keymap('v', '<D-c>', '"*y', options)
|
||||
-- When pasting over selected text, keep original register value
|
||||
vim.api.nvim_set_keymap('v', 'p', '"_dP', options)
|
||||
|
||||
-- cmd-w to close the current buffer
|
||||
vim.api.nvim_set_keymap('', '<D-w>', ':bd<CR>', options)
|
||||
vim.api.nvim_set_keymap('!', '<D-w>', '<ESC>:bd<CR>', options)
|
||||
|
||||
-- cmd-t or cmd-n to open a new buffer
|
||||
vim.api.nvim_set_keymap('', '<D-t>', ':enew<CR>', options)
|
||||
vim.api.nvim_set_keymap('!', '<D-t>', '<ESC>:enew<CR>', options)
|
||||
vim.api.nvim_set_keymap('', '<D-n>', ':tabnew<CR>', options)
|
||||
vim.api.nvim_set_keymap('!', '<D-n>', '<ESC>:tabnew<CR>', options)
|
||||
|
||||
-- cmd-s to save
|
||||
vim.api.nvim_set_keymap('', '<D-s>', ':w<CR>', options)
|
||||
vim.api.nvim_set_keymap('!', '<D-s>', '<ESC>:w<CR>', options)
|
||||
|
||||
-- cmd-q to quit
|
||||
vim.api.nvim_set_keymap('', '<D-q>', ':q<CR>', options)
|
||||
vim.api.nvim_set_keymap('!', '<D-q>', '<ESC>:q<CR>', options)
|
||||
|
||||
-- cmd-o to open
|
||||
vim.api.nvim_set_keymap('', '<D-o>', ':Telescope file_browser cmd=%:h<CR>',
|
||||
options)
|
||||
vim.api.nvim_set_keymap('!', '<D-o>',
|
||||
'<ESC>:Telescope file_browser cmd=%:h<CR>', options)
|
||||
|
||||
-- emacs bindings to jump around in lines
|
||||
vim.api.nvim_set_keymap("i", "<C-e>", "<C-o>A", options)
|
||||
vim.api.nvim_set_keymap("i", "<C-a>", "<C-o>I", options)
|
||||
|
||||
-- TODO:
|
||||
-- Use ctrl-x, ctrl-u to complete :emoji: symbols, then use
|
||||
-- ,e to turn it into a symbol if desired
|
||||
-- vim.api.nvim_set_keymap('!', '<leader>e',
|
||||
-- [[:%s/:\([^:]\+\):/\=emoji#for(submatch(1), submatch(0))/g<CR>]],
|
||||
-- options)
|
||||
|
||||
-- Setup tpope unimpaired-like forward/backward shortcuts
|
||||
which_key.register({
|
||||
["[a"] = "Prev file arg",
|
||||
["]a"] = "Next file arg",
|
||||
["[b"] = { '<Cmd>BufferLineCyclePrev<CR>', "Prev buffer" },
|
||||
["]b"] = { '<Cmd>BufferLineCycleNext<CR>', "Next buffer" },
|
||||
["[c"] = "Prev git hunk",
|
||||
["]c"] = "Next git hunk",
|
||||
["[l"] = "Prev loclist item",
|
||||
["]l"] = "Next loclist item",
|
||||
["[q"] = "Prev quicklist item",
|
||||
["]q"] = "Next quicklist item",
|
||||
["[t"] = { '<Cmd>tabprevious<cr>', "Prev tab" },
|
||||
["[T"] = { '<Cmd>tabprevious<cr>', "First tab" },
|
||||
["]t"] = { '<Cmd>tabnext<cr>', "Next tab" },
|
||||
["]T"] = { '<Cmd>tablast<cr>', "Last tab" },
|
||||
["[n"] = "Prev conflict",
|
||||
["]n"] = "Next conflict",
|
||||
["[ "] = "Add blank line before",
|
||||
["] "] = "Add blank line after",
|
||||
["[e"] = "Swap line with previous",
|
||||
["]e"] = "Swap line with next",
|
||||
["[x"] = "XML encode",
|
||||
["]x"] = "XML decode",
|
||||
["[u"] = "URL encode",
|
||||
["]u"] = "URL decode",
|
||||
["[y"] = "C escape",
|
||||
["]y"] = "C unescape",
|
||||
["[d"] = { "<cmd>lua vim.diagnostic.goto_prev()<CR>", "Prev diagnostic" },
|
||||
["]d"] = { "<cmd>lua vim.diagnostic.goto_next()<CR>", "Next diagnostic" },
|
||||
["[1"] = { ':BufferLineGoToBuffer 1<CR>', "Go to buffer 1" },
|
||||
["]1"] = { ':BufferLineGoToBuffer 1<CR>', "Go to buffer 1" },
|
||||
["[2"] = { ':BufferLineGoToBuffer 2<CR>', "Go to buffer 2" },
|
||||
["]2"] = { ':BufferLineGoToBuffer 2<CR>', "Go to buffer 2" },
|
||||
["[3"] = { ':BufferLineGoToBuffer 3<CR>', "Go to buffer 3" },
|
||||
["]3"] = { ':BufferLineGoToBuffer 3<CR>', "Go to buffer 3" },
|
||||
["[4"] = { ':BufferLineGoToBuffer 4<CR>', "Go to buffer 4" },
|
||||
["]4"] = { ':BufferLineGoToBuffer 4<CR>', "Go to buffer 4" },
|
||||
["[5"] = { ':BufferLineGoToBuffer 5<CR>', "Go to buffer 5" },
|
||||
["]5"] = { ':BufferLineGoToBuffer 5<CR>', "Go to buffer 5" },
|
||||
["[6"] = { ':BufferLineGoToBuffer 6<CR>', "Go to buffer 6" },
|
||||
["]6"] = { ':BufferLineGoToBuffer 6<CR>', "Go to buffer 6" },
|
||||
["[7"] = { ':BufferLineGoToBuffer 7<CR>', "Go to buffer 7" },
|
||||
["]7"] = { ':BufferLineGoToBuffer 7<CR>', "Go to buffer 7" },
|
||||
["[8"] = { ':BufferLineGoToBuffer 8<CR>', "Go to buffer 8" },
|
||||
["]8"] = { ':BufferLineGoToBuffer 8<CR>', "Go to buffer 8" },
|
||||
["[9"] = { ':BufferLineGoToBuffer 9<CR>', "Go to buffer 9" },
|
||||
["]9"] = { ':BufferLineGoToBuffer 9<CR>', "Go to buffer 9" },
|
||||
["<S-h>"] = { ':BufferLineCyclePrev<CR>', "Go to next buffer" },
|
||||
["<S-l>"] = { ':BufferLineCycleNext<CR>', "Go to prev buffer" },
|
||||
|
||||
}, { mode = 'n', silent = true })
|
||||
|
||||
-- Close buffer
|
||||
vim.api.nvim_set_keymap('', '<D-w>', ':Bdelete<CR>', options)
|
||||
vim.api.nvim_set_keymap('!', '<D-w>', '<ESC>:Bdelete<CR>', options)
|
||||
vim.api.nvim_set_keymap('', '<A-w>', ':Bdelete<CR>', options)
|
||||
vim.api.nvim_set_keymap('!', '<A-w>', '<ESC>:Bdelete<CR>', options)
|
||||
vim.api.nvim_set_keymap('', '<M-w>', ':Bdelete<CR>', options)
|
||||
vim.api.nvim_set_keymap('!', '<M-w>', '<ESC>:Bdelete<CR>', options)
|
||||
-- Magic buffer-picking mode
|
||||
vim.api.nvim_set_keymap('', '<M-b>', ':BufferPick<CR>', options)
|
||||
vim.api.nvim_set_keymap('!', '<M-b>', '<ESC>:BufferPick<CR>', options)
|
||||
vim.api.nvim_set_keymap('', '[0', ':BufferPick<CR>', options)
|
||||
vim.api.nvim_set_keymap('', ']0', ':BufferPick<CR>', options)
|
||||
vim.api.nvim_set_keymap('', '[\\', ':BufferPick<CR>', options)
|
||||
vim.api.nvim_set_keymap('', ']\\', ':BufferPick<CR>', options)
|
||||
|
||||
-- Pane navigation integrated with tmux
|
||||
vim.api.nvim_set_keymap('', '<c-h>', ':TmuxNavigateLeft<cr>', { silent = true })
|
||||
vim.api.nvim_set_keymap('', '<c-j>', ':TmuxNavigateDown<cr>', { silent = true })
|
||||
vim.api.nvim_set_keymap('', '<c-k>', ':TmuxNavigateUp<cr>', { silent = true })
|
||||
vim.api.nvim_set_keymap('', '<c-l>', ':TmuxNavigateRight<cr>', { silent = true })
|
||||
-- add mapping for :TmuxNavigatePrevious ? c-\, the default, used by toggleterm
|
||||
Reference in New Issue
Block a user