summaryrefslogtreecommitdiffstats
path: root/.config/nvim/lua/core
diff options
context:
space:
mode:
Diffstat (limited to '.config/nvim/lua/core')
-rw-r--r--.config/nvim/lua/core/keymaps.lua77
-rw-r--r--.config/nvim/lua/core/lazy.lua30
-rw-r--r--.config/nvim/lua/core/options.lua98
3 files changed, 205 insertions, 0 deletions
diff --git a/.config/nvim/lua/core/keymaps.lua b/.config/nvim/lua/core/keymaps.lua
new file mode 100644
index 0000000..b63156d
--- /dev/null
+++ b/.config/nvim/lua/core/keymaps.lua
@@ -0,0 +1,77 @@
1local map = require("helpers.keys").map
2
3-- https://stackoverflow.com/questions/4256697/vim-search-and-highlight-but-do-not-jump
4-- search & highlight but do not jump
5map("n", "*", "<cmd>keepjumps normal! mi*`i<CR>", "search forwards")
6map("n", "#", "<cmd>keepjumps normal! mi#`i<CR>", "search backwards")
7
8-- save file as sudo on files that require root permission
9map("c", "w!!", 'execute "silent! write !sudo tee % >/dev/null" <bar> edit!<CR>', "save file as sudo", { silent = false })
10
11-- replace ex mode with gq (format lines)
12map("n", "Q", "gq", "format lines")
13
14-- set formatprg to sentences, for prose
15-- TODO: can we do this with vim.o.formatprg?
16map("n", "<Leader>fp", "<cmd>set formatprg=~/.local/bin/sentences<CR>", "switch to sentences view", { silent = false })
17
18-- replace all is aliased to S.
19map("n", "S", ":s//g<Left><Left>", "replace all", { silent = false })
20map("v", "S", ":s//g<Left><Left>", "replace all selection", { silent = false })
21
22-- jump to buffer
23map("n", "<Leader>b", "<cmd>ls<cr>:b<space>", "jump to buffer")
24
25-- up and down are more logical with g..
26map("n", "k", '(v:count == 0 ? "gk" : "k")', "up", { expr = true })
27map("n", "j", '(v:count == 0 ? "gj" : "j")', "down", { expr = true })
28map("i", "<Up>", "<Esc>gka")
29map("i", "<Down>", "<Esc>gja")
30
31-- space used to toggle folds, now it's x (because x is d)
32map("n", "<Space>", '"_x')
33
34-- separate cut and delete
35map("n", "x", "d")
36map("x", "x", "d")
37map("n", "xx", "dd")
38map("n", "X", "D")
39
40-- change into pwd of current buffer
41map("n", "<Leader>cd", "<cmd>lcd %:p:h<CR>:pwd<CR>", "cd to current buffer's pwd")
42
43-- call CreatePaper on word below cursor
44map("n", "<leader>np", 'gewi[[/papers/<ESC>Ea]]<ESC>bb:call CreatePaper(expand("<cword>"))<CR>',
45 "vimwiki new paper on word under cursor")
46
47-- link paper
48map("n", "<leader>lp", "gewi[[/papers/<ESC>Ea]]<ESC>", "vimwiki link wrap word under cursor")
49
50-- call CreateReference on word below cursor
51map("n", "<leader>nr", '<cmd>call CreateReference(expand("<cword>"))<CR>', "vimwiki new reference word under cursor")
52
53-- create a new note
54map("n", "<leader>nn", "<cmd>call CreateNote()<CR>", "vimwiki new note for slipbox")
55
56-- :%% to get current file path
57map('c', '%%', "getcmdtype() == ':' ? expand('%:h').'/' : '%%'", "get current file path", { expr = true, silent = false })
58
59-- reselect visual selection after indent
60map('v', '>', '>gv')
61map('v', '<', '<gv')
62
63-- keep cursor position after visual yank
64map('v', 'y', 'myy`y')
65map('v', 'Y', 'myY`y')
66
67-- ` is more useful than '
68map('n', "'", '`')
69
70-- switch between light and dark modes
71map("n", "<leader>ut", function()
72 if vim.o.background == "dark" then
73 vim.o.background = "light"
74 else
75 vim.o.background = "dark"
76 end
77end, "toggle between light and dark background")
diff --git a/.config/nvim/lua/core/lazy.lua b/.config/nvim/lua/core/lazy.lua
new file mode 100644
index 0000000..8a91029
--- /dev/null
+++ b/.config/nvim/lua/core/lazy.lua
@@ -0,0 +1,30 @@
1-- install lazy.nvim if not already installed
2local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
3if not vim.loop.fs_stat(lazypath) then
4 vim.fn.system({
5 "git",
6 "clone",
7 "--filter=blob:none",
8 "https://github.com/folke/lazy.nvim.git",
9 "--branch=stable", -- latest stable release
10 lazypath,
11 })
12end
13vim.opt.rtp:prepend(lazypath)
14
15-- use a protected call so we don't error out on first use
16local ok, lazy = pcall(require, "lazy")
17if not ok then
18 return
19end
20
21-- we have to set the leader key here for lazy.nvim to work
22require("helpers.keys").set_leader("\\")
23
24-- load plugins from specifications
25-- see: https://github.com/folke/lazy.nvim#-structuring-your-plugins
26-- we are loading them as a lua module
27lazy.setup("plugins")
28
29-- easy-access keybindings
30require("helpers.keys").map("n", "<leader>L", lazy.show, "show lazy")
diff --git a/.config/nvim/lua/core/options.lua b/.config/nvim/lua/core/options.lua
new file mode 100644
index 0000000..3299e83
--- /dev/null
+++ b/.config/nvim/lua/core/options.lua
@@ -0,0 +1,98 @@
1local opts = {
2 -- this might not be needed anymore
3 termguicolors = true,
4
5 -- copy indent on a new line
6 autoindent = true,
7
8 -- :h tabstop, 2. point
9 -- use appropriate number of spaces to insert a <Tab>
10 expandtab = true,
11 shiftwidth = 4,
12 softtabstop = 4,
13 tabstop = 8,
14
15 -- use english for spellchecking
16 spelllang = "en_gb",
17
18 -- tab completion, zsh style
19 wildmode = "longest:full,full",
20
21 -- put one space for join (not two)
22 joinspaces = false,
23
24 -- keep n lines above/below cursor while scrolling
25 scrolloff = 4,
26
27 -- line numbers
28 number = true,
29
30 -- manual folding
31 foldmethod = "marker",
32
33 -- set the terminal title
34 title = true,
35
36 -- wrap using 'breakat' character
37 linebreak = true,
38
39 -- new split panes will split to below and right
40 splitbelow = true,
41 splitright = true,
42
43 -- use relative line numbers
44 relativenumber = true,
45
46 -- we are already using a cursorline, don't clobber linter messages
47 showmode = false,
48
49 -- jump to the matching bracket briefly
50 showmatch = true,
51
52 -- persistent undo
53 undofile = true,
54
55 -- lower case searches ignore case, upper case searches do not
56 ignorecase = true,
57 smartcase = true,
58
59 -- https://stackoverflow.com/a/3445040/
60 -- switch case labels
61 cinoptions = "l1",
62
63}
64
65for opt, val in pairs(opts) do
66 vim.o[opt] = val
67end
68
69-- set other options
70-- local colorscheme = require("helpers.colorscheme")
71-- vim.cmd.colorscheme(colorscheme)
72
73-- interact with system clipboard
74vim.opt.clipboard:append('unnamedplus')
75
76vim.opt.wildignore = {
77 '*.o', '*.obj', '*.class', '*.aux', '*.lof', '*.log', '*.lot', '*.fls',
78 '*.toc', '*.fmt', '*.fot', '*.cb', '*.cb2', '.*.lb', '.dvi', '*.xdv',
79 '*.bbl', '*.bcf', '*.blg', '*-blx.aux', '*-blx.bib', '*.run.xml',
80 '*.fdb_latexmk', '*.synctex', '*.synctex(busy)', '*.synctex.gz',
81 '*.synctex.gz(busy)', '*.pdfsync'
82}
83
84-- iwhite: ignore changes in amount of white space.
85-- vertical: start diff mode with vertical splits
86-- filler: show filler lines,
87vim.opt.diffopt = {
88 "iwhite", "vertical", "filler", "algorithm:patience", "indent-heuristic"
89}
90
91-- menu: use a popup menu to show the possible completions
92-- preview: show extra information
93vim.opt.completeopt = {"menu", "menuone", "noselect"}
94
95if vim.fn.executable("rg") then
96 vim.o.grepprg = "rg --vimgrep --no-heading --smart-case"
97 vim.o.grepformat = "%f:%l:%c:%m,%f:%l:%m"
98end