Last active
December 31, 2023 03:29
-
-
Save davidbegin/1d87d311e870c17b445212cfe3152775 to your computer and use it in GitHub Desktop.
Terrible Messy Begin Neovim Kickstart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--[[ | |
===================================================================== | |
==================== READ THIS BEFORE CONTINUING ==================== | |
===================================================================== | |
Kickstart.nvim is *not* a distribution. | |
Kickstart.nvim is a template for your own configuration. | |
The goal is that you can read every line of code, top-to-bottom, understand | |
what your configuration is doing, and modify it to suit your needs. | |
Once you've done that, you should start exploring, configuring and tinkering to | |
explore Neovim! | |
If you don't know anything about Lua, I recommend taking some time to read through | |
a guide. One possible example: | |
- https://learnxinyminutes.com/docs/lua/ | |
And then you can explore or search through `:help lua-guide` | |
Kickstart Guide: | |
I have left several `:help X` comments throughout the init.lua | |
You should run that command and read that help section for more information. | |
In addition, I have some `NOTE:` items throughout the file. | |
These are for you, the reader to help understand what is happening. Feel free to delete | |
them once you know what you're doing, but they should serve as a guide for when you | |
are first encountering a few different constructs in your nvim config. | |
I hope you enjoy your Neovim journey, | |
- TJ | |
P.S. You can delete this when you're done too. It's your config now :) | |
--]] | |
-- Set <space> as the leader key | |
-- See `:help mapleader` | |
-- NOTE: Must happen before plugins are required (otherwise wrong leader will be used) | |
vim.g.mapleader = ' ' | |
vim.g.maplocalleader = ' ' | |
-- Install package manager | |
-- https://github.com/folke/lazy.nvim | |
-- `:help lazy.nvim.txt` for more info | |
local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim' | |
if not vim.loop.fs_stat(lazypath) then | |
vim.fn.system { | |
'git', | |
'clone', | |
'--filter=blob:none', | |
'https://github.com/folke/lazy.nvim.git', | |
'--branch=stable', -- latest stable release | |
lazypath, | |
} | |
end | |
vim.opt.rtp:prepend(lazypath) | |
-- NOTE: Here is where you install your plugins. | |
-- You can configure plugins using the `config` key. | |
-- | |
-- You can also configure plugins after the setup call, | |
-- as they will be available in your neovim runtime. | |
require('lazy').setup({ | |
-- NOTE: First, some plugins that don't require any configuration | |
'tpope/vim-dispatch', | |
-- Git related plugins | |
'tpope/vim-fugitive', | |
'tpope/vim-rhubarb', | |
-- Detect tabstop and shiftwidth automatically | |
'tpope/vim-sleuth', | |
-- NOTE: This is where your plugins related to LSP can be installed. | |
-- The configuration is done below. Search for lspconfig to find it below. | |
{ | |
-- LSP Configuration & Plugins | |
'neovim/nvim-lspconfig', | |
dependencies = { | |
-- Automatically install LSPs to stdpath for neovim | |
{ 'williamboman/mason.nvim', config = true }, | |
'williamboman/mason-lspconfig.nvim', | |
-- Useful status updates for LSP | |
-- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})` | |
{ 'j-hui/fidget.nvim', tag = 'legacy', opts = {} }, | |
-- Additional lua configuration, makes nvim stuff amazing! | |
'folke/neodev.nvim', | |
}, | |
}, | |
{ | |
"folke/trouble.nvim", | |
dependencies = { "nvim-tree/nvim-web-devicons" }, | |
opts = { | |
-- your configuration comes here | |
-- or leave it empty to use the default settings | |
-- refer to the configuration section below | |
}, | |
}, | |
{ 'L3MON4D3/LuaSnip', version = '2.1.1', opts = {} }, | |
{ 'chentoast/marks.nvim'}, | |
{ | |
-- Autocompletion | |
'hrsh7th/nvim-cmp', | |
dependencies = { | |
-- Snippet Engine & its associated nvim-cmp source | |
-- Since I define it above, do I need to define it here??? | |
-- 'L3MON4D3/LuaSnip', | |
'saadparwaiz1/cmp_luasnip', | |
-- Adds LSP completion capabilities | |
'hrsh7th/cmp-nvim-lsp', | |
-- Adds a number of user-friendly snippets | |
'rafamadriz/friendly-snippets', | |
}, | |
}, | |
-- Useful plugin to show you pending keybinds. | |
{ 'folke/which-key.nvim', opts = {} }, | |
{ | |
-- Adds git related signs to the gutter, as well as utilities for managing changes | |
'lewis6991/gitsigns.nvim', | |
opts = { | |
-- See `:help gitsigns.txt` | |
signs = { | |
add = { text = '+' }, | |
change = { text = '~' }, | |
delete = { text = '_' }, | |
topdelete = { text = '‾' }, | |
changedelete = { text = '~' }, | |
}, | |
on_attach = function(bufnr) | |
vim.keymap.set('n', '<leader>gp', require('gitsigns').prev_hunk, { buffer = bufnr, desc = '[G]o to [P]revious Hunk' }) | |
vim.keymap.set('n', '<leader>gn', require('gitsigns').next_hunk, { buffer = bufnr, desc = '[G]o to [N]ext Hunk' }) | |
vim.keymap.set('n', '<leader>ph', require('gitsigns').preview_hunk, { buffer = bufnr, desc = '[P]review [H]unk' }) | |
end, | |
}, | |
}, | |
{ | |
-- Set lualine as statusline | |
'nvim-lualine/lualine.nvim', | |
-- See `:help lualine.txt` | |
opts = { | |
options = { | |
icons_enabled = false, | |
theme = 'onedark', | |
component_separators = '|', | |
section_separators = '', | |
}, | |
}, | |
}, | |
-- { | |
-- -- Add indentation guides even on blank lines | |
-- 'lukas-reineke/indent-blankline.nvim', | |
-- -- Enable `lukas-reineke/indent-blankline.nvim` | |
-- -- See `:help indent_blankline.txt` | |
-- opts = { | |
-- char = '┊', | |
-- show_trailing_blankline_indent = false, | |
-- }, | |
-- }, | |
-- "gc" to comment visual regions/lines | |
{ 'numToStr/Comment.nvim', opts = {} }, | |
-- Fuzzy Finder (files, lsp, etc) | |
{ | |
'nvim-telescope/telescope.nvim', | |
branch = '0.1.x', | |
dependencies = { | |
'nvim-lua/plenary.nvim', | |
-- Fuzzy Finder Algorithm which requires local dependencies to be built. | |
-- Only load if `make` is available. Make sure you have the system | |
-- requirements installed. | |
{ | |
'nvim-telescope/telescope-fzf-native.nvim', | |
-- NOTE: If you are having trouble with this installation, | |
-- refer to the README for telescope-fzf-native for more instructions. | |
build = 'make', | |
cond = function() | |
return vim.fn.executable 'make' == 1 | |
end, | |
}, | |
}, | |
}, | |
{ | |
-- Highlight, edit, and navigate code | |
'nvim-treesitter/nvim-treesitter', | |
dependencies = { | |
'nvim-treesitter/nvim-treesitter-textobjects', | |
}, | |
build = ':TSUpdate', | |
}, | |
{ | |
"zbirenbaum/copilot.lua", | |
config = function () | |
require("copilot").setup { | |
suggestion = { enabled = false }, | |
panel = { enabled = false }, | |
filetypes = { | |
markdown = true, | |
} | |
} | |
end | |
}, | |
{ | |
"zbirenbaum/copilot-cmp", | |
after = { "copilot.lua" }, | |
config = function () | |
require("copilot_cmp").setup() | |
end | |
}, | |
{ "catppuccin/nvim", name = "catppuccin", priority = 1000 }, | |
{"xiyaowong/transparent.nvim"}, | |
{ | |
"max397574/better-escape.nvim", | |
config = function() | |
require("better_escape").setup{ | |
mapping = {"jk", "kj"}, | |
} | |
end, | |
}, | |
{ | |
'numToStr/Comment.nvim', | |
config = function() | |
require('Comment').setup() | |
end | |
}, | |
{ | |
"windwp/nvim-autopairs", | |
config = function() require("nvim-autopairs").setup {} end | |
}, | |
{'nvim-tree/nvim-web-devicons'}, | |
{'ray-x/go.nvim'}, | |
{'ray-x/guihua.lua'}, -- recommended if need floating window support | |
{ | |
'chentoast/marks.nvim', | |
config = function() | |
require('marks').setup() | |
end | |
} | |
-- NOTE: Next Step on Your Neovim Journey: Add/Configure additional "plugins" for kickstart | |
-- These are some example plugins that I've included in the kickstart repository. | |
-- Uncomment any of the lines below to enable them. | |
-- require 'kickstart.plugins.autoformat', | |
-- require 'kickstart.plugins.debug', | |
-- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua` | |
-- You can use this folder to prevent any conflicts with this init.lua if you're interested in keeping | |
-- up-to-date with whatever is in the kickstart repo. | |
-- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going. | |
-- | |
-- For additional information see: https://github.com/folke/lazy.nvim#-structuring-your-plugins | |
-- { import = 'custom.plugins' }, | |
}, {}) | |
-- [[ Setting options ]] | |
-- See `:help vim.o` | |
-- NOTE: You can change these options as you wish! | |
-- Set highlight on search | |
-- WHY Would you not want highlight on search??? | |
vim.o.hlsearch = true | |
-- Make line numbers default | |
vim.wo.number = false | |
-- Enable mouse mode | |
vim.o.mouse = 'a' | |
-- Sync clipboard between OS and Neovim. | |
-- Remove this option if you want your OS clipboard to remain independent. | |
-- See `:help 'clipboard'` | |
vim.o.clipboard = 'unnamedplus' | |
-- Enable break indent | |
vim.o.breakindent = true | |
-- Save undo history | |
vim.o.undofile = true | |
-- Case-insensitive searching UNLESS \C or capital in search | |
vim.o.ignorecase = true | |
vim.o.smartcase = true | |
-- Keep signcolumn on by default | |
vim.wo.signcolumn = 'no' | |
vim.api.nvim_set_hl(0, "SignColumn", { bg = "none"}) | |
-- highlight GitSignsAdd guibg=NONE | |
-- vim.o.nonumber = true | |
-- Decrease update time | |
vim.o.updatetime = 250 | |
vim.o.timeoutlen = 300 | |
-- Set completeopt to have a better completion experience | |
vim.o.completeopt = 'menuone,noselect' | |
-- NOTE: You should make sure your terminal supports this | |
vim.o.termguicolors = true | |
-- [[ Basic Keymaps ]] | |
-- Keymaps for better default experience | |
-- See `:help vim.keymap.set()` | |
vim.keymap.set({ 'n', 'v' }, '<Space>', '<Nop>', { silent = true }) | |
-- Remap for dealing with word wrap | |
vim.keymap.set('n', 'k', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) | |
vim.keymap.set('n', 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true }) | |
-- [[ Highlight on yank ]] | |
-- See `:help vim.highlight.on_yank()` | |
local highlight_group = vim.api.nvim_create_augroup('YankHighlight', { clear = true }) | |
vim.api.nvim_create_autocmd('TextYankPost', { | |
callback = function() | |
vim.highlight.on_yank() | |
end, | |
group = highlight_group, | |
pattern = '*', | |
}) | |
-- [[ Configure Telescope ]] | |
-- See `:help telescope` and `:help telescope.setup()` | |
require('telescope').setup { | |
defaults = { | |
mappings = { | |
i = { | |
['<C-u>'] = false, | |
['<C-d>'] = false, | |
}, | |
}, | |
}, | |
} | |
-- Enable telescope fzf native, if installed | |
pcall(require('telescope').load_extension, 'fzf') | |
-- See `:help telescope.builtin` | |
vim.keymap.set('n', '<leader>?', require('telescope.builtin').oldfiles, { desc = '[?] Find recently opened files' }) | |
vim.keymap.set('n', '<leader><space>', require('telescope.builtin').buffers, { desc = '[ ] Find existing buffers' }) | |
vim.keymap.set('n', '<leader>/', function() | |
-- You can pass additional configuration to telescope to change theme, layout, etc. | |
require('telescope.builtin').current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { | |
winblend = 10, | |
previewer = false, | |
}) | |
end, { desc = '[/] Fuzzily search in current buffer' }) | |
-- this is funning, but I don't know how to use my quickfix list | |
vim.keymap.set('n', '<leader>t', ':Make!<CR>') | |
-- Diagnostic keymaps | |
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous diagnostic message' }) | |
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next diagnostic message' }) | |
vim.keymap.set('n', '<leader>a', vim.diagnostic.open_float, { desc = 'Open floating diagnostic message' }) | |
-- vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagnostics list' }) | |
vim.keymap.set('n', '<leader>ff', require('telescope.builtin').git_files, { desc = 'Search [G]it [F]iles' }) | |
vim.keymap.set('n', '<leader>ft', require('telescope.builtin').find_files, { desc = '[S]earch [F]iles' }) | |
vim.keymap.set('n', '<leader>fh', require('telescope.builtin').help_tags, { desc = '[S]earch [H]elp' }) | |
vim.keymap.set('n', '<leader>fw', require('telescope.builtin').grep_string, { desc = '[S]earch current [W]ord' }) | |
vim.keymap.set('n', '<leader>fg', require('telescope.builtin').live_grep, { desc = '[S]earch by [G]rep' }) | |
vim.keymap.set('n', '<leader>fd', require('telescope.builtin').diagnostics, { desc = '[S]earch [D]iagnostics' }) | |
vim.keymap.set('n', '<leader>d', require('telescope.builtin').diagnostics, { desc = '[S]earch [D]iagnostics' }) | |
vim.keymap.set('n', '<leader>q', require('telescope.builtin').quickfix, { desc = 'Quickfix' }) | |
-- builtin.quickfix | |
-- Trouble Setup | |
vim.keymap.set("n", "<leader>xx", function() require("trouble").toggle() end) | |
vim.keymap.set("n", "<leader>xw", function() require("trouble").toggle("workspace_diagnostics") end) | |
vim.keymap.set("n", "<leader>xd", function() require("trouble").toggle("document_diagnostics") end) | |
vim.keymap.set("n", "<leader>xq", function() require("trouble").toggle("quickfix") end) | |
vim.keymap.set("n", "<leader>xl", function() require("trouble").toggle("loclist") end) | |
vim.keymap.set("n", "gR", function() require("trouble").toggle("lsp_references") end) | |
-- [[ Configure Treesitter ]] | |
-- See `:help nvim-treesitter` | |
require('nvim-treesitter.configs').setup { | |
-- Add languages to be installed here that you want installed for treesitter | |
ensure_installed = { 'c', 'cpp', 'go', 'lua', 'python', 'rust', 'tsx', 'typescript', 'vimdoc', 'vim' }, | |
-- Autoinstall languages that are not installed. Defaults to false (but you can change for yourself!) | |
auto_install = false, | |
highlight = { enable = true }, | |
indent = { enable = true }, | |
incremental_selection = { | |
enable = true, | |
keymaps = { | |
init_selection = '<c-space>', | |
node_incremental = '<c-space>', | |
scope_incremental = '<c-s>', | |
node_decremental = '<M-space>', | |
}, | |
}, | |
textobjects = { | |
select = { | |
enable = true, | |
lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim | |
keymaps = { | |
-- You can use the capture groups defined in textobjects.scm | |
['aa'] = '@parameter.outer', | |
['ia'] = '@parameter.inner', | |
['af'] = '@function.outer', | |
['if'] = '@function.inner', | |
['ac'] = '@class.outer', | |
['ic'] = '@class.inner', | |
}, | |
}, | |
move = { | |
enable = true, | |
set_jumps = true, -- whether to set jumps in the jumplist | |
goto_next_start = { | |
[']m'] = '@function.outer', | |
[']]'] = '@class.outer', | |
}, | |
goto_next_end = { | |
[']M'] = '@function.outer', | |
[']['] = '@class.outer', | |
}, | |
goto_previous_start = { | |
['[m'] = '@function.outer', | |
['[['] = '@class.outer', | |
}, | |
goto_previous_end = { | |
['[M'] = '@function.outer', | |
['[]'] = '@class.outer', | |
}, | |
}, | |
swap = { | |
enable = true, | |
swap_next = { | |
-- ['<leader>a'] = '@parameter.inner', | |
}, | |
swap_previous = { | |
-- ['<leader>A'] = '@parameter.inner', | |
}, | |
}, | |
}, | |
} | |
-- [[ Configure LSP ]] | |
-- This function gets run when an LSP connects to a particular buffer. | |
local on_attach = function(_, bufnr) | |
-- NOTE: Remember that lua is a real programming language, and as such it is possible | |
-- to define small helper and utility functions so you don't have to repeat yourself | |
-- many times. | |
-- | |
-- In this case, we create a function that lets us more easily define mappings specific | |
-- for LSP related items. It sets the mode, buffer and description for us each time. | |
local nmap = function(keys, func, desc) | |
if desc then | |
desc = 'LSP: ' .. desc | |
end | |
vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) | |
end | |
nmap('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame') | |
nmap('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction') | |
nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition') | |
nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') | |
nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation') | |
nmap('<leader>D', vim.lsp.buf.type_definition, 'Type [D]efinition') | |
-- nmap('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') | |
nmap('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') | |
-- See `:help K` for why this keymap | |
nmap('K', vim.lsp.buf.hover, 'Hover Documentation') | |
nmap('<C-k>', vim.lsp.buf.signature_help, 'Signature Documentation') | |
-- Lesser used LSP functionality | |
nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') | |
nmap('<leader>wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') | |
nmap('<leader>wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') | |
nmap('<leader>wl', function() | |
print(vim.inspect(vim.lsp.buf.list_workspace_folders())) | |
end, '[W]orkspace [L]ist Folders') | |
-- Create a command `:Format` local to the LSP buffer | |
vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) | |
vim.lsp.buf.format() | |
end, { desc = 'Format current buffer with LSP' }) | |
end | |
-- Enable the following language servers | |
-- Feel free to add/remove any LSPs that you want here. They will automatically be installed. | |
-- | |
-- Add any additional override configuration in the following tables. They will be passed to | |
-- the `settings` field of the server config. You must look up that documentation yourself. | |
-- | |
-- If you want to override the default filetypes that your language server will attach to you can | |
-- define the property 'filetypes' to the map in question. | |
local servers = { | |
-- clangd = {}, | |
-- gopls = {}, | |
-- pyright = {}, | |
-- rust_analyzer = {}, | |
-- tsserver = {}, | |
-- html = { filetypes = { 'html', 'twig', 'hbs'} }, | |
-- | |
-- pylsp = { | |
-- settings = { | |
-- pylint = {enabled=false}, | |
-- pyflakes={enabled=false}, | |
-- -- pylsp_mypy={enabled=false}, | |
-- -- pycodestyle={ | |
-- -- enabled=true, | |
-- -- ignore={'E501', 'E231'}, | |
-- -- maxLineLength=120}, | |
-- -- yapf={enabled=true} | |
-- }, | |
-- }, | |
-- pylsp = { | |
-- settings = { | |
-- pycodestyle = {enabled = false}, | |
-- pylint = {enabled = false}, | |
-- pyflakes = {enabled = false}, | |
-- flake8 = {enabled = false}, | |
-- -- mypy = {enabled = false}, | |
-- }, | |
-- }, | |
lua_ls = { | |
Lua = { | |
workspace = { checkThirdParty = false }, | |
telemetry = { enable = false }, | |
}, | |
}, | |
} | |
require("catppuccin").setup({ | |
flavour = "mocha", -- latte, frappe, macchiato, mocha | |
background = { -- :h background | |
light = "latte", | |
dark = "mocha", | |
}, | |
transparent_background = true, -- disables setting the background color. | |
show_end_of_buffer = false, -- shows the '~' characters after the end of buffers | |
term_colors = true, -- sets terminal colors (e.g. `g:terminal_color_0`) | |
dim_inactive = { | |
enabled = false, -- dims the background color of inactive window | |
shade = "dark", | |
percentage = 0.15, -- percentage of the shade to apply to the inactive window | |
}, | |
no_italic = false, -- Force no italic | |
no_bold = false, -- Force no bold | |
no_underline = false, -- Force no underline | |
styles = { -- Handles the styles of general hi groups (see `:h highlight-args`): | |
comments = { "italic" }, -- Change the style of comments | |
conditionals = { "italic" }, | |
loops = {}, | |
functions = {}, | |
keywords = {}, | |
strings = {}, | |
variables = {}, | |
numbers = {}, | |
booleans = {}, | |
properties = {}, | |
types = {}, | |
operators = {}, | |
}, | |
color_overrides = {}, | |
custom_highlights = {}, | |
integrations = { | |
cmp = true, | |
gitsigns = true, | |
nvimtree = true, | |
treesitter = true, | |
notify = false, | |
mini = { | |
enabled = true, | |
indentscope_color = "", | |
}, | |
-- For more plugins integrations please scroll down (https://github.com/catppuccin/nvim#integrations) | |
}, | |
}) | |
-- Setup neovim lua configuration | |
require('neodev').setup() | |
-- nvim-cmp supports additional completion capabilities, so broadcast that to servers | |
local capabilities = vim.lsp.protocol.make_client_capabilities() | |
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) | |
-- Ensure the servers above are installed | |
local mason_lspconfig = require 'mason-lspconfig' | |
mason_lspconfig.setup { | |
ensure_installed = vim.tbl_keys(servers), | |
} | |
mason_lspconfig.setup_handlers { | |
function(server_name) | |
require('lspconfig')[server_name].setup { | |
capabilities = capabilities, | |
on_attach = on_attach, | |
settings = servers[server_name], | |
filetypes = (servers[server_name] or {}).filetypes, | |
} | |
end | |
} | |
-- TODO: We are trying to fix this | |
-- [[ Configure nvim-cmp ]] | |
-- See `:help cmp` | |
local cmp = require 'cmp' | |
local luasnip = require 'luasnip' | |
require('luasnip.loaders.from_vscode').lazy_load() | |
luasnip.config.setup {} | |
cmp.setup { | |
snippet = { | |
expand = function(args) | |
luasnip.lsp_expand(args.body) | |
end, | |
}, | |
mapping = cmp.mapping.preset.insert { | |
['<C-n>'] = cmp.mapping.select_next_item(), | |
['<C-p>'] = cmp.mapping.select_prev_item(), | |
['<C-d>'] = cmp.mapping.scroll_docs(-4), | |
['<C-f>'] = cmp.mapping.scroll_docs(4), | |
['<C-Space>'] = cmp.mapping.complete {}, | |
['<CR>'] = cmp.mapping.confirm { | |
behavior = cmp.ConfirmBehavior.Replace, | |
select = true, | |
}, | |
['<Tab>'] = cmp.mapping(function(fallback) | |
if cmp.visible() then | |
cmp.select_next_item() | |
elseif luasnip.expand_or_locally_jumpable() then | |
luasnip.expand_or_jump() | |
else | |
fallback() | |
end | |
end, { 'i', 's' }), | |
['<S-Tab>'] = cmp.mapping(function(fallback) | |
if cmp.visible() then | |
cmp.select_prev_item() | |
elseif luasnip.locally_jumpable(-1) then | |
luasnip.jump(-1) | |
else | |
fallback() | |
end | |
end, { 'i', 's' }), | |
}, | |
sources = { | |
{ name = 'nvim_lsp' }, | |
{ name = 'luasnip' }, | |
{ name = 'copilot' }, | |
{ name = 'copilot_cmp' }, | |
}, | |
} | |
-- require('lspconfig').pylsp.setup { | |
-- on_attach = on_attach, | |
-- flags = { | |
-- -- This will be the default in neovim 0.7+ | |
-- debounce_text_changes = 150, | |
-- }, | |
-- settings = { | |
-- -- configure plugins in pylsp | |
-- pylsp = { | |
-- plugins = { | |
-- pyflakes = {enabled = false}, | |
-- pylint = {enabled = false}, | |
-- }, | |
-- }, | |
-- }, | |
-- } | |
-- The line beneath this is called `modeline`. See `:help modeline` | |
-- vim: ts=2 sts=2 sw=2 et | |
-- Begin Keymappings | |
-- Open file directory of current file | |
vim.keymap.set("n", "<leader>e", vim.cmd.Ex) | |
-- Quick save | |
vim.keymap.set("n", ",,", "<cmd>w <CR>") | |
-- Need to be audited / From Prime | |
-- ----------------------------------------------------------------------------- | |
vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv") | |
vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv") | |
vim.keymap.set("n", "J", "mzJ`z") | |
vim.keymap.set("n", "<C-d>", "<C-d>zz") | |
vim.keymap.set("n", "<C-u>", "<C-u>zz") | |
vim.keymap.set("n", "n", "nzzzv") | |
vim.keymap.set("n", "N", "Nzzzv") | |
-- greatest remap ever | |
vim.keymap.set("x", "<leader>p", [["_dP]]) | |
-- next greatest remap ever : asbjornHaland | |
vim.keymap.set({"n", "v"}, "<leader>y", [["+y]]) | |
vim.keymap.set("n", "<leader>Y", [["+Y]]) | |
-- Not sure Waht I'd use this for | |
-- TODO: explore more | |
-- vim.keymap.set({"n", "v"}, "<leader>d", [["_d]]) | |
-- This is going to get me cancelled | |
vim.keymap.set("i", "<C-c>", "<Esc>") | |
vim.keymap.set("n", "Q", "<nop>") | |
vim.keymap.set("n", "<C-f>", "<cmd>silent !tmux neww tmux-sessionizer<CR>") | |
vim.keymap.set("n", "<leader>f", vim.lsp.buf.format) | |
vim.keymap.set("n", "<C-k>", "<cmd>cnext<CR>zz") | |
vim.keymap.set("n", "<C-j>", "<cmd>cprev<CR>zz") | |
vim.keymap.set("n", "<leader>k", "<cmd>lnext<CR>zz") | |
vim.keymap.set("n", "<leader>j", "<cmd>lprev<CR>zz") | |
vim.keymap.set("n", "<leader>s", [[:%s/\<<C-r><C-w>\>/<C-r><C-w>/gI<Left><Left><Left>]]) | |
vim.keymap.set("n", "<leader>x", "<cmd>!chmod +x %<CR>", { silent = true }) | |
vim.keymap.set("n", "<leader><leader>", function() | |
vim.cmd("so") | |
end) | |
-- ----------------------------------------------------------------------------- | |
-- I don't know if I really use this, or want to use it | |
-- navigate within insert mode | |
vim.keymap.set("i", "<C-h>", "<Left>") | |
vim.keymap.set("i", "<C-l>", "<Right>") | |
vim.keymap.set("i", "<C-j>", "<Down>") | |
vim.keymap.set("i", "<C-k>", "<Up>") | |
-- Clear highlights | |
vim.keymap.set("n", "<Esc>", ":noh <CR>") | |
-- switch between windows | |
-- This is not working for some reason | |
vim.keymap.set("n", "<C-h>", "<C-w>h") | |
vim.keymap.set("n", "<C-l>", "<C-w>l") | |
vim.keymap.set("n", "<C-j>", "<C-w>j") | |
vim.keymap.set("n", "<C-k>", "<C-w>k") | |
-- line numbers | |
vim.keymap.set("n", "<leader>n", "<cmd> set nu!<CR>") | |
-- vim.keymap.set("n", "<leader>rn", "<cmd> set rnu!<CR>") | |
-- Escape Terminal Mode | |
vim.keymap.set("t", "<C-x>", vim.api.nvim_replace_termcodes("<C-\\><C-N>", true, true, true)) | |
-- Focus on one of the vertical splits | |
vim.keymap.set("n", "ff", "<cmd> resize 100 <CR> <BAR> <cmd> :vertical resize 220 <CR>") | |
vim.keymap.set("n", "fm", "<C-w>=") | |
-- Toggle a cursor for focusing on the cursor | |
-- Twitch chat hates it | |
vim.keymap.set("n", "<leader>H", "<cmd> set cursorline! cursorcolumn! <CR>") | |
vim.cmd.colorscheme "catppuccin" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment