Merge branch 'master' into master
This commit is contained in:
		
						commit
						42e2b4e9bc
					
				|  | @ -0,0 +1,20 @@ | |||
| # Check Lua Formatting | ||||
| name: Check Lua Formatting | ||||
| on: pull_request_target | ||||
| 
 | ||||
| jobs: | ||||
|   stylua-check: | ||||
|     name: Stylua Check | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - name: Checkout Code | ||||
|         uses: actions/checkout@v2 | ||||
|         with: | ||||
|           ref: ${{ github.event.pull_request.head.sha }} | ||||
|       - name: Stylua Check | ||||
|         uses: JohnnyMorganz/stylua-action@v3 | ||||
|         with: | ||||
|           token: ${{ secrets.GITHUB_TOKEN }} | ||||
|           version: latest | ||||
|           args: --check . | ||||
| 
 | ||||
|  | @ -2,4 +2,3 @@ tags | |||
| test.sh | ||||
| .luarc.json | ||||
| nvim | ||||
| lazy-lock.json | ||||
|  |  | |||
|  | @ -3,4 +3,4 @@ line_endings = "Unix" | |||
| indent_type = "Spaces" | ||||
| indent_width = 2 | ||||
| quote_style = "AutoPreferSingle" | ||||
| no_call_parentheses = true | ||||
| call_parentheses = "None" | ||||
|  |  | |||
							
								
								
									
										128
									
								
								README.md
								
								
								
								
							
							
						
						
									
										128
									
								
								README.md
								
								
								
								
							|  | @ -1,5 +1,7 @@ | |||
| # kickstart.nvim | ||||
| 
 | ||||
| https://github.com/kdheepak/kickstart.nvim/assets/1813121/f3ff9a2b-c31f-44df-a4fa-8a0d7b17cf7b | ||||
| 
 | ||||
| ### Introduction | ||||
| 
 | ||||
| A starting point for Neovim that is: | ||||
|  | @ -9,37 +11,87 @@ A starting point for Neovim that is: | |||
| * Documented | ||||
| * Modular | ||||
| 
 | ||||
| This repo is meant to be used as by **YOU** to begin your Neovim journey; remove the things you don't use and add what you miss. | ||||
| This repo is meant to be used by **YOU** to begin your Neovim journey; remove the things you don't use and add what you miss. | ||||
| 
 | ||||
| Kickstart.nvim targets *only* the latest ['stable'](https://github.com/neovim/neovim/releases/tag/stable) and latest ['nightly'](https://github.com/neovim/neovim/releases/tag/nightly) of Neovim. If you are experiencing issues, please make sure you have the latest versions. | ||||
| 
 | ||||
| Distribution Alternatives: | ||||
| - [LazyVim](https://www.lazyvim.org/): A delightful distribution maintained by @folke (the author of lazy.nvim, the package manager used here) | ||||
| 
 | ||||
| ### Installation | ||||
| 
 | ||||
| Kickstart.nvim targets *only* the latest ['stable'](https://github.com/neovim/neovim/releases/tag/stable) and latest ['nightly'](https://github.com/neovim/neovim/releases/tag/nightly) of Neovim. If you are experiencing issues, please make sure you have the latest versions. | ||||
| > **NOTE**  | ||||
| > [Backup](#FAQ) your previous configuration (if any exists) | ||||
| 
 | ||||
| * Backup your previous configuration | ||||
| * (Recommended) Fork this repo (so that you have your own copy that you can modify). | ||||
| * Clone the kickstart repo into `$HOME/.config/nvim/` (Linux/Mac) or `~/AppData/Local/nvim/` (Windows) | ||||
|   * If you don't want to include it as a git repo, you can just clone it and then move the files to this location | ||||
| * Start Neovim (`nvim`) and allow `lazy.nvim` to complete installation. | ||||
| * Restart Neovim | ||||
| * **You're ready to go!** | ||||
| Requirements: | ||||
| * Make sure to review the readmes of the plugins if you are experiencing errors. In particular: | ||||
|   * [ripgrep](https://github.com/BurntSushi/ripgrep#installation) is required for multiple [telescope](https://github.com/nvim-telescope/telescope.nvim#suggested-dependencies) pickers. | ||||
| * See [Windows Installation](#Windows-Installation) if you have trouble with `telescope-fzf-native` | ||||
| 
 | ||||
| Additional system requirements: | ||||
| - Make sure to review the readmes of the plugins if you are experiencing errors. In particular: | ||||
|   - [ripgrep](https://github.com/BurntSushi/ripgrep#installation) is required for multiple [telescope](https://github.com/nvim-telescope/telescope.nvim#suggested-dependencies) pickers. | ||||
| - See as well [Windows Installation](#Windows-Installation) | ||||
| Neovim's configurations are located under the following paths, depending on your OS: | ||||
| 
 | ||||
| | OS | PATH | | ||||
| | :- | :--- | | ||||
| | Linux | `$XDG_CONFIG_HOME/nvim`, `~/.config/nvim` | | ||||
| | MacOS | `$XDG_CONFIG_HOME/nvim`, `~/.config/nvim` | | ||||
| | Windows (cmd)| `%userprofile%\AppData\Local\nvim\` | | ||||
| | Windows (powershell)| `$env:USERPROFILE\AppData\Local\nvim\` | | ||||
| 
 | ||||
| Clone kickstart.nvim: | ||||
| 
 | ||||
| - on Linux and Mac | ||||
| ```sh | ||||
| git clone https://github.com/nvim-lua/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HOME/.config}"/nvim | ||||
| ``` | ||||
| 
 | ||||
| - on Windows (cmd) | ||||
| ``` | ||||
| git clone https://github.com/nvim-lua/kickstart.nvim.git %userprofile%\AppData\Local\nvim\  | ||||
| ``` | ||||
| 
 | ||||
| - on Windows (powershell) | ||||
| ``` | ||||
| git clone https://github.com/nvim-lua/kickstart.nvim.git $env:USERPROFILE\AppData\Local\nvim\  | ||||
| ``` | ||||
| 
 | ||||
| 
 | ||||
| ### Post Installation | ||||
| 
 | ||||
| Start Neovim | ||||
| 
 | ||||
| ```sh | ||||
| nvim | ||||
| ``` | ||||
| 
 | ||||
| The `Lazy` plugin manager will start automatically on the first run and install the configured plugins - as can be seen in the introduction video. After the installation is complete you can press `q` to close the `Lazy` UI and **you are ready to go**! Next time you run nvim `Lazy` will no longer show up. | ||||
| 
 | ||||
| If you would prefer to hide this step and run the plugin sync from the command line, you can use: | ||||
| 
 | ||||
| ```sh | ||||
| nvim --headless "+Lazy! sync" +qa | ||||
| ``` | ||||
| 
 | ||||
| ### Getting Started | ||||
| 
 | ||||
| See [Effective Neovim: Instant IDE](https://youtu.be/stqUbv-5u2s), covering the previous version. Note: The install via init.lua is outdated, please follow the install instructions in this file instead. An updated video is coming soon. | ||||
| 
 | ||||
| ### Recommended Steps | ||||
| 
 | ||||
| [Fork](https://docs.github.com/en/get-started/quickstart/fork-a-repo) this repo (so that you have your own copy that you can modify) and then installing you can install to your machine using the methods above. | ||||
| 
 | ||||
| > **NOTE**   | ||||
| > Your fork's url will be something like this: `https://github.com/<your_github_username>/kickstart.nvim.git` | ||||
| 
 | ||||
| ### Configuration And Extension | ||||
| 
 | ||||
| * Inside of your fork, feel free to modify any file you like! It's your fork! | ||||
| * Then there are two primary configuration options available: | ||||
| * Inside of your copy, feel free to modify any file you like! It's your copy! | ||||
| * Feel free to change any of the default options in `init.lua` to better suit your needs. | ||||
| * For adding plugins, there are 3 primary options: | ||||
|   * Add new configuration in `lua/custom/plugins/*` files, which will be auto sourced using `lazy.nvim` (uncomment the line importing the `custom/plugins` directory in the `init.lua` file to enable this) | ||||
|   * Modify `init.lua` with additional plugins. | ||||
|   * Include the `lua/kickstart/plugins/*` files in your configuration. | ||||
|   * Add new configuration in `lua/custom/plugins/*` files, which will be auto sourced using `lazy.nvim` | ||||
|     * NOTE: To enable this, you need to uncomment `{ import = 'custom.plugins' }` in your `init.lua` | ||||
| 
 | ||||
| You can also merge updates/changes from the repo back into your fork, to keep up-to-date with any changes for the default configuration | ||||
| You can also merge updates/changes from the repo back into your fork, to keep up-to-date with any changes for the default configuration. | ||||
| 
 | ||||
| #### Example: Adding an autopairs plugin | ||||
| 
 | ||||
|  | @ -50,14 +102,23 @@ In the file: `lua/custom/plugins/autopairs.lua`, add: | |||
| 
 | ||||
| return { | ||||
|   "windwp/nvim-autopairs", | ||||
|   -- Optional dependency | ||||
|   dependencies = { 'hrsh7th/nvim-cmp' }, | ||||
|   config = function() | ||||
|     require("nvim-autopairs").setup {} | ||||
|     -- If you want to automatically add `(` after selecting a function or method | ||||
|     local cmp_autopairs = require('nvim-autopairs.completion.cmp') | ||||
|     local cmp = require('cmp') | ||||
|     cmp.event:on( | ||||
|       'confirm_done', | ||||
|       cmp_autopairs.on_confirm_done() | ||||
|     ) | ||||
|   end, | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| 
 | ||||
| This will automatically install `nvim-autopairs` and enable it on startup. For more information, see documentation for [lazy.nvim](https://github.com/folke/lazy.nvim). | ||||
| This will automatically install [windwp/nvim-autopairs](https://github.com/windwp/nvim-autopairs) and enable it on startup. For more information, see documentation for [lazy.nvim](https://github.com/folke/lazy.nvim). | ||||
| 
 | ||||
| #### Example: Adding a file tree plugin | ||||
| 
 | ||||
|  | @ -83,16 +144,6 @@ return { | |||
| 
 | ||||
| This will install the tree plugin and add the command `:Neotree` for you. You can explore the documentation at [neo-tree.nvim](https://github.com/nvim-neo-tree/neo-tree.nvim) for more information. | ||||
| 
 | ||||
| #### Example: Adding a file to change default options | ||||
| 
 | ||||
| To change default options, you can add a file in the `/after/plugin/` folder (see `:help load-plugins`) to include your own options, keymaps, autogroups, and more. The following is an example `defaults.lua` file (located at `$HOME/.config/nvim/after/plugin/defaults.lua`). | ||||
| 
 | ||||
| ```lua | ||||
| vim.opt.relativenumber = true | ||||
| 
 | ||||
| vim.keymap.set('n', '<leader>sr', require('telescope.builtin').resume, { desc = '[S]earch [R]esume' }) | ||||
| ``` | ||||
| 
 | ||||
| ### Contribution | ||||
| 
 | ||||
| Pull-requests are welcome. The goal of this repo is not to create a Neovim configuration framework, but to offer a starting template that shows, by example, available features in Neovim. Some things that will not be included: | ||||
|  | @ -108,11 +159,24 @@ Each PR, especially those which increase the line count, should have a descripti | |||
|   * You should back it up, then delete all files associated with it. | ||||
|   * This includes your existing init.lua and the neovim files in `~/.local` which can be deleted with `rm -rf ~/.local/share/nvim/` | ||||
|   * You may also want to look at the [migration guide for lazy.nvim](https://github.com/folke/lazy.nvim#-migration-guide) | ||||
| * Can I keep my existing configuration in parallel to kickstart? | ||||
|   * Yes! You can use [NVIM_APPNAME](https://neovim.io/doc/user/starting.html#%24NVIM_APPNAME)`=nvim-NAME` to maintain multiple configurations. For example you can install the kickstart configuration in `~/.config/nvim-kickstart` and create an alias: | ||||
|     ``` | ||||
|     alias nvim-kickstart='NVIM_APPNAME="nvim-kickstart" nvim' | ||||
|     ``` | ||||
|     When you run Neovim using `nvim-kickstart` alias it will use the alternative config directory and the matching local directory `~/.local/share/nvim-kickstart`. You can apply this approach to any Neovim distribution that you would like to try out. | ||||
| * What if I want to "uninstall" this configuration: | ||||
|   * See [lazy.nvim uninstall](https://github.com/folke/lazy.nvim#-uninstalling) information | ||||
| * Are there any cool videos about this plugin? | ||||
|   * Current iteration of kickstart (coming soon) | ||||
|   * Here is one about the previous iteration of kickstart: [video introduction to Kickstart.nvim](https://youtu.be/stqUbv-5u2s). | ||||
| * Why is the kickstart `init.lua` a single file? Wouldn't it make sense to split it into multiple files? | ||||
|   * The main purpose of kickstart is to serve as a teaching tool and a reference | ||||
|     configuration that someone can easily `git clone` as a basis for their own. | ||||
|     As you progress in learning Neovim and Lua, you might consider splitting `init.lua` | ||||
|     into smaller parts. A fork of kickstart that does this while maintaining the exact | ||||
|     same functionality is available here: | ||||
|     * [kickstart-modular.nvim](https://github.com/dam9000/kickstart-modular.nvim) | ||||
|   * Discussions on this topic can be found here: | ||||
|     * [Restructure the configuration](https://github.com/nvim-lua/kickstart.nvim/issues/218) | ||||
|     * [Reorganize init.lua into a multi-file setup](https://github.com/nvim-lua/kickstart.nvim/pull/473) | ||||
| 
 | ||||
| ### Windows Installation | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										262
									
								
								init.lua
								
								
								
								
							
							
						
						
									
										262
									
								
								init.lua
								
								
								
								
							|  | @ -1,10 +1,25 @@ | |||
| --[[ | ||||
| 
 | ||||
| ===================================================================== | ||||
| ==================== 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` | ||||
|   - https://neovim.io/doc/user/lua-guide.html | ||||
| 
 | ||||
| 
 | ||||
| Kickstart Guide: | ||||
|  | @ -46,7 +61,7 @@ vim.filetype.add({ | |||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| -- Install package manager | ||||
| -- [[ Install `lazy.nvim` plugin manager ]] | ||||
| --    https://github.com/folke/lazy.nvim | ||||
| --    `:help lazy.nvim.txt` for more info | ||||
| local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim' | ||||
|  | @ -62,6 +77,7 @@ if not vim.loop.fs_stat(lazypath) then | |||
| end | ||||
| vim.opt.rtp:prepend(lazypath) | ||||
| 
 | ||||
| -- [[ Configure plugins ]] | ||||
| -- NOTE: Here is where you install your plugins. | ||||
| --  You can configure plugins using the `config` key. | ||||
| -- | ||||
|  | @ -111,13 +127,26 @@ require('lazy').setup({ | |||
|   { | ||||
|     -- Autocompletion | ||||
|     'hrsh7th/nvim-cmp', | ||||
|     dependencies = { 'hrsh7th/cmp-nvim-lsp', 'L3MON4D3/LuaSnip', 'saadparwaiz1/cmp_luasnip' }, | ||||
|     dependencies = { | ||||
|       -- Snippet Engine & its associated nvim-cmp source | ||||
|       'L3MON4D3/LuaSnip', | ||||
|       'saadparwaiz1/cmp_luasnip', | ||||
| 
 | ||||
|       -- Adds LSP completion capabilities | ||||
|       'hrsh7th/cmp-nvim-lsp', | ||||
|       'hrsh7th/cmp-path', | ||||
| 
 | ||||
|       -- Adds a number of user-friendly snippets | ||||
|       'rafamadriz/friendly-snippets', | ||||
|     }, | ||||
|   }, | ||||
| 
 | ||||
|   -- Useful plugin to show you pending keybinds. | ||||
| 
 | ||||
|      | ||||
|   { 'folke/which-key.nvim', opts = {} }, | ||||
|   { | ||||
|     -- Adds git releated signs to the gutter, as well as utilities for managing changes | ||||
|     -- Adds git related signs to the gutter, as well as utilities for managing changes | ||||
|     'lewis6991/gitsigns.nvim', | ||||
|     opts = { | ||||
|       -- See `:help gitsigns.txt` | ||||
|  | @ -128,16 +157,81 @@ require('lazy').setup({ | |||
|         topdelete = { text = '‾' }, | ||||
|         changedelete = { text = '~' }, | ||||
|       }, | ||||
|       on_attach = function(bufnr) | ||||
|         local gs = package.loaded.gitsigns | ||||
| 
 | ||||
|         local function map(mode, l, r, opts) | ||||
|           opts = opts or {} | ||||
|           opts.buffer = bufnr | ||||
|           vim.keymap.set(mode, l, r, opts) | ||||
|         end | ||||
| 
 | ||||
|         -- Navigation | ||||
|         map({ 'n', 'v' }, ']c', function() | ||||
|           if vim.wo.diff then | ||||
|             return ']c' | ||||
|           end | ||||
|           vim.schedule(function() | ||||
|             gs.next_hunk() | ||||
|           end) | ||||
|           return '<Ignore>' | ||||
|         end, { expr = true, desc = 'Jump to next hunk' }) | ||||
| 
 | ||||
|         map({ 'n', 'v' }, '[c', function() | ||||
|           if vim.wo.diff then | ||||
|             return '[c' | ||||
|           end | ||||
|           vim.schedule(function() | ||||
|             gs.prev_hunk() | ||||
|           end) | ||||
|           return '<Ignore>' | ||||
|         end, { expr = true, desc = 'Jump to previous hunk' }) | ||||
| 
 | ||||
|         -- Actions | ||||
|         -- visual mode | ||||
|         map('v', '<leader>hs', function() | ||||
|           gs.stage_hunk { vim.fn.line '.', vim.fn.line 'v' } | ||||
|         end, { desc = 'stage git hunk' }) | ||||
|         map('v', '<leader>hr', function() | ||||
|           gs.reset_hunk { vim.fn.line '.', vim.fn.line 'v' } | ||||
|         end, { desc = 'reset git hunk' }) | ||||
|         -- normal mode | ||||
|         map('n', '<leader>hs', gs.stage_hunk, { desc = 'git stage hunk' }) | ||||
|         map('n', '<leader>hr', gs.reset_hunk, { desc = 'git reset hunk' }) | ||||
|         map('n', '<leader>hS', gs.stage_buffer, { desc = 'git Stage buffer' }) | ||||
|         map('n', '<leader>hu', gs.undo_stage_hunk, { desc = 'undo stage hunk' }) | ||||
|         map('n', '<leader>hR', gs.reset_buffer, { desc = 'git Reset buffer' }) | ||||
|         map('n', '<leader>hp', gs.preview_hunk, { desc = 'preview git hunk' }) | ||||
|         map('n', '<leader>hb', function() | ||||
|           gs.blame_line { full = false } | ||||
|         end, { desc = 'git blame line' }) | ||||
|         map('n', '<leader>hd', gs.diffthis, { desc = 'git diff against index' }) | ||||
|         map('n', '<leader>hD', function() | ||||
|           gs.diffthis '~' | ||||
|         end, { desc = 'git diff against last commit' }) | ||||
| 
 | ||||
|         -- Toggles | ||||
|         map('n', '<leader>tb', gs.toggle_current_line_blame, { desc = 'toggle git blame line' }) | ||||
|         map('n', '<leader>td', gs.toggle_deleted, { desc = 'toggle git show deleted' }) | ||||
| 
 | ||||
|         -- Text object | ||||
|         map({ 'o', 'x' }, 'ih', ':<C-U>Gitsigns select_hunk<CR>', { desc = 'select git hunk' }) | ||||
|       end, | ||||
|     }, | ||||
|   }, | ||||
| 
 | ||||
|   { | ||||
|     -- Theme inspired by Atom | ||||
|     'navarasu/onedark.nvim' | ||||
|     -- priority = 1000, | ||||
|     -- config = function() | ||||
|     --   vim.cmd.colorscheme 'onedark' | ||||
|     -- end, | ||||
|     'navarasu/onedark.nvim', | ||||
|     priority = 1000, | ||||
|     lazy = false, | ||||
|     config = function() | ||||
|       require('onedark').setup { | ||||
|         -- Set a style preset. 'dark' is default. | ||||
|         style = 'dark', -- dark, darker, cool, deep, warm, warmer, light | ||||
|       } | ||||
|       require('onedark').load() | ||||
|     end, | ||||
|   }, | ||||
|     { | ||||
|     'rose-pine/neovim', | ||||
|  | @ -159,7 +253,7 @@ require('lazy').setup({ | |||
|     opts = { | ||||
|       options = { | ||||
|         icons_enabled = false, | ||||
|         theme = 'rose-pine', | ||||
|         theme = 'auto', | ||||
|         component_separators = '|', | ||||
|         section_separators = '', | ||||
|       }, | ||||
|  | @ -172,16 +266,18 @@ require('lazy').setup({ | |||
|     -- Enable `lukas-reineke/indent-blankline.nvim` | ||||
|     -- See `:help indent_blankline.txt` | ||||
|     main = 'ibl', | ||||
|     opts = { | ||||
|     }, | ||||
|     opts = {}, | ||||
|   }, | ||||
| 
 | ||||
|   -- "gc" to comment visual regions/lines | ||||
|   { 'numToStr/Comment.nvim',         opts = {} }, | ||||
| 
 | ||||
|   -- Fuzzy Finder (files, lsp, etc) | ||||
|   { 'nvim-telescope/telescope.nvim', version = '*', dependencies = { 'nvim-lua/plenary.nvim' } }, | ||||
| 
 | ||||
|   { | ||||
|     '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. | ||||
|  | @ -194,6 +290,8 @@ require('lazy').setup({ | |||
|           return vim.fn.executable 'make' == 1 | ||||
|         end, | ||||
|       }, | ||||
|     }, | ||||
|   }, | ||||
| 
 | ||||
|   { | ||||
|     -- Highlight, edit, and navigate code | ||||
|  | @ -201,7 +299,7 @@ require('lazy').setup({ | |||
|     dependencies = { | ||||
|       'nvim-treesitter/nvim-treesitter-textobjects', | ||||
|     }, | ||||
|     build = ":TSUpdate", | ||||
|     build = ':TSUpdate', | ||||
|   }, | ||||
|   { | ||||
|     -- Highlight, edit, and navigate code | ||||
|  | @ -240,9 +338,10 @@ require('lazy').setup({ | |||
|   require 'kickstart.plugins.autoformat', | ||||
|   -- require 'kickstart.plugins.debug', | ||||
| 
 | ||||
|   -- NOTE: The import below automatically adds your own plugins, configuration, etc from `lua/custom/plugins/*.lua` | ||||
|   -- 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 | ||||
|   -- | ||||
|  | @ -259,6 +358,7 @@ require('lazy').setup({ | |||
| 
 | ||||
| -- [[ Setting options ]] | ||||
| -- See `:help vim.o` | ||||
| -- NOTE: You can change these options as you wish! | ||||
| 
 | ||||
| 
 | ||||
| -- Enable mouse mode | ||||
|  | @ -275,7 +375,7 @@ vim.o.breakindent = true | |||
| -- Save undo history | ||||
| vim.o.undofile = true | ||||
| 
 | ||||
| -- Case insensitive searching UNLESS /C or capital in search | ||||
| -- Case-insensitive searching UNLESS \C or capital in search | ||||
| vim.o.ignorecase = true | ||||
| vim.o.smartcase = true | ||||
| 
 | ||||
|  | @ -284,7 +384,6 @@ vim.wo.signcolumn = 'yes' | |||
| 
 | ||||
| -- Decrease update time | ||||
| vim.o.updatetime = 250 | ||||
| vim.o.timeout = true | ||||
| vim.o.timeoutlen = 300 | ||||
| 
 | ||||
| -- Set completeopt to have a better completion experience | ||||
|  | @ -342,8 +441,11 @@ vim.api.nvim_create_autocmd({ "BufEnter", "BufWinEnter" }, | |||
| --   group = format_sync_grp, | ||||
| -- }) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| -- 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>e', vim.diagnostic.open_float, { desc = 'Open floating diagnostic message' }) | ||||
| vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagnostics list' }) | ||||
| 
 | ||||
| -- [[ Highlight on yank ]] | ||||
| -- See `:help vim.highlight.on_yank()` | ||||
|  | @ -372,6 +474,42 @@ require('telescope').setup { | |||
| -- Enable telescope fzf native, if installed | ||||
| pcall(require('telescope').load_extension, 'fzf') | ||||
| 
 | ||||
| -- Telescope live_grep in git root | ||||
| -- Function to find the git root directory based on the current buffer's path | ||||
| local function find_git_root() | ||||
|   -- Use the current buffer's path as the starting point for the git search | ||||
|   local current_file = vim.api.nvim_buf_get_name(0) | ||||
|   local current_dir | ||||
|   local cwd = vim.fn.getcwd() | ||||
|   -- If the buffer is not associated with a file, return nil | ||||
|   if current_file == '' then | ||||
|     current_dir = cwd | ||||
|   else | ||||
|     -- Extract the directory from the current file's path | ||||
|     current_dir = vim.fn.fnamemodify(current_file, ':h') | ||||
|   end | ||||
| 
 | ||||
|   -- Find the Git root directory from the current file's path | ||||
|   local git_root = vim.fn.systemlist('git -C ' .. vim.fn.escape(current_dir, ' ') .. ' rev-parse --show-toplevel')[1] | ||||
|   if vim.v.shell_error ~= 0 then | ||||
|     print 'Not a git repository. Searching on current working directory' | ||||
|     return cwd | ||||
|   end | ||||
|   return git_root | ||||
| end | ||||
| 
 | ||||
| -- Custom live_grep function to search in git root | ||||
| local function live_grep_git_root() | ||||
|   local git_root = find_git_root() | ||||
|   if git_root then | ||||
|     require('telescope.builtin').live_grep { | ||||
|       search_dirs = { git_root }, | ||||
|     } | ||||
|   end | ||||
| end | ||||
| 
 | ||||
| vim.api.nvim_create_user_command('LiveGrepGitRoot', live_grep_git_root, {}) | ||||
| 
 | ||||
| -- 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' }) | ||||
|  | @ -383,23 +521,41 @@ vim.keymap.set('n', '<leader>/', function() | |||
|   }) | ||||
| end, { desc = '[/] Fuzzily search in current buffer' }) | ||||
| 
 | ||||
| local function telescope_live_grep_open_files() | ||||
|   require('telescope.builtin').live_grep { | ||||
|     grep_open_files = true, | ||||
|     prompt_title = 'Live Grep in Open Files', | ||||
|   } | ||||
| end | ||||
| vim.keymap.set('n', '<leader>s/', telescope_live_grep_open_files, { desc = '[S]earch [/] in Open Files' }) | ||||
| vim.keymap.set('n', '<leader>ss', require('telescope.builtin').builtin, { desc = '[S]earch [S]elect Telescope' }) | ||||
| vim.keymap.set('n', '<leader>gf', require('telescope.builtin').git_files, { desc = 'Search [G]it [F]iles' }) | ||||
| vim.keymap.set('n', '<leader>sf', require('telescope.builtin').find_files, { desc = '[S]earch [F]iles' }) | ||||
| vim.keymap.set('n', '<leader>sh', require('telescope.builtin').help_tags, { desc = '[S]earch [H]elp' }) | ||||
| vim.keymap.set('n', '<leader>sw', require('telescope.builtin').grep_string, { desc = '[S]earch current [W]ord' }) | ||||
| vim.keymap.set('n', '<leader>sg', require('telescope.builtin').live_grep, { desc = '[S]earch by [G]rep' }) | ||||
| vim.keymap.set('n', '<leader>sG', ':LiveGrepGitRoot<cr>', { desc = '[S]earch by [G]rep on Git Root' }) | ||||
| vim.keymap.set('n', '<leader>sd', require('telescope.builtin').diagnostics, { desc = '[S]earch [D]iagnostics' }) | ||||
| vim.keymap.set('n', '<leader>sr', require('telescope.builtin').resume, { desc = '[S]earch [R]esume' }) | ||||
| 
 | ||||
| -- [[ Configure Treesitter ]] | ||||
| -- See `:help nvim-treesitter` | ||||
| -- Defer Treesitter setup after first render to improve startup time of 'nvim {filename}' | ||||
| vim.defer_fn(function() | ||||
|   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', 'html', 'css' }, | ||||
|     ensure_installed = { 'c', 'cpp', 'go', 'lua', 'python', 'rust', 'tsx', 'javascript', 'typescript', 'vimdoc', 'vim', 'bash', 'css', 'svelte' }, | ||||
| 
 | ||||
|     -- Autoinstall languages that are not installed. Defaults to false (but you can change for yourself!) | ||||
|     auto_install = false, | ||||
| 
 | ||||
|     -- Install languages synchronously (only applied to `ensure_installed`) | ||||
|     sync_install = false, | ||||
|     -- List of parsers to ignore installing | ||||
|     ignore_install = {}, | ||||
|     -- You can specify additional Treesitter modules here: -- For example: -- playground = {--enable = true,-- }, | ||||
|     modules = {}, | ||||
|     highlight = { enable = true }, | ||||
|   indent = { enable = true, disable = { 'python' } }, | ||||
|     indent = { enable = true }, | ||||
|     incremental_selection = { | ||||
|       enable = true, | ||||
|       keymaps = { | ||||
|  | @ -454,14 +610,9 @@ require('nvim-treesitter.configs').setup { | |||
|       }, | ||||
|     }, | ||||
|   } | ||||
| end, 0) | ||||
| 
 | ||||
| -- 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>e', vim.diagnostic.open_float, { desc = "Open floating diagnostic message" }) | ||||
| vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, { desc = "Open diagnostics list" }) | ||||
| 
 | ||||
| -- LSP settings. | ||||
| -- [[ 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 | ||||
|  | @ -481,10 +632,10 @@ local on_attach = function(_, bufnr) | |||
|   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('gd', require('telescope.builtin').lsp_definitions, '[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('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation') | ||||
|   nmap('<leader>D', require('telescope.builtin').lsp_type_definitions, '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') | ||||
| 
 | ||||
|  | @ -506,11 +657,37 @@ local on_attach = function(_, bufnr) | |||
|   end, { desc = 'Format current buffer with LSP' }) | ||||
| end | ||||
| 
 | ||||
| -- document existing key chains | ||||
| require('which-key').register { | ||||
|   ['<leader>c'] = { name = '[C]ode', _ = 'which_key_ignore' }, | ||||
|   ['<leader>d'] = { name = '[D]ocument', _ = 'which_key_ignore' }, | ||||
|   ['<leader>g'] = { name = '[G]it', _ = 'which_key_ignore' }, | ||||
|   ['<leader>h'] = { name = 'Git [H]unk', _ = 'which_key_ignore' }, | ||||
|   ['<leader>r'] = { name = '[R]ename', _ = 'which_key_ignore' }, | ||||
|   ['<leader>s'] = { name = '[S]earch', _ = 'which_key_ignore' }, | ||||
|   ['<leader>t'] = { name = '[T]oggle', _ = 'which_key_ignore' }, | ||||
|   ['<leader>w'] = { name = '[W]orkspace', _ = 'which_key_ignore' }, | ||||
| } | ||||
| -- register which-key VISUAL mode | ||||
| -- required for visual <leader>hs (hunk stage) to work | ||||
| require('which-key').register({ | ||||
|   ['<leader>'] = { name = 'VISUAL <leader>' }, | ||||
|   ['<leader>h'] = { 'Git [H]unk' }, | ||||
| }, { mode = 'v' }) | ||||
| 
 | ||||
| -- mason-lspconfig requires that these setup functions are called in this order | ||||
| -- before setting up the servers. | ||||
| require('mason').setup() | ||||
| require('mason-lspconfig').setup() | ||||
| 
 | ||||
| -- 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 = {}, | ||||
|  | @ -518,11 +695,14 @@ local servers = { | |||
|   -- rust_analyzer = {}, | ||||
|   -- tsserver = {}, | ||||
|   -- emmet_language_server = {}, | ||||
|   -- html = { filetypes = { 'html', 'twig', 'hbs'} }, | ||||
| 
 | ||||
|   lua_ls = { | ||||
|     Lua = { | ||||
|       workspace = { checkThirdParty = false }, | ||||
|       telemetry = { enable = false }, | ||||
|       -- NOTE: toggle below to ignore Lua_LS's noisy `missing-fields` warnings | ||||
|       -- diagnostics = { disable = { 'missing-fields' } }, | ||||
|     }, | ||||
|   }, | ||||
| } | ||||
|  | @ -547,14 +727,16 @@ mason_lspconfig.setup_handlers { | |||
|       capabilities = capabilities, | ||||
|       on_attach = on_attach, | ||||
|       settings = servers[server_name], | ||||
|       filetypes = (servers[server_name] or {}).filetypes, | ||||
|     } | ||||
|   end, | ||||
| } | ||||
| 
 | ||||
| -- nvim-cmp setup | ||||
| -- [[ 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 { | ||||
|  | @ -563,14 +745,20 @@ cmp.setup { | |||
|       luasnip.lsp_expand(args.body) | ||||
|     end, | ||||
|   }, | ||||
|   completion = { | ||||
|     completeopt = 'menu,menuone,noinsert', | ||||
|   }, | ||||
|   mapping = cmp.mapping.preset.insert { | ||||
|     ['<C-d>'] = cmp.mapping.scroll_docs(-4), | ||||
|     ['<C-n>'] = cmp.mapping.select_next_item(), | ||||
|     ['<C-p>'] = cmp.mapping.select_prev_item(), | ||||
|     ['<C-b>'] = 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, | ||||
|     }, | ||||
|     -- Disabling this for Copilot. Should try and make it work though... | ||||
|     -- ['<Tab>'] = cmp.mapping(function(fallback) | ||||
|     --   if cmp.visible() then | ||||
|     --     cmp.select_next_item() | ||||
|  | @ -580,10 +768,11 @@ cmp.setup { | |||
|     --     fallback() | ||||
|     --   end | ||||
|     -- end, { 'i', 's' }), | ||||
| 
 | ||||
|     ['<S-Tab>'] = cmp.mapping(function(fallback) | ||||
|       if cmp.visible() then | ||||
|         cmp.select_prev_item() | ||||
|       elseif luasnip.jumpable(-1) then | ||||
|       elseif luasnip.locally_jumpable(-1) then | ||||
|         luasnip.jump(-1) | ||||
|       else | ||||
|         fallback() | ||||
|  | @ -598,6 +787,7 @@ cmp.setup { | |||
|       end | ||||
|     }, | ||||
|     { name = 'luasnip' }, | ||||
|     { name = 'path' }, | ||||
|   }, | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -43,14 +43,14 @@ return { | |||
|     } | ||||
| 
 | ||||
|     -- Basic debugging keymaps, feel free to change to your liking! | ||||
|     vim.keymap.set('n', '<F5>', dap.continue) | ||||
|     vim.keymap.set('n', '<F1>', dap.step_into) | ||||
|     vim.keymap.set('n', '<F2>', dap.step_over) | ||||
|     vim.keymap.set('n', '<F3>', dap.step_out) | ||||
|     vim.keymap.set('n', '<leader>b', dap.toggle_breakpoint) | ||||
|     vim.keymap.set('n', '<F5>', dap.continue, { desc = 'Debug: Start/Continue' }) | ||||
|     vim.keymap.set('n', '<F1>', dap.step_into, { desc = 'Debug: Step Into' }) | ||||
|     vim.keymap.set('n', '<F2>', dap.step_over, { desc = 'Debug: Step Over' }) | ||||
|     vim.keymap.set('n', '<F3>', dap.step_out, { desc = 'Debug: Step Out' }) | ||||
|     vim.keymap.set('n', '<leader>b', dap.toggle_breakpoint, { desc = 'Debug: Toggle Breakpoint' }) | ||||
|     vim.keymap.set('n', '<leader>B', function() | ||||
|       dap.set_breakpoint(vim.fn.input 'Breakpoint condition: ') | ||||
|     end) | ||||
|     end, { desc = 'Debug: Set Breakpoint' }) | ||||
| 
 | ||||
|     -- Dap UI setup | ||||
|     -- For more information, see |:help nvim-dap-ui| | ||||
|  | @ -69,10 +69,14 @@ return { | |||
|           step_back = 'b', | ||||
|           run_last = '▶▶', | ||||
|           terminate = '⏹', | ||||
|           disconnect = '⏏', | ||||
|         }, | ||||
|       }, | ||||
|     } | ||||
| 
 | ||||
|     -- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception. | ||||
|     vim.keymap.set('n', '<F7>', dapui.toggle, { desc = 'Debug: See last session result.' }) | ||||
| 
 | ||||
|     dap.listeners.after.event_initialized['dapui_config'] = dapui.open | ||||
|     dap.listeners.before.event_terminated['dapui_config'] = dapui.close | ||||
|     dap.listeners.before.event_exited['dapui_config'] = dapui.close | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue