-- Set as the leader key -- See `:help mapleader` -- NOTE: Must happen before plugins are loaded (otherwise wrong leader will be used) vim.g.mapleader = ' ' -- [[ Setting options ]] See `:h vim.o` -- NOTE: You can change these options as you wish! -- For more options, you can see `:help option-list` -- To see documentation for an option, you can use `:h 'optionname'`, for example `:h 'number'` -- (Note the single quotes) -- Print the line number in front of each line vim.o.number = true -- Use relative line numbers, so that it is easier to jump with j, k. This will affect the 'number' -- option above, see `:h number_relativenumber` vim.o.relativenumber = true -- Sync clipboard between OS and Neovim. Schedule the setting after `UiEnter` because it can -- increase startup-time. Remove this option if you want your OS clipboard to remain independent. -- See `:help 'clipboard'` vim.api.nvim_create_autocmd('UIEnter', { callback = function() vim.o.clipboard = 'unnamedplus' end, }) -- Case-insensitive searching UNLESS \C or one or more capital letters in the search term vim.o.ignorecase = true vim.o.smartcase = true -- Highlight the line where the cursor is on vim.o.cursorline = true -- Minimal number of screen lines to keep above and below the cursor. vim.o.scrolloff = 10 -- Show and trailing spaces vim.o.list = true -- if performing an operation that would fail due to unsaved changes in the buffer (like `:q`), -- instead raise a dialog asking if you wish to save the current file(s) See `:help 'confirm'` vim.o.confirm = true -- [[ Set up keymaps ]] See `:h vim.keymap.set()`, `:h mapping`, `:h keycodes` -- Use to exit terminal mode vim.keymap.set('t', '', '') -- Map , , , to navigate between windows in any modes vim.keymap.set({ 't', 'i' }, '', 'h') vim.keymap.set({ 't', 'i' }, '', 'j') vim.keymap.set({ 't', 'i' }, '', 'k') vim.keymap.set({ 't', 'i' }, '', 'l') vim.keymap.set({ 'n' }, '', 'h') vim.keymap.set({ 'n' }, '', 'j') vim.keymap.set({ 'n' }, '', 'k') vim.keymap.set({ 'n' }, '', 'l') -- [[ Basic Autocommands ]]. -- See `:h lua-guide-autocommands`, `:h autocmd`, `:h nvim_create_autocmd()` -- Highlight when yanking (copying) text. -- Try it with `yap` in normal mode. See `:h vim.hl.on_yank()` vim.api.nvim_create_autocmd('TextYankPost', { desc = 'Highlight when yanking (copying) text', callback = function() vim.hl.on_yank() end, }) -- [[ Create user commands ]] -- See `:h nvim_create_user_command()` and `:h user-commands` -- Create a command `:GitBlameLine` that print the git blame for the current line vim.api.nvim_create_user_command('GitBlameLine', function() local line_number = vim.fn.line('.') -- Get the current line number. See `:h line()` local filename = vim.api.nvim_buf_get_name(0) print(vim.fn.system({ 'git', 'blame', '-L', line_number .. ',+1', filename })) end, { desc = 'Print the git blame for the current line' }) -- [[ Add optional packages ]] -- Nvim comes bundled with a set of packages that are not enabled by -- default. You can enable any of them by using the `:packadd` command. -- For example, to add the "nohlsearch" package to automatically turn off search highlighting after -- 'updatetime' and when going to insert mode vim.cmd('packadd! nohlsearch') -- [[ Install plugins ]] -- Nvim functionality can be extended by installing external plugins. -- One way to do it is with a built-in plugin manager. See `:h vim.pack`. vim.pack.add({ 'https://github.com/neovim/nvim-lspconfig' })