Compare commits

..

No commits in common. "main" and "v12.21.1" have entirely different histories.

178 changed files with 3576 additions and 8474 deletions

View file

@ -1,7 +0,0 @@
root = true
[*]
insert_final_newline = true
indent_style = space
indent_size = 2
charset = utf-8

View file

@ -1,3 +1,3 @@
{ {
".": "16.0.0" ".": "12.21.1"
} }

View file

@ -6,10 +6,7 @@ body:
- type: markdown - type: markdown
attributes: attributes:
value: | value: |
**Before** reporting an issue, make sure to read the [documentation](https://github.com/LazyVim/LazyVim) **Before** reporting an issue, make sure to read the [documentation](https://github.com/folke/LazyVim) and search [existing issues](https://github.com/folke/LazyVim/issues). Usage questions such as ***"How do I...?"*** belong in [Discussions](https://github.com/folke/LazyVim/discussions) and will be closed.
and search [existing issues](https://github.com/LazyVim/LazyVim/issues).
Usage questions such as ***"How do I...?"*** belong in [Discussions](https://github.com/LazyVim/LazyVim/discussions) and will be closed.
- type: checkboxes - type: checkboxes
attributes: attributes:
label: Did you check docs and existing issues? label: Did you check docs and existing issues?
@ -17,8 +14,6 @@ body:
options: options:
- label: I have read all the LazyVim docs - label: I have read all the LazyVim docs
required: true required: true
- label: I have updated the plugin to the latest version before submitting this issue
required: true
- label: I have searched the existing issues of LazyVim - label: I have searched the existing issues of LazyVim
required: true required: true
- label: I have searched the existing issues of plugins related to this issue - label: I have searched the existing issues of plugins related to this issue
@ -62,15 +57,33 @@ body:
label: Repro label: Repro
description: Minimal `init.lua` to reproduce this issue. Save as `repro.lua` and run with `nvim -u repro.lua` description: Minimal `init.lua` to reproduce this issue. Save as `repro.lua` and run with `nvim -u repro.lua`
value: | value: |
vim.env.LAZY_STDPATH = ".repro" -- DO NOT change the paths and don't remove the colorscheme
load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))() local root = vim.fn.fnamemodify("./.repro", ":p")
require("lazy.minit").repro({ -- set stdpaths to use .repro
spec = { for _, name in ipairs({ "config", "data", "state", "cache" }) do
{ "LazyVim/LazyVim", import = "lazyvim.plugins" }, vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. "/" .. name
-- add any other plugins here end
},
-- bootstrap lazy
local lazypath = root .. "/plugins/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", lazypath, })
end
vim.opt.runtimepath:prepend(lazypath)
-- install plugins
local plugins = {
"folke/tokyonight.nvim",
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
-- add any other plugins here
}
require("lazy").setup(plugins, {
root = root .. "/plugins",
}) })
render: lua
vim.cmd.colorscheme("tokyonight")
-- add anything else here
render: Lua
validations: validations:
required: false required: false

View file

@ -1,5 +1,5 @@
blank_issues_enabled: false blank_issues_enabled: false
contact_links: contact_links:
- name: Ask a question - name: Ask a question or start a discussion
url: https://github.com/LazyVim/LazyVim/discussions url: https://github.com/LazyVim/LazyVim/discussions
about: Use Github discussions instead about: Use Github discussions instead

View file

@ -1,19 +1,15 @@
## Description ## What is this PR for?
<!-- Describe the big picture of your changes to communicate to the maintainers <!-- Describe the big picture of your changes to communicate to the maintainers
why we should accept this pull request. --> why we should accept this pull request. -->
## Related Issue(s) ## Does this PR fix an existing issue?
<!-- <!--
If this PR fixes any issues, please link to the issue here. If this PR fixes any issues, please link to the issue here.
- Fixes #<issue_number> Fixes #<issue_number>
--> -->
## Screenshots
<!-- Add screenshots of the changes if applicable. -->
## Checklist ## Checklist
- [ ] I've read the [CONTRIBUTING](https://github.com/LazyVim/LazyVim/blob/main/CONTRIBUTING.md) guidelines. - [ ] I've read the [CONTRIBUTING](https://github.com/LazyVim/LazyVim/blob/main/CONTRIBUTING.md) guidelines.

View file

@ -1,6 +1,11 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
version: 2 version: 2
updates: updates:
- package-ecosystem: "github-actions" - package-ecosystem: "github-actions" # See documentation for possible values
directory: "/" directory: "/" # Location of package manifests
schedule: schedule:
interval: "weekly" interval: "weekly"

View file

@ -1,14 +1,82 @@
name: CI name: CI
on: on:
push: push:
branches: [main, master]
pull_request: pull_request:
jobs: jobs:
ci: stylua:
uses: folke/github/.github/workflows/ci.yml@main name: Stylua Formatting
secrets: inherit runs-on: ubuntu-latest
with: steps:
plugin: LazyVim - uses: actions/checkout@v4
repo: LazyVim/LazyVim - uses: JohnnyMorganz/stylua-action@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
version: latest
args: --check .
tests:
strategy:
matrix:
# os: [ubuntu-latest, windows-latest]
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Install Neovim
shell: bash
run: |
mkdir -p /tmp/nvim
wget -q https://github.com/neovim/neovim/releases/download/nightly/nvim.appimage -O /tmp/nvim/nvim.appimage
cd /tmp/nvim
chmod a+x ./nvim.appimage
./nvim.appimage --appimage-extract
echo "/tmp/nvim/squashfs-root/usr/bin/" >> $GITHUB_PATH
- name: Run Tests
run: |
nvim --version
[ ! -d tests ] && exit 0
./tests/run
docs:
runs-on: ubuntu-latest
needs: tests
if: ${{ github.ref == 'refs/heads/main' && github.repository_owner == 'LazyVim' }}
steps:
- uses: actions/checkout@v4
- name: panvimdoc
uses: kdheepak/panvimdoc@main
with:
vimdoc: LazyVim
version: "Neovim >= 0.9.0"
demojify: true
treesitter: true
- name: Push changes
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: "chore(build): auto-generate vimdoc"
commit_user_name: "github-actions[bot]"
commit_user_email: "github-actions[bot]@users.noreply.github.com"
commit_author: "github-actions[bot] <github-actions[bot]@users.noreply.github.com>"
release:
name: release
if: ${{ github.ref == 'refs/heads/main' && github.repository_owner == 'LazyVim' }}
needs:
- docs
- tests
runs-on: ubuntu-latest
steps:
- uses: googleapis/release-please-action@v4
id: release
with:
config-file: .github/release-please-config.json
manifest-file: .github/.release-please-manifest.json
- uses: actions/checkout@v4
- name: tag stable versions
if: ${{ steps.release.outputs.release_created }}
run: |
git config user.name github-actions[bot]
git config user.email github-actions[bot]@users.noreply.github.com
git remote add gh-token "https://${{ secrets.GITHUB_TOKEN }}@github.com/google-github-actions/release-please-action.git"
git tag -d stable || true
git push origin :stable || true
git tag -a stable -m "Last Stable Release"
git push origin stable

View file

@ -1,8 +1,12 @@
name: "PR Labeler" name: "Pull Request Labeler"
on: on:
- pull_request_target - pull_request_target
jobs: jobs:
labeler: labeler:
uses: folke/github/.github/workflows/labeler.yml@main permissions:
secrets: inherit contents: read
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v5

View file

@ -1,4 +1,4 @@
name: PR Title name: "Lint PR"
on: on:
pull_request_target: pull_request_target:
@ -6,13 +6,36 @@ on:
- opened - opened
- edited - edited
- synchronize - synchronize
- reopened
- ready_for_review
permissions: permissions:
pull-requests: read pull-requests: read
jobs: jobs:
pr-title: main:
uses: folke/github/.github/workflows/pr.yml@main name: Validate PR title
secrets: inherit runs-on: ubuntu-latest
steps:
- uses: amannn/action-semantic-pull-request@v5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
requireScope: true
subjectPattern: ^(?![A-Z]).+$
scopes: |
.+
types: |
build
chore
ci
docs
feat
fix
merge
perf
refactor
revert
style
test
wip
ignoreLabels: |
autorelease: pending

View file

@ -1,11 +1,27 @@
name: Stale Issues & PRs name: Close stale issues and PRs
on: on:
workflow_dispatch:
schedule: schedule:
- cron: "30 1 * * *" - cron: "30 1 * * *"
jobs: jobs:
stale: stale:
if: contains(fromJSON('["folke", "LazyVim"]'), github.repository_owner) runs-on: ubuntu-latest
uses: folke/github/.github/workflows/stale.yml@main steps:
secrets: inherit - uses: actions/stale@v9
with:
operations-per-run: 300
# default stale time
days-before-stale: 30
days-before-close: 7
# never stale pull requests
# days-before-pr-stale: -1
days-before-pr-close: -1
# exclude issues with certain labels
exempt-issue-labels: pinned,wip,security,notice
# never stale issues attached to a milestone
# exempt-all-milestones: true
stale-issue-message: "This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 7 days."
stale-pr-message: "This PR is stale because it has been open 60 days with no activity."
close-issue-message: "This issue was closed because it has been stalled for 7 days with no activity."

View file

@ -1,13 +0,0 @@
name: Update Repo
on:
workflow_dispatch:
schedule:
# Run every hour
- cron: "0 * * * *"
jobs:
update:
if: contains(fromJSON('["folke", "LazyVim"]'), github.repository_owner)
uses: folke/github/.github/workflows/update.yml@main
secrets: inherit

15
.gitignore vendored
View file

@ -1,9 +1,8 @@
*.log
/.repro
/.tests
/build
/debug
/doc/tags
foo.*
node_modules
tt.* tt.*
.tests
doc/tags
debug
.repro
foo.*
*.log
data

View file

@ -1,3 +0,0 @@
config:
MD013: false
MD033: false

File diff suppressed because it is too large Load diff

View file

@ -29,21 +29,3 @@
- Every language extra requires a `recommended` section as part of the extra. - Every language extra requires a `recommended` section as part of the extra.
Check lspconfig server configurations for the proper filetypes and root directories. Check lspconfig server configurations for the proper filetypes and root directories.
Refer to other extras for creating the `recommended` section. Refer to other extras for creating the `recommended` section.
### Language-Specific Keymaps
- Use `<localleader>` for language-specific keymaps (follows Vim/Neovim convention for filetype-specific mappings).
- For LSP servers, define keymaps in the server's `keys` field, not in `on_attach`:
```lua
servers = {
rust_analyzer = {
keys = {
{ "<localleader>e", function() vim.cmd.RustLsp("expandMacro") end, desc = "Expand Macro" },
}
}
}
```
- LazyVim's LSP system will automatically resolve and apply these keymaps (see `lua/lazyvim/plugins/lsp/keymaps.lua`).
- Don't override standard LSP keymaps (like `K` for hover, `gd` for definition) unless absolutely necessary.
- Use standard `<leader>c*` keymaps where they make sense (e.g., `<leader>co` for organize imports).
- Refer to the R and Haskell extras for examples of proper `<localleader>` usage.

115
NEWS.md
View file

@ -1,109 +1,7 @@
# What's new? # What's new?
## 15.x
**Neovim** `>= 0.11.2` includes a lot of changes to the underlying LSP implementation.
Going forward, **LazyVim** requires **Neovim** `>= 0.11.2`, and drops support for older versions.
### Changes
- removed compatibility code for Neovim `< 0.11.2`
- configure **LSP** with the native `vim.lsp.config`
- migrated **mason.nvim** and **mason-lspconfig.nvim** to `v2.x`
- migrated to [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter/tree/main) **main** branch
- with the new version, the `tree-sitter` cli is **required** to install parsers
- best to run `:checkhealth nvim-treesitter` after updating
- replace `nvim-treesitter` incremental selection with `flash.nvim`, since it is no longer supported
- enabled [blink.cmp](https://github.com/saghen/blink.cmp) **cmdline** completions
- use **LSP** based folding when available (disable with `nvim-lspconfig.folds.enabled = false`)
## 14.x
Big new release with a lot of changes and improvements!
Two new plugins have been added, and a lot of plugins have been replaced.
With these changes, default **LazyVim** is now just `34` plugins.
### Added Plugins
- [fzf-lua](https://github.com/ibhagwan/fzf-lua) as a replacement for [telescope.nvim](https://github.com/nvim-telescope/telescope.nvim)
- to use **telescope.nvim** instead, enable the `editor.telescope` extra
- [blink.cmp](https://github.com/saghen/blink.cmp) as a replacement for [nvim-cmp](https://github.com/hrsh7th/nvim-cmp)
- to use **nvim-cmp** instead, enable the `coding.nvim-cmp` extra
### Removed Plugins
- [dressing.nvim](https://github.com/stevearc/dressing.nvim) (replaced with [fzf-lua](https://github.com/ibhagwan/fzf-lua) and [snacks.input](https://github.com/folke/snacks.nvim))
- [telescope-fzf-native.nvim](https://github.com/nvim-telescope/telescope-fzf-native.nvim) (replaced with [fzf-lua](https://github.com/ibhagwan/fzf-lua))
- [telescope.nvim](https://github.com/nvim-telescope/telescope.nvim) (replaced with [fzf-lua](https://github.com/ibhagwan/fzf-lua))
- [indent-blankline.nvim](https://github.com/lukas-reineke/indent-blankline.nvim) (replaced with [snacks.indent](https://github.com/Folke/snacks.nvim))
- to use **indent-blankline.nvim** instead, enable the `indent-blankline` extra
- [nvim-cmp](https://github.com/hrsh7th/nvim-cmp) (replaced with [blink](https://github.com/Saghen/blink.cmp))
- [nvim-snippets](https://github.com/hrsh7th/vim-vsnip) (replaced with [blink](https://github.com/Saghen/blink.cmp))
- [cmp-buffer](https://github.com/hrsh7th/cmp-buffer) (replaced with [blink](https://github.com/Saghen/blink.cmp))
- [cmp-nvim-lsp](https://github.com/hrsh7th/cmp-nvim-lsp) (replaced with [blink](https://github.com/Saghen/blink.cmp))
- [cmp-path](https://github.com/hrsh7th/cmp-path) (replaced with [blink](https://github.com/Saghen/blink.cmp))
### Changes
- added [`snacks.input`](https://github.com/folke/snacks.nvim/blob/main/docs/input.md)
- added [`snacks.scroll`](https://github.com/folke/snacks.nvim/blob/main/docs/scroll.md)
- added [`snacks.indent`](https://github.com/folke/snacks.nvim/blob/main/docs/indent.md)
- added [`snacks.scope`](https://github.com/folke/snacks.nvim/blob/main/docs/scope.md)
- added [`snacks.dim`](https://github.com/folke/snacks.nvim/blob/main/docs/dim.md)
- added [`snacks.zen`](https://github.com/folke/snacks.nvim/blob/main/docs/zen.md)
- changed default [`which-key`](https://github.com/folke/which-key.nvim) preset to `helix`
- drop `LazyVim.ui.fg` in favor of [`Snacks.util.color`](https://github.com/folke/snacks.nvim/blob/main/docs/util.md)
To disable **all animations**, add the following to your `options.lua`:
```lua
vim.g.snacks_animate = false
```
### Keymaps
- `<leader>uz` to toggle [zen mode](https://github.com/folke/snacks.nvim/blob/main/docs/zen.md)
- `<leader>uZ` & `<leader>wm` to toggle [zoom mode](https://github.com/folke/snacks.nvim/blob/main/docs/zen.md)
- `<leader>uD` to toggle [dimming](https://github.com/folke/snacks.nvim/blob/main/docs/dim.md)
- `<leader>ua` to toggle [animations](https://github.com/folke/snacks.nvim/blob/main/docs/animate.md)
- `<leader>uS` to toggle [scroll](https://github.com/folke/snacks.nvim/blob/main/docs/scroll.md)
- `<leader>ug` to toggle [indent guides](https://github.com/folke/snacks.nvim/blob/main/docs/indent.md)
- [`snacks.profiler`](https://github.com/folke/snacks.nvim/blob/main/docs/profiler.md) keymaps under `<leader>dp`
---
## 13.x
- **LazyVim** now uses `Snacks.dashboard` as the default dashboard.
Check the [docs](https://github.com/folke/snacks.nvim/blob/main/docs/dashboard.md),
for more information and examples.
- A new [dashboard-nvim](https://github.com/nvimdev/dashboard-nvim) extra
is available for those who prefer the old dashboard.
- Big new release with a lot of changes and improvements!
- The biggest change is the move of a bunch of core features to
[snacks.nvim](https://github.com/folke/snacks.nvim) and fully
integrating it into **LazyVim**.
- I highly suggest having a look at the **snacks.nvim** documentation
to see all the new features and improvements. Most important changes:
- `Snacks.notifier` for notifications instead of `nvim-notify`
- `Snacks.terminal` is similar to `lazyterm`, but has more features
and creates bottom splits by default (similar to the `edgy` integrating)
---
## 12.x ## 12.x
- **Markdown Extra**: [headlines.nvim](https://github.com/lukas-reineke/headlines.nvim) has been removed in favor of [markdown.nvim](https://github.com/MeanderingProgrammer/markdown.nvim)
to spice up your markdown files.
- [nvim-spectre](https://github.com/nvim-pack/nvim-spectre) has been removed in favor of [grug-far.nvim](https://github.com/MagicDuck/grug-far.nvim).
**grug-far.nvim** has a great UI and feels more intuitive to use.
- This **news** is now also available on the website at [https://www.lazyvim.org/news](https://www.lazyvim.org/news) - This **news** is now also available on the website at [https://www.lazyvim.org/news](https://www.lazyvim.org/news)
- **prettier** extra now works for all prettier supported filetypes - **prettier** extra now works for all prettier supported filetypes
@ -123,11 +21,10 @@ vim.g.snacks_animate = false
- moved `neoconf.nvim` to extras. Project specific LSP settings - moved `neoconf.nvim` to extras. Project specific LSP settings
can be done with a `.lazy.lua` file instead. can be done with a `.lazy.lua` file instead.
---
## 11.x ## 11.x
- **Keymaps:** - **Keymaps:**
- `<leader>gB` to open the current repo in the browser - `<leader>gB` to open the current repo in the browser
- `gco` and `gcO` to add a comment below or above the current line - `gco` and `gcO` to add a comment below or above the current line
- `<leader>wm` to toggle window maximize - `<leader>wm` to toggle window maximize
@ -140,6 +37,7 @@ vim.g.snacks_animate = false
It's a great plugin that enhances the native text objects. It's a great plugin that enhances the native text objects.
- `:LazyExtras` now has multiple new sections: - `:LazyExtras` now has multiple new sections:
- **Enabled**: extras that are currently enabled - **Enabled**: extras that are currently enabled
- **Recommended Languages**: language extras recommended for the current buffer / directory - **Recommended Languages**: language extras recommended for the current buffer / directory
- **Recommended Plugins**: extras that are recommended for most users - **Recommended Plugins**: extras that are recommended for most users
@ -177,12 +75,11 @@ Additionally, some core plugins have been moved to extras.
``` ```
- plugins moved to extras: - plugins moved to extras:
- `mini.surround` - `mini.surround`
- `mini.indentscope` scopes are now also highlighted with `indent-blankline` - `mini.indentscope` scopes are now also highlighted with `indent-blankline`
- `nvim-treesitter-context` - `nvim-treesitter-context`
---
## 10.x ## 10.x
- added new extra for [mini.diff](https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-diff.md) - added new extra for [mini.diff](https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-diff.md)
@ -194,6 +91,7 @@ Additionally, some core plugins have been moved to extras.
You can find the updated docs [here](https://github.com/folke/trouble.nvim/tree/dev) You can find the updated docs [here](https://github.com/folke/trouble.nvim/tree/dev)
- The **lazygit** integration now configures: - The **lazygit** integration now configures:
- the theme based on the colorscheme - the theme based on the colorscheme
- nerd font icons (v3) - nerd font icons (v3)
- editor preset is set to `nvim-remote` for better interop with Neovim - editor preset is set to `nvim-remote` for better interop with Neovim
@ -234,7 +132,9 @@ Additionally, some core plugins have been moved to extras.
- New `:LazyExtras` command for managing **LazyVim** extras - New `:LazyExtras` command for managing **LazyVim** extras
- Improved **formatting**: - Improved **formatting**:
- **LazyVim** can now work with multiple formatters. Types: - **LazyVim** can now work with multiple formatters. Types:
- **primary**: only one primary formatter can be active at a time. - **primary**: only one primary formatter can be active at a time.
_(conform, none-ls, LSP)_ _(conform, none-ls, LSP)_
- **secondary**: multiple secondary formatters can be active _(eslint, ...)_ - **secondary**: multiple secondary formatters can be active _(eslint, ...)_
@ -253,15 +153,18 @@ Additionally, some core plugins have been moved to extras.
``` ```
- `none-ls.nvim` is no longer installed by default - `none-ls.nvim` is no longer installed by default
- `conform.nvim` is now the default formatter - `conform.nvim` is now the default formatter
- `nvim-lint` is now the default linter - `nvim-lint` is now the default linter
- If you want to keep using `none-ls.nvim`, - If you want to keep using `none-ls.nvim`,
you can enable the **lsp.none-ls** extra you can enable the **lsp.none-ls** extra
- `dashboard.nvim` is the new default dashboard plugin - `dashboard.nvim` is the new default dashboard plugin
- If you want to keep using `alpha.nvim`, you can enable the **ui.alpha** extra - If you want to keep using `alpha.nvim`, you can enable the **ui.alpha** extra
- Improved **root detection**: - Improved **root detection**:
- New `:LazyRoot` command that shows info about the root dir detection - New `:LazyRoot` command that shows info about the root dir detection
- Configurable with `vim.g.root_spec` - Configurable with `vim.g.root_spec`

View file

@ -36,9 +36,9 @@
</a> </a>
</div> </div>
LazyVim 是一个基于 [💤 lazy.nvim](https://github.com/folke/lazy.nvim) 的 Neovim 配置方案,让定制和扩展变得简单直观 LazyVim 是由 [💤 lazy.nvim](https://github.com/folke/lazy.nvim) 驱动的一套 Neovim 配置,可以轻松自定义和扩展您的配置
您不必再在“从零配置”和“使用预制发行版”之间做选择LazyVim 不必在从头开始或使用预制发行版之间做选择,
提供了一个两全其美的方式——既可以享受默认配置带来的便利,又能根据个人需求来灵活调整各项设置 LazyVim 提供了两全其美的方式 - 根据需要调整配置的灵活性,以及默认预配置的便利性
![image](https://user-images.githubusercontent.com/292349/211285846-0b7bb3bf-0462-4029-b64c-4ee1d037fc1c.png) ![image](https://user-images.githubusercontent.com/292349/211285846-0b7bb3bf-0462-4029-b64c-4ee1d037fc1c.png)
@ -46,28 +46,28 @@ LazyVim 是一个基于 [💤 lazy.nvim](https://github.com/folke/lazy.nvim) 的
## ✨ 特性 ## ✨ 特性
- 🔥 将你的 Neovim 打造为一个功能完备的 IDE - 🔥 将你的 Neovim 变成一个成熟的 IDE
- 💤 使用 [lazy.nvim](https://github.com/folke/lazy.nvim) 轻松自定义和扩展您的 - 💤 使用 [lazy.nvim](https://github.com/folke/lazy.nvim) 轻松自定义和扩展您的
- 🚀 快如闪电 - 🚀 快如闪电
- 🧹 选项、自动命令和键盘映射的合理预设 - 🧹 选项、自动命令和键盘映射的合理预设
- 📦 内置大量精心优化的预配置插件,开箱即 - 📦 预配置了大量插件,随时可
## ⚡️ 环境要求 ## ⚡️ 要求
- Neovim >= **0.11.2** (需要用 **LuaJIT** 构建) - Neovim >= **0.9.0** (需要用 **LuaJIT** 构建)
- Git >= **2.19.0** (用于部分克隆支持) - Git >= **2.19.0** (用于部分克隆支持)
- 一个 [Nerd Font](https://www.nerdfonts.com/) 字体 **_(可选)_** - 一个 [Nerd Font](https://www.nerdfonts.com/) 字体 **_(可选)_**
- 一个用于 `nvim-treesitter`**C** 编译器。看 [这里](https://github.com/nvim-treesitter/nvim-treesitter#requirements) - 一个用于 `nvim-treesitter`**C** 编译器。看 [这里](https://github.com/nvim-treesitter/nvim-treesitter#requirements)
## 🚀 开始使用 ## 🚀 入门
您可以在 [此处](https://github.com/LazyVim/starter) 找到 **LazyVim**初始模板 您可以在 [此处](https://github.com/LazyVim/starter) 找到 **LazyVim**入门模板
<details><summary>在 Docker 中尝</summary> <details><summary>在 Docker 中尝</summary>
```sh ```sh
docker run -w /root -it --rm alpine:edge sh -uelic ' docker run -w /root -it --rm alpine:edge sh -uelic '
apk add git lazygit fzf curl neovim ripgrep alpine-sdk --update apk add git lazygit neovim ripgrep alpine-sdk --update
git clone https://github.com/LazyVim/starter ~/.config/nvim git clone https://github.com/LazyVim/starter ~/.config/nvim
cd ~/.config/nvim cd ~/.config/nvim
nvim nvim
@ -91,7 +91,7 @@ docker run -w /root -it --rm alpine:edge sh -uelic '
git clone https://github.com/LazyVim/starter ~/.config/nvim git clone https://github.com/LazyVim/starter ~/.config/nvim
``` ```
- 删除 `.git` 文件夹,以便稍后将其添加到您自己的 - 删除 `.git` 文件夹,以便稍后将其添加到您自己的存储
```sh ```sh
rm -rf ~/.config/nvim/.git rm -rf ~/.config/nvim/.git
@ -109,23 +109,22 @@ docker run -w /root -it --rm alpine:edge sh -uelic '
--- ---
[@elijahmanor](https://github.com/elijahmanor) 制作了一个很棒的视频,可以带领你快速入门 [@elijahmanor](https://github.com/elijahmanor) 制作了一段很棒的视频,其中包含入门演练
[![查看这个视频](https://img.youtube.com/vi/N93cTbtLCIM/hqdefault.jpg)](https://www.youtube.com/watch?v=N93cTbtLCIM) [![Watch the video](https://img.youtube.com/vi/N93cTbtLCIM/hqdefault.jpg)](https://www.youtube.com/watch?v=N93cTbtLCIM)
[@dusty-phillips](https://github.com/dusty-phillips) 为 LazyVim 编写了一本全面的书籍 [@dusty-phillips](https://github.com/dusty-phillips) 正在编写一本名为
[LazyVim for Ambitious Developers](https://lazyvim-ambitious-devs.phillips.codes) [LazyVim for Ambitious Developers](https://lazyvim-ambitious-devs.phillips.codes)
,可在线上免费阅读 的书,该书可在线免费获得
## 📂 文件结构 ## 📂 文件结构
config 下的文件会在适当的时候被自动加载,所以你不需要手动引入这些文件。 config 下的文件会在适当的时候自动加载,所以你不需要手动引入这些文件。
**LazyVim** 带有一组默认配置文件,这些文件将在您的配置**之前**加载。
看[这里](https://github.com/LazyVim/LazyVim/tree/main/lua/lazyvim/config)
**LazyVim** 带有一组默认配置文件,这些文件会在您的配置**之前**被加载。 您可以在 `lua/plugins/` 下添加自定义插件配置(specs)。
请看[这里](https://github.com/LazyVim/LazyVim/tree/main/lua/lazyvim/config) [lazy.nvim](https://github.com/folke/lazy.nvim) 会自动加载这些文件。
您可以在 `lua/plugins/` 下添加自定义插件配置。
[lazy.nvim](https://github.com/folke/lazy.nvim) 会自动加载此目录中的全部文件。
<pre> <pre>
~/.config/nvim ~/.config/nvim
@ -142,6 +141,6 @@ config 下的文件会在适当的时候被自动加载,所以你不需要手
└── init.lua └── init.lua
</pre> </pre>
## ⚙️ 设置 ## ⚙️ Configuration
请参阅[官方文档](https://lazyvim.github.io/) 参考[文档](https://lazyvim.github.io/)

View file

@ -56,7 +56,7 @@ und die Einfachheit von einem vorgefertigten Setup.
## ⚡️ Vorraussetzungen ## ⚡️ Vorraussetzungen
- Neovim >= **0.11.2** (gebraucht um mit **LuaJIT** zu bauen) - Neovim >= **0.8.0** (gebraucht um mit **LuaJIT** zu bauen)
- Git >= **2.19.0** (um Teil-Klone zu unterstützen) - Git >= **2.19.0** (um Teil-Klone zu unterstützen)
- eine [Nerd Font](https://www.nerdfonts.com/) **_(optional)_** - eine [Nerd Font](https://www.nerdfonts.com/) **_(optional)_**
@ -68,7 +68,7 @@ Sie können eine Startvorlage für **LazyVim** [hier](https://github.com/LazyVim
```sh ```sh
docker run -w /root -it --rm alpine:edge sh -uelic ' docker run -w /root -it --rm alpine:edge sh -uelic '
apk add git lazygit fzf curl neovim ripgrep alpine-sdk --update apk add git lazygit neovim ripgrep alpine-sdk --update
git clone https://github.com/LazyVim/starter ~/.config/nvim git clone https://github.com/LazyVim/starter ~/.config/nvim
cd ~/.config/nvim cd ~/.config/nvim
nvim nvim

View file

@ -1,145 +0,0 @@
<div align="center">
<img src="https://user-images.githubusercontent.com/292349/213446185-2db63fd5-8c84-459c-9f04-e286382d6e80.png">
</div>
<hr>
<h4 align="center">
<a href="https://lazyvim.github.io/installation">Instalar</a>
·
<a href="https://lazyvim.github.io/configuration">Configurar</a>
·
<a href="https://lazyvim.github.io">Documentación</a>
</h4>
<div align="center"><p>
<a href="https://github.com/LazyVim/LazyVim/releases/latest">
<img alt="Última versión" src="https://img.shields.io/github/v/release/LazyVim/LazyVim?style=for-the-badge&logo=starship&color=C9CBFF&logoColor=D9E0EE&labelColor=302D41&include_prerelease&sort=semver" />
</a>
<a href="https://github.com/LazyVim/LazyVim/pulse">
<img alt="Último commit" src="https://img.shields.io/github/last-commit/LazyVim/LazyVim?style=for-the-badge&logo=starship&color=8bd5ca&logoColor=D9E0EE&labelColor=302D41"/>
</a>
<a href="https://github.com/LazyVim/LazyVim/blob/main/LICENSE">
<img alt="Licencia" src="https://img.shields.io/github/license/LazyVim/LazyVim?style=for-the-badge&logo=starship&color=ee999f&logoColor=D9E0EE&labelColor=302D41" />
</a>
<a href="https://github.com/LazyVim/LazyVim/stargazers">
<img alt="Estrellas" src="https://img.shields.io/github/stars/LazyVim/LazyVim?style=for-the-badge&logo=starship&color=c69ff5&logoColor=D9E0EE&labelColor=302D41" />
</a>
<a href="https://github.com/LazyVim/LazyVim/issues">
<img alt="Problemas" src="https://img.shields.io/github/issues/LazyVim/LazyVim?style=for-the-badge&logo=bilibili&color=F5E0DC&logoColor=D9E0EE&labelColor=302D41" />
</a>
<a href="https://github.com/LazyVim/LazyVim">
<img alt="Tamaño del repositorio" src="https://img.shields.io/github/repo-size/LazyVim/LazyVim?color=%23DDB6F2&label=SIZE&logo=codesandbox&style=for-the-badge&logoColor=D9E0EE&labelColor=302D41" />
</a>
<a href="https://twitter.com/intent/follow?screen_name=folke">
<img alt="seguir en Twitter" src="https://img.shields.io/twitter/follow/folke?style=for-the-badge&logo=twitter&color=8aadf3&logoColor=D9E0EE&labelColor=302D41" />
</a>
</div>
LazyVim es una configuración de Neovim impulsada por [💤 lazy.nvim](https://github.com/folke/lazy.nvim) que facilita la personalización y extensión de tu configuración. En lugar de tener que elegir entre comenzar desde cero o usar una distribución predefinida, LazyVim ofrece lo mejor de ambos mundos: la flexibilidad para ajustar tu configuración según sea necesario, junto con la conveniencia de una configuración preconfigurada.
![image](https://user-images.githubusercontent.com/292349/211285846-0b7bb3bf-0462-4029-b64c-4ee1d037fc1c.png)
![image](https://user-images.githubusercontent.com/292349/213447056-92290767-ea16-430c-8727-ce994c93e9cc.png)
## ✨ Características
- 🔥 Convierte tu Neovim en un IDE completo
- 💤 Personaliza y extiende fácilmente tu configuración con [lazy.nvim](https://github.com/folke/lazy.nvim)
- 🚀 Extremadamente rápido
- 🧹 Ajustes predeterminados sensatos para opciones, autocmds y combinaciones de teclas
- 📦 Viene con una gran cantidad de plugins preconfigurados y listos para usar
## ⚡️ Requisitos
- Neovim >= **0.11.2** (debe ser compilado con **LuaJIT**)
- Git >= **2.19.0** (para soporte de clones parciales)
- una [Fuente Nerd](https://www.nerdfonts.com/) **_(opcional)_**
- un compilador **C** para `nvim-treesitter`. Consulta [aquí](https://github.com/nvim-treesitter/nvim-treesitter#requirements)
## 🚀 Empezando
Puedes encontrar una plantilla de inicio para **LazyVim** [aquí](https://github.com/LazyVim/starter)
<details><summary>Probarlo con Docker</summary>
```sh
docker run -w /root -it --rm alpine:edge sh -uelic '
apk add git lazygit fzf curl neovim ripgrep alpine-sdk --update
git clone https://github.com/LazyVim/starter ~/.config/nvim
cd ~/.config/nvim
nvim
'
```
</details>
<details><summary>Instalar el <a href="https://github.com/LazyVim/starter">LazyVim Starter</a></summary>
- Haz una copia de seguridad de tus archivos actuales de Neovim:
```sh
mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak
```
- Clona el starter
```sh
git clone https://github.com/LazyVim/starter ~/.config/nvim
```
- Elimina la carpeta `.git`, para que puedas agregarla a tu propio repositorio más tarde
```sh
rm -rf ~/.config/nvim/.git
```
- ¡Inicia Neovim!
```sh
nvim
```
Consulta los comentarios en los archivos sobre cómo personalizar **LazyVim**.
</details>
---
Hay un excelente video creado por [@elijahmanor](https://github.com/elijahmanor) con una guía para empezar.
[![Ver el video](https://img.youtube.com/vi/N93cTbtLCIM/hqdefault.jpg)](https://www.youtube.com/watch?v=N93cTbtLCIM)
[@dusty-phillips](https://github.com/dusty-phillips) escribió un libro completo llamado
[LazyVim para Desarrolladores Ambiciosos](https://lazyvim-ambitious-devs.phillips.codes)
disponible de forma gratuita en línea.
## 📂 Estructura de Archivos
Los archivos dentro de la configuración se cargarán automáticamente en el momento adecuado,
por lo que no necesitas requerir esos archivos manualmente.
**LazyVim** viene con un conjunto de archivos de configuración predeterminados que se cargarán
**_antes_** que los tuyos. Consulta [aquí](https://github.com/LazyVim/LazyVim/tree/main/lua/lazyvim/config)
Puedes agregar tus especificaciones de plugins personalizadas en `lua/plugins/`. Todos los archivos allí
serán cargados automáticamente por [lazy.nvim](https://github.com/folke/lazy.nvim)
<pre>
~/.config/nvim
├── lua
│   ├── config
│   │   ├── autocmds.lua
│   │   ├── keymaps.lua
│   │   ├── lazy.lua
│   │   └── options.lua
│   └── plugins
│   ├── spec1.lua
│   ├── **
│   └── spec2.lua
└── init.lua
</pre>
## ⚙️ Configuración
Consulta la [documentación](https://lazyvim.github.io)

View file

@ -1,151 +0,0 @@
<div align="center">
<img src="https://user-images.githubusercontent.com/292349/213446185-2db63fd5-8c84-459c-9f04-e286382d6e80.png">
</div>
<hr>
<h4 align="center">
<a href="https://lazyvim.github.io/installation">Install</a>
·
<a href="https://lazyvim.github.io/configuration">Configure</a>
·
<a href="https://lazyvim.github.io">Docs</a>
</h4>
<div align="center"><p>
<a href="https://github.com/LazyVim/LazyVim/releases/latest">
<img alt="Latest release" src="https://img.shields.io/github/v/release/LazyVim/LazyVim?style=for-the-badge&logo=starship&color=C9CBFF&logoColor=D9E0EE&labelColor=302D41&include_prerelease&sort=semver" />
</a>
<a href="https://github.com/LazyVim/LazyVim/pulse">
<img alt="Last commit" src="https://img.shields.io/github/last-commit/LazyVim/LazyVim?style=for-the-badge&logo=starship&color=8bd5ca&logoColor=D9E0EE&labelColor=302D41"/>
</a>
<a href="https://github.com/LazyVim/LazyVim/blob/main/LICENSE">
<img alt="License" src="https://img.shields.io/github/license/LazyVim/LazyVim?style=for-the-badge&logo=starship&color=ee999f&logoColor=D9E0EE&labelColor=302D41" />
</a>
<a href="https://github.com/LazyVim/LazyVim/stargazers">
<img alt="Stars" src="https://img.shields.io/github/stars/LazyVim/LazyVim?style=for-the-badge&logo=starship&color=c69ff5&logoColor=D9E0EE&labelColor=302D41" />
</a>
<a href="https://github.com/LazyVim/LazyVim/issues">
<img alt="Issues" src="https://img.shields.io/github/issues/LazyVim/LazyVim?style=for-the-badge&logo=bilibili&color=F5E0DC&logoColor=D9E0EE&labelColor=302D41" />
</a>
<a href="https://github.com/LazyVim/LazyVim">
<img alt="Repo Size" src="https://img.shields.io/github/repo-size/LazyVim/LazyVim?color=%23DDB6F2&label=SIZE&logo=codesandbox&style=for-the-badge&logoColor=D9E0EE&labelColor=302D41" />
</a>
<a href="https://twitter.com/intent/follow?screen_name=folke">
<img alt="follow on Twitter" src="https://img.shields.io/twitter/follow/folke?style=for-the-badge&logo=twitter&color=8aadf3&logoColor=D9E0EE&labelColor=302D41" />
</a>
</div>
LazyVim est une configuration Neovim basée sur [💤 lazy.nvim](https://github.com/folke/lazy.nvim)
facilitant la personnalisation et l'ajout d'extensions.
Plutôt que d'imposer le choix entre partir de rien et utiliser
une distribution toute faite, LazyVim offre le meilleur des deux mondes
: la flexibilité d'une config ajustable selon vos besoins, et le confort
d'une configuration pensée et peaufinée à l'avance.
![image](https://user-images.githubusercontent.com/292349/211285846-0b7bb3bf-0462-4029-b64c-4ee1d037fc1c.png)
![image](https://user-images.githubusercontent.com/292349/213447056-92290767-ea16-430c-8727-ce994c93e9cc.png)
## ✨ Fonctionnalités
- 🔥 Transforme Neovim en un environnement de développement complet
- 💤 Customise et étends ta config sans effort grâce à [lazy.nvim](https://github.com/folke/lazy.nvim)
- 🚀 Rapide comme l'éclair !
- 🧹 Configuration par défaut propre et intuitive pour les options, les autocmds, et les keymaps
- 📦 Livré avec une variété de plugins pre-configurés et prêts à être utilisés
## ⚡️ Pré-requis
- Neovim >= **0.9.0** (doit être compilé avec **LuaJIT**)
- Git >= **2.19.0** (pour supporter le clonage partiel)
- Un [Nerd Font](https://www.nerdfonts.com/) **_(optionel)_**
- Un compileur **C** pour `nvim-treesitter`. Voir [ici](https://github.com/nvim-treesitter/nvim-treesitter#requirements)
## 🚀 Comment commencer
Un template pour **LazyVim** peut être trouvé [ici](https://github.com/LazyVim/starter)
<details><summary>Essayer avec Docker</summary>
```sh
docker run -w /root -it --rm alpine:edge sh -uelic '
apk add git lazygit fzf curl neovim ripgrep alpine-sdk --update
git clone https://github.com/LazyVim/starter ~/.config/nvim
cd ~/.config/nvim
nvim
'
```
</details>
<details><summary>Installer le <a href="https://github.com/LazyVim/starter">LazyVim Starter</a></summary>
- Sauvegardez votre configuration Neovim :
```sh
mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak
```
- Clonez le starter
```sh
git clone https://github.com/LazyVim/starter ~/.config/nvim
```
- Supprimez le dossier `.git`, afin que vous puissiez l'ajouter à votre repo plus tard
```sh
rm -rf ~/.config/nvim/.git
```
- Lancez Neovim !
```sh
nvim
```
Consultez les commentaires dans les fichiers pour savoir comment personnaliser **LazyVim**.
</details>
---
Il y a une superbe vidéo (en anglais) de [@elijahmanor](https://github.com/elijahmanor)
qui vous guide pas-à-pas pour commencer.
[![Watch the video](https://img.youtube.com/vi/N93cTbtLCIM/hqdefault.jpg)](https://www.youtube.com/watch?v=N93cTbtLCIM)
[@dusty-phillips](https://github.com/dusty-phillips) a écrit un livre exhaustif
sur LazyVim, nommé [LazyVim for Ambitious Developers](https://lazyvim-ambitious-devs.phillips.codes)
disponible gratuitement en ligne.
## 📂 Structure de fichier
Les fichiers dans le dossier config vont être chargés automatiquement en temps voulu,
donc pas besoin de `require` ces fichiers manuellement.
**LazyVim** vient avec un ensemble de fichiers de configuration par défaut qui seront chargés
**_avant_** les vôtres. Voir [ici](https://github.com/LazyVim/LazyVim/tree/main/lua/lazyvim/config)
Vous pouvez ajouter vos configurations de plugins sous `lua/plugins/`.
Ici, tous les fichiers seront automatiquement chargés par [lazy.nvim](https://github.com/folke/lazy.nvim)
<pre>
~/.config/nvim
├── lua
│ ├── config
│ │ ├── autocmds.lua
│ │ ├── keymaps.lua
│ │ ├── lazy.lua
│ │ └── options.lua
│ └── plugins
│ ├── spec1.lua
│ ├── **
│ └── spec2.lua
└── init.lua
</pre>
## ⚙️ Configuration
Veuillez vous référer à la [documentation](https://lazyvim.github.io)

View file

@ -1,150 +0,0 @@
<div align="center">
<img src="https://user-images.githubusercontent.com/292349/213446185-2db63fd5-8c84-459c-9f04-e286382d6e80.png">
</div>
<hr>
<h4 align="center">
<a href="https://lazyvim.github.io/installation">Installazione</a>
·
<a href="https://lazyvim.github.io/configuration">Configurazione</a>
·
<a href="https://lazyvim.github.io">Documentazione</a>
</h4>
<div align="center"><p>
<a href="https://github.com/LazyVim/LazyVim/releases/latest">
<img alt="Latest release" src="https://img.shields.io/github/v/release/LazyVim/LazyVim?style=for-the-badge&logo=starship&color=C9CBFF&logoColor=D9E0EE&labelColor=302D41&include_prerelease&sort=semver" />
</a>
<a href="https://github.com/LazyVim/LazyVim/pulse">
<img alt="Last commit" src="https://img.shields.io/github/last-commit/LazyVim/LazyVim?style=for-the-badge&logo=starship&color=8bd5ca&logoColor=D9E0EE&labelColor=302D41"/>
</a>
<a href="https://github.com/LazyVim/LazyVim/blob/main/LICENSE">
<img alt="License" src="https://img.shields.io/github/license/LazyVim/LazyVim?style=for-the-badge&logo=starship&color=ee999f&logoColor=D9E0EE&labelColor=302D41" />
</a>
<a href="https://github.com/LazyVim/LazyVim/stargazers">
<img alt="Stars" src="https://img.shields.io/github/stars/LazyVim/LazyVim?style=for-the-badge&logo=starship&color=c69ff5&logoColor=D9E0EE&labelColor=302D41" />
</a>
<a href="https://github.com/LazyVim/LazyVim/issues">
<img alt="Issues" src="https://img.shields.io/github/issues/LazyVim/LazyVim?style=for-the-badge&logo=bilibili&color=F5E0DC&logoColor=D9E0EE&labelColor=302D41" />
</a>
<a href="https://github.com/LazyVim/LazyVim">
<img alt="Repo Size" src="https://img.shields.io/github/repo-size/LazyVim/LazyVim?color=%23DDB6F2&label=SIZE&logo=codesandbox&style=for-the-badge&logoColor=D9E0EE&labelColor=302D41" />
</a>
<a href="https://twitter.com/intent/follow?screen_name=folke">
<img alt="follow on Twitter" src="https://img.shields.io/twitter/follow/folke?style=for-the-badge&logo=twitter&color=8aadf3&logoColor=D9E0EE&labelColor=302D41" />
</a>
</div>
LazyVim è una configurazione di Neovim basata su [💤 lazy.nvim](https://github.com/folke/lazy.nvim)
che rende semplice personalizzare ed estendere la tua configurazione.
Piuttosto che dover scegliere tra partire da zero o utilizzare una
distribuzione preconfigurata, LazyVim offre il meglio di entrambi i mondi:
la flessibilità di modificare la tua configurazione come necessario,
insieme alla comodità di un setup preconfigurato.
![image](https://user-images.githubusercontent.com/292349/211285846-0b7bb3bf-0462-4029-b64c-4ee1d037fc1c.png)
![image](https://user-images.githubusercontent.com/292349/213447056-92290767-ea16-430c-8727-ce994c93e9cc.png)
## ✨ Caratteristiche
- 🔥 Trasforma il tuo Neovim in un IDE completo
- 💤 Personalizza ed estendi facilmente la tua configurazione con [lazy.nvim](https://github.com/folke/lazy.nvim)
- 🚀 Estremamente veloce
- 🧹 Impostazioni di default ottimizzate per opzioni, AutoCmd e scorciatoie da tastiera
- 📦 Distribuito con una vasta gamma di plugin preconfigurati e pronti all'uso
## ⚡️ Requisiti
- Neovim >= **0.11.2** (deve essere compilato con **LuaJIT**)
- Git >= **2.19.0** (per supportare cloni parziali)
- a [Nerd Font](https://www.nerdfonts.com/) **_(opzionale)_**
- un compilatore **C** per `nvim-treesitter`. Leggi [qui](https://github.com/nvim-treesitter/nvim-treesitter#requirements)
## 🚀 Per iniziare
Puoi trovare un template per **LazyVim** [qui](https://github.com/LazyVim/starter)
<details><summary>Provalo con Docker</summary>
```sh
docker run -w /root -it --rm alpine:edge sh -uelic '
apk add git lazygit fzf curl neovim ripgrep alpine-sdk --update
git clone https://github.com/LazyVim/starter ~/.config/nvim
cd ~/.config/nvim
nvim
'
```
</details>
<details><summary>Installa il <a href="https://github.com/LazyVim/starter">LazyVim Starter</a></summary>
- Fai un backup dei tuoi file di Neovim attuali:
```sh
mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak
```
- Clona lo Starter
```sh
git clone https://github.com/LazyVim/starter ~/.config/nvim
```
- Rimuovi la cartella `.git`, così puoi aggiungerla al tuo repo in seguito
```sh
rm -rf ~/.config/nvim/.git
```
- Avvia Neovim!
```sh
nvim
```
Consulta i commenti nei file su come personalizzare **LazyVim**.
</details>
---
Qui un video creato da [@elijahmanor](https://github.com/elijahmanor) con una guida per iniziare.
[![Guarda il video](https://img.youtube.com/vi/N93cTbtLCIM/hqdefault.jpg)](https://www.youtube.com/watch?v=N93cTbtLCIM)
[@dusty-phillips](https://github.com/dusty-phillips) ha scritto un libro comprensivo chiamato
[LazyVim per Sviluppatori Ambiziosi](https://lazyvim-ambitious-devs.phillips.codes)
che è disponibile gratuitamente online.
## 📂 Struttura dei file
I file presenti nella configurazione verranno caricati automaticamente al momento
più opportuno, quindi non è necessario richiamare manualmente quei file.
**LazyVim** ha un set di configurazioni predefinite che verranno caricate
prima delle tue. Vedi [qui](https://github.com/LazyVim/LazyVim/tree/main/lua/lazyvim/config)
Puoi aggiungere i tuoi plugin personalizzati sotto `lua/plugins/`. Tutti
i file presenti verranno automaticamente caricati da [lazy.nvim](https://github.com/folke/lazy.nvim)
<pre>
~/.config/nvim
├── lua
│   ├── config
│   │   ├── autocmds.lua
│   │   ├── keymaps.lua
│   │   ├── lazy.lua
│   │   └── options.lua
│   └── plugins
│   ├── spec1.lua
│   ├── **
│   └── spec2.lua
└── init.lua
</pre>
## ⚙️ Configurazione
Consulta la [documentazione](https://lazyvim.github.io)

View file

@ -54,7 +54,7 @@ LazyVimは、ゼロから始めるか、あらかじめ作成されたディス
## ⚡️ 必要要件 ## ⚡️ 必要要件
- Neovim >= **0.11.2** (**LuaJIT**でビルドされている必要があります) - Neovim >= **0.9.0** (**LuaJIT**でビルドされている必要があります)
- Git >= **2.19.0** (部分的なcloneサポートのため) - Git >= **2.19.0** (部分的なcloneサポートのため)
- [Nerd Font](https://www.nerdfonts.com/) **_(任意)_** - [Nerd Font](https://www.nerdfonts.com/) **_(任意)_**
- `nvim-treesitter`用の**C**コンパイラ。詳細は[こちら](https://github.com/nvim-treesitter/nvim-treesitter#requirements) - `nvim-treesitter`用の**C**コンパイラ。詳細は[こちら](https://github.com/nvim-treesitter/nvim-treesitter#requirements)
@ -67,7 +67,7 @@ LazyVimは、ゼロから始めるか、あらかじめ作成されたディス
```sh ```sh
docker run -w /root -it --rm alpine:edge sh -uelic ' docker run -w /root -it --rm alpine:edge sh -uelic '
apk add git lazygit fzf curl neovim ripgrep alpine-sdk --update apk add git lazygit neovim ripgrep alpine-sdk --update
git clone https://github.com/LazyVim/starter ~/.config/nvim git clone https://github.com/LazyVim/starter ~/.config/nvim
cd ~/.config/nvim cd ~/.config/nvim
nvim nvim

View file

@ -52,7 +52,7 @@ LazyVim은 [💤 lazy.nvim](https://github.com/folke/lazy.nvim)를 기반으로
## ⚡️ 요구사항 ## ⚡️ 요구사항
- **0.11.2**이상의 Neovim (LuaJIT과 함께 개발이 되어져있어야함니다.) - **0.9.0**이상의 Neovim (LuaJIT과 함께 개발이 되어져있어야함니다.)
- **2.19.0**이상의 Git (이것은 부분적인 클론기능을 지원하기 위함입니다.) - **2.19.0**이상의 Git (이것은 부분적인 클론기능을 지원하기 위함입니다.)
- [Nerd Font](https://www.nerdfonts.com/) **_(옵션)_** - [Nerd Font](https://www.nerdfonts.com/) **_(옵션)_**
- `nvim-treesitter`를 위한 **C** 컴파일러. [이 문서](https://github.com/nvim-treesitter/nvim-treesitter#requirements)를 확인해주시기바랍니다. - `nvim-treesitter`를 위한 **C** 컴파일러. [이 문서](https://github.com/nvim-treesitter/nvim-treesitter#requirements)를 확인해주시기바랍니다.
@ -65,7 +65,7 @@ LazyVim은 [💤 lazy.nvim](https://github.com/folke/lazy.nvim)를 기반으로
```sh ```sh
docker run -w /root -it --rm alpine:edge sh -uelic ' docker run -w /root -it --rm alpine:edge sh -uelic '
apk add git lazygit fzf curl neovim ripgrep alpine-sdk --update apk add git lazygit neovim ripgrep alpine-sdk --update
git clone https://github.com/LazyVim/starter ~/.config/nvim git clone https://github.com/LazyVim/starter ~/.config/nvim
cd ~/.config/nvim cd ~/.config/nvim
nvim nvim

View file

@ -1,147 +0,0 @@
<div align="center">
<img src="https://user-images.githubusercontent.com/292349/213446185-2db63fd5-8c84-459c-9f04-e286382d6e80.png">
</div>
<hr>
<h4 align="center">
<a href="https://lazyvim.github.io/installation">Install</a>
·
<a href="https://lazyvim.github.io/configuration">Configure</a>
·
<a href="https://lazyvim.github.io">Docs</a>
</h4>
<div align="center"><p>
<a href="https://github.com/LazyVim/LazyVim/releases/latest">
<img alt="Latest release" src="https://img.shields.io/github/v/release/LazyVim/LazyVim?style=for-the-badge&logo=starship&color=C9CBFF&logoColor=D9E0EE&labelColor=302D41&include_prerelease&sort=semver" />
</a>
<a href="https://github.com/LazyVim/LazyVim/pulse">
<img alt="Last commit" src="https://img.shields.io/github/last-commit/LazyVim/LazyVim?style=for-the-badge&logo=starship&color=8bd5ca&logoColor=D9E0EE&labelColor=302D41"/>
</a>
<a href="https://github.com/LazyVim/LazyVim/blob/main/LICENSE">
<img alt="License" src="https://img.shields.io/github/license/LazyVim/LazyVim?style=for-the-badge&logo=starship&color=ee999f&logoColor=D9E0EE&labelColor=302D41" />
</a>
<a href="https://github.com/LazyVim/LazyVim/stargazers">
<img alt="Stars" src="https://img.shields.io/github/stars/LazyVim/LazyVim?style=for-the-badge&logo=starship&color=c69ff5&logoColor=D9E0EE&labelColor=302D41" />
</a>
<a href="https://github.com/LazyVim/LazyVim/issues">
<img alt="Issues" src="https://img.shields.io/github/issues/LazyVim/LazyVim?style=for-the-badge&logo=bilibili&color=F5E0DC&logoColor=D9E0EE&labelColor=302D41" />
</a>
<a href="https://github.com/LazyVim/LazyVim">
<img alt="Repo Size" src="https://img.shields.io/github/repo-size/LazyVim/LazyVim?color=%23DDB6F2&label=SIZE&logo=codesandbox&style=for-the-badge&logoColor=D9E0EE&labelColor=302D41" />
</a>
<a href="https://twitter.com/intent/follow?screen_name=folke">
<img alt="follow on Twitter" src="https://img.shields.io/twitter/follow/folke?style=for-the-badge&logo=twitter&color=8aadf3&logoColor=D9E0EE&labelColor=302D41" />
</a>
</div>
LazyVim to konfiguracja Neovim oparta na [💤 lazy.nvim](https://github.com/folke/lazy.nvim)
która ułatwia dostosowywanie i rozszerzanie konfiguracji.
Zamiast wybierać między rozpoczynaniem od zera a używaniem gotowej dystrybucji, LazyVim oferuje najlepsze z obu światów elastyczność pozwalającą na dostosowanie konfiguracji do własnych potrzeb oraz wygodę wstępnie skonfigurowanego środowiska.
![image](https://user-images.githubusercontent.com/292349/211285846-0b7bb3bf-0462-4029-b64c-4ee1d037fc1c.png)
![image](https://user-images.githubusercontent.com/292349/213447056-92290767-ea16-430c-8727-ce994c93e9cc.png)
## ✨ Funkcje
- 🔥 Przekształć Neovim w pełnoprawne IDE
- 💤 Łatwo dostosowuj i rozszerzaj swoją konfigurację dzięki [lazy.nvim](https://github.com/folke/lazy.nvim)
- 🚀 Niezwykle szybkie działanie
- 🧹 Przemyślane domyślne ustawienia opcji, autocmd i skrótów klawiszowych
- 📦 Zawiera bogaty zestaw wstępnie skonfigurowanych wtyczek gotowych do użycia
## ⚡️ Wymagania
- Neovim >= **0.9.0** (musi być skompilowany z **LuaJIT**)
- Git >= **2.19.0** (dla obsługi częściowego klonowania repozytoriów)
- [Nerd Font](https://www.nerdfonts.com/) **_(opcjonalnie)_**
- Kompilator **C** wymagany dla `nvim-treesitter`. Szczegóły [tutaj](https://github.com/nvim-treesitter/nvim-treesitter#requirements)
## 🚀 Pierwsze kroki
Szablon startowy dla **LazyVim** znajdziesz [tutaj](https://github.com/LazyVim/starter)
<details><summary>Wypróbuj z Dockerem</summary>
```sh
docker run -w /root -it --rm alpine:edge sh -uelic '
apk add git lazygit fzf curl neovim ripgrep alpine-sdk --update
git clone https://github.com/LazyVim/starter ~/.config/nvim
cd ~/.config/nvim
nvim
'
```
</details>
<details><summary>Zainstaluj <a href="https://github.com/LazyVim/starter">Starter LazyVim</a></summary>
- Wykonaj kopię zapasową swoich obecnych plików Neovim:
```sh
mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak
```
- Sklonuj repozytorium startowe:
```sh
git clone https://github.com/LazyVim/starter ~/.config/nvim
```
- Usuń folder `.git`, aby później móc dodać własne repozytorium:
```sh
rm -rf ~/.config/nvim/.git
```
- Uruchom Neovim!
```sh
nvim
```
W plikach znajdziesz komentarze, które pomogą Ci dostosować **LazyVim**.
</details>
---
[@elijahmanor](https://github.com/elijahmanor) stworzył świetne wideo z przewodnikiem, jak zacząć.
[![Obejrzyj wideo](https://img.youtube.com/vi/N93cTbtLCIM/hqdefault.jpg)](https://www.youtube.com/watch?v=N93cTbtLCIM)
[@dusty-phillips](https://github.com/dusty-phillips) napisał obszerną książkę
[LazyVim for Ambitious Developers](https://lazyvim-ambitious-devs.phillips.codes),
która jest dostępna za darmo online.
## 📂 Struktura plików
Pliki w katalogu `config` są automatycznie ładowane w odpowiednim momencie,
więc nie musisz ich ręcznie dołączać.
**LazyVim** zawiera zestaw domyślnych plików konfiguracyjnych,
które zostaną załadowane **_przed_** Twoimi własnymi. Szczegóły znajdziesz [tutaj](https://github.com/LazyVim/LazyVim/tree/main/lua/lazyvim/config).
Możesz dodać własne specyfikacje wtyczek w katalogu `lua/plugins/`.
Wszystkie pliki w tym folderze zostaną automatycznie załadowane przez [lazy.nvim](https://github.com/folke/lazy.nvim).
<pre>
~/.config/nvim
├── lua
│   ├── config
│   │   ├── autocmds.lua
│   │   ├── keymaps.lua
│   │   ├── lazy.lua
│   │   └── options.lua
│   └── plugins
│   ├── spec1.lua
│   ├── **
│   └── spec2.lua
└── init.lua
</pre>
## ⚙️ Konfiguracja
Zapoznaj się z [dokumentacją](https://lazyvim.github.io).

View file

@ -57,7 +57,7 @@ como necessário, junto com a conveniência de um setup pré-configurado.
## ⚡️ Requesitos ## ⚡️ Requesitos
- Neovim >= **0.11.2** (preciso fazer build com **LuaJIT**) - Neovim >= **0.9.0** (preciso fazer build com **LuaJIT**)
- Git >= **2.19.0** (para suporte parcial de clones) - Git >= **2.19.0** (para suporte parcial de clones)
- uma [Nerd Font](https://www.nerdfonts.com/) **_(opcional)_** - uma [Nerd Font](https://www.nerdfonts.com/) **_(opcional)_**
- um compilador de **C** para `nvim-treesitter`. Mais informações [aqui](https://github.com/nvim-treesitter/nvim-treesitter#requirements) - um compilador de **C** para `nvim-treesitter`. Mais informações [aqui](https://github.com/nvim-treesitter/nvim-treesitter#requirements)
@ -70,7 +70,7 @@ Podes encontrar uma template **LazyVim** starter para começar, [aqui](https://g
```sh ```sh
docker run -w /root -it --rm alpine:edge sh -uelic ' docker run -w /root -it --rm alpine:edge sh -uelic '
apk add git lazygit fzf curl neovim ripgrep alpine-sdk --update apk add git lazygit neovim ripgrep alpine-sdk --update
git clone https://github.com/LazyVim/starter ~/.config/nvim git clone https://github.com/LazyVim/starter ~/.config/nvim
cd ~/.config/nvim cd ~/.config/nvim
nvim nvim

View file

@ -56,7 +56,7 @@ to tweak your config as needed, along with the convenience of a pre-configured s
## ⚡️ Requirements ## ⚡️ Requirements
- Neovim >= **0.11.2** (needs to be built with **LuaJIT**) - Neovim >= **0.9.0** (needs to be built with **LuaJIT**)
- Git >= **2.19.0** (for partial clones support) - Git >= **2.19.0** (for partial clones support)
- a [Nerd Font](https://www.nerdfonts.com/) **_(optional)_** - a [Nerd Font](https://www.nerdfonts.com/) **_(optional)_**
- a **C** compiler for `nvim-treesitter`. See [here](https://github.com/nvim-treesitter/nvim-treesitter#requirements) - a **C** compiler for `nvim-treesitter`. See [here](https://github.com/nvim-treesitter/nvim-treesitter#requirements)
@ -69,7 +69,7 @@ You can find a starter template for **LazyVim** [here](https://github.com/LazyVi
```sh ```sh
docker run -w /root -it --rm alpine:edge sh -uelic ' docker run -w /root -it --rm alpine:edge sh -uelic '
apk add git lazygit fzf curl neovim ripgrep alpine-sdk --update apk add git lazygit neovim ripgrep alpine-sdk --update
git clone https://github.com/LazyVim/starter ~/.config/nvim git clone https://github.com/LazyVim/starter ~/.config/nvim
cd ~/.config/nvim cd ~/.config/nvim
nvim nvim
@ -111,7 +111,11 @@ docker run -w /root -it --rm alpine:edge sh -uelic '
--- ---
[@dusty-phillips](https://github.com/dusty-phillips) wrote a comprehensive book called There's a great video created by [@elijahmanor](https://github.com/elijahmanor) with a walkthrough to get started.
[![Watch the video](https://img.youtube.com/vi/N93cTbtLCIM/hqdefault.jpg)](https://www.youtube.com/watch?v=N93cTbtLCIM)
[@dusty-phillips](https://github.com/dusty-phillips) is working on a book called
[LazyVim for Ambitious Developers](https://lazyvim-ambitious-devs.phillips.codes) [LazyVim for Ambitious Developers](https://lazyvim-ambitious-devs.phillips.codes)
available for free online. available for free online.

View file

@ -1,5 +1,4 @@
*LazyVim.txt* LazyVim docs *LazyVim.txt* For Neovim >= 0.9.0 Last change: 2024 June 29
For Neovim Last change: 2026 June 02
============================================================================== ==============================================================================
Table of Contents *LazyVim-table-of-contents* Table of Contents *LazyVim-table-of-contents*
@ -54,7 +53,7 @@ FEATURES *LazyVim-features*
REQUIREMENTS *LazyVim-requirements* REQUIREMENTS *LazyVim-requirements*
- Neovim >= **0.11.2** (needs to be built with **LuaJIT**) - Neovim >= **0.9.0** (needs to be built with **LuaJIT**)
- Git >= **2.19.0** (for partial clones support) - Git >= **2.19.0** (for partial clones support)
- a Nerd Font <https://www.nerdfonts.com/> **(optional)** - a Nerd Font <https://www.nerdfonts.com/> **(optional)**
- a **C** compiler for `nvim-treesitter`. See here <https://github.com/nvim-treesitter/nvim-treesitter#requirements> - a **C** compiler for `nvim-treesitter`. See here <https://github.com/nvim-treesitter/nvim-treesitter#requirements>
@ -69,7 +68,7 @@ Try it with Docker ~
>sh >sh
docker run -w /root -it --rm alpine:edge sh -uelic ' docker run -w /root -it --rm alpine:edge sh -uelic '
apk add git lazygit fzf curl neovim ripgrep alpine-sdk --update apk add git lazygit neovim ripgrep alpine-sdk --update
git clone https://github.com/LazyVim/starter ~/.config/nvim git clone https://github.com/LazyVim/starter ~/.config/nvim
cd ~/.config/nvim cd ~/.config/nvim
nvim nvim
@ -79,31 +78,32 @@ Try it with Docker ~
Install the LazyVim Starter ~ Install the LazyVim Starter ~
- Make a backup of your current Neovim files: - Make a backup of your current Neovim files:
>sh
>sh
mv ~/.config/nvim ~/.config/nvim.bak mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak mv ~/.local/share/nvim ~/.local/share/nvim.bak
< <
- Clone the starter - Clone the starter
>sh
>sh
git clone https://github.com/LazyVim/starter ~/.config/nvim git clone https://github.com/LazyVim/starter ~/.config/nvim
< <
- Remove the `.git` folder, so you can add it to your own repo later - Remove the `.git` folder, so you can add it to your own repo later
>sh
>sh
rm -rf ~/.config/nvim/.git rm -rf ~/.config/nvim/.git
< <
- Start Neovim! - Start Neovim!
>sh
>sh
nvim nvim
< <
Refer to the comments in the files on how to customize **LazyVim**. Refer to the comments in the files on how to customize **LazyVim**.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@dusty-phillips <https://github.com/dusty-phillips> wrote a comprehensive book Theres a great video created by @elijahmanor
called LazyVim for Ambitious Developers <https://github.com/elijahmanor> with a walkthrough to get started.
<https://www.youtube.com/watch?v=N93cTbtLCIM>
@dusty-phillips <https://github.com/dusty-phillips> is working on a book called
LazyVim for Ambitious Developers
<https://lazyvim-ambitious-devs.phillips.codes> available for free online. <https://lazyvim-ambitious-devs.phillips.codes> available for free online.
@ -127,7 +127,9 @@ Refer to the docs <https://lazyvim.github.io>
1. *image*: https://user-images.githubusercontent.com/292349/211285846-0b7bb3bf-0462-4029-b64c-4ee1d037fc1c.png 1. *image*: https://user-images.githubusercontent.com/292349/211285846-0b7bb3bf-0462-4029-b64c-4ee1d037fc1c.png
2. *image*: https://user-images.githubusercontent.com/292349/213447056-92290767-ea16-430c-8727-ce994c93e9cc.png 2. *image*: https://user-images.githubusercontent.com/292349/213447056-92290767-ea16-430c-8727-ce994c93e9cc.png
3. *@dusty-phillips*: 3. *@elijahmanor*:
4. *Watch the video*: https://img.youtube.com/vi/N93cTbtLCIM/hqdefault.jpg
5. *@dusty-phillips*:
Generated by panvimdoc <https://github.com/kdheepak/panvimdoc> Generated by panvimdoc <https://github.com/kdheepak/panvimdoc>

View file

@ -18,11 +18,7 @@ vim.api.nvim_create_autocmd({ "FocusGained", "TermClose", "TermLeave" }, {
vim.api.nvim_create_autocmd("TextYankPost", { vim.api.nvim_create_autocmd("TextYankPost", {
group = augroup("highlight_yank"), group = augroup("highlight_yank"),
callback = function() callback = function()
if vim.fn.has("nvim-0.13") == 1 then vim.highlight.on_yank()
vim.hl.hl_op()
else
(vim.hl or vim.highlight).on_yank()
end
end, end,
}) })
@ -59,34 +55,23 @@ vim.api.nvim_create_autocmd("FileType", {
group = augroup("close_with_q"), group = augroup("close_with_q"),
pattern = { pattern = {
"PlenaryTestPopup", "PlenaryTestPopup",
"checkhealth",
"dap-float",
"dbout",
"gitsigns-blame",
"grug-far",
"help", "help",
"lspinfo", "lspinfo",
"neotest-output",
"neotest-output-panel",
"neotest-summary",
"notify", "notify",
"qf", "qf",
"spectre_panel", "spectre_panel",
"startuptime", "startuptime",
"tsplayground", "tsplayground",
"neotest-output",
"checkhealth",
"neotest-summary",
"neotest-output-panel",
"dbout",
"gitsigns.blame",
}, },
callback = function(event) callback = function(event)
vim.bo[event.buf].buflisted = false vim.bo[event.buf].buflisted = false
vim.schedule(function() vim.keymap.set("n", "q", "<cmd>close<cr>", { buffer = event.buf, silent = true })
vim.keymap.set("n", "q", function()
vim.cmd("close")
pcall(vim.api.nvim_buf_delete, event.buf, { force = true })
end, {
buffer = event.buf,
silent = true,
desc = "Quit buffer",
})
end)
end, end,
}) })
@ -102,7 +87,7 @@ vim.api.nvim_create_autocmd("FileType", {
-- wrap and check for spell in text filetypes -- wrap and check for spell in text filetypes
vim.api.nvim_create_autocmd("FileType", { vim.api.nvim_create_autocmd("FileType", {
group = augroup("wrap_spell"), group = augroup("wrap_spell"),
pattern = { "text", "plaintex", "typst", "gitcommit", "markdown" }, pattern = { "*.txt", "*.tex", "*.typ", "gitcommit", "markdown" },
callback = function() callback = function()
vim.opt_local.wrap = true vim.opt_local.wrap = true
vim.opt_local.spell = true vim.opt_local.spell = true
@ -129,3 +114,29 @@ vim.api.nvim_create_autocmd({ "BufWritePre" }, {
vim.fn.mkdir(vim.fn.fnamemodify(file, ":p:h"), "p") vim.fn.mkdir(vim.fn.fnamemodify(file, ":p:h"), "p")
end, end,
}) })
vim.filetype.add({
pattern = {
[".*"] = {
function(path, buf)
return vim.bo[buf]
and vim.bo[buf].filetype ~= "bigfile"
and path
and vim.fn.getfsize(path) > vim.g.bigfile_size
and "bigfile"
or nil
end,
},
},
})
vim.api.nvim_create_autocmd({ "FileType" }, {
group = augroup("bigfile"),
pattern = "bigfile",
callback = function(ev)
vim.b.minianimate_disable = true
vim.schedule(function()
vim.bo[ev.buf].syntax = vim.filetype.match({ buf = ev.buf }) or ""
end)
end,
})

View file

@ -3,7 +3,7 @@ _G.LazyVim = require("lazyvim.util")
---@class LazyVimConfig: LazyVimOptions ---@class LazyVimConfig: LazyVimOptions
local M = {} local M = {}
M.version = "16.0.0" -- x-release-please-version M.version = "12.21.1" -- x-release-please-version
LazyVim.config = M LazyVim.config = M
---@class LazyVimOptions ---@class LazyVimOptions
@ -34,9 +34,7 @@ local defaults = {
dots = "󰇘", dots = "󰇘",
}, },
ft = { ft = {
octo = "", octo = "",
gh = "",
["markdown.gh"] = "",
}, },
dap = { dap = {
Stopped = { "󰁕 ", "DiagnosticWarn", "DapStoppedLine" }, Stopped = { "󰁕 ", "DiagnosticWarn", "DapStoppedLine" },
@ -87,10 +85,9 @@ local defaults = {
Package = "", Package = "",
Property = "", Property = "",
Reference = "", Reference = "",
Snippet = "󱄽 ", Snippet = " ",
String = "", String = "",
Struct = "󰆼 ", Struct = "󰆼 ",
Supermaven = "",
TabNine = "󰏚 ", TabNine = "󰏚 ",
Text = "", Text = "",
TypeParameter = "", TypeParameter = "",
@ -138,20 +135,17 @@ local defaults = {
} }
M.json = { M.json = {
version = 8, version = 6,
loaded = false,
path = vim.g.lazyvim_json or vim.fn.stdpath("config") .. "/lazyvim.json",
data = { data = {
version = nil, ---@type number? version = nil, ---@type string?
install_version = nil, ---@type number?
news = {}, ---@type table<string, string> news = {}, ---@type table<string, string>
extras = {}, ---@type string[] extras = {}, ---@type string[]
}, },
} }
function M.json.load() function M.json.load()
M.json.loaded = true local path = vim.fn.stdpath("config") .. "/lazyvim.json"
local f = io.open(M.json.path, "r") local f = io.open(path, "r")
if f then if f then
local data = f:read("*a") local data = f:read("*a")
f:close() f:close()
@ -162,14 +156,11 @@ function M.json.load()
LazyVim.json.migrate() LazyVim.json.migrate()
end end
end end
else
M.json.data.install_version = M.json.version
end end
end end
---@type LazyVimOptions ---@type LazyVimOptions
local options local options
local lazy_clipboard
---@param opts? LazyVimOptions ---@param opts? LazyVimOptions
function M.setup(opts) function M.setup(opts)
@ -190,9 +181,6 @@ function M.setup(opts)
M.load("autocmds") M.load("autocmds")
end end
M.load("keymaps") M.load("keymaps")
if lazy_clipboard ~= nil then
vim.opt.clipboard = lazy_clipboard
end
LazyVim.format.setup() LazyVim.format.setup()
LazyVim.news.setup() LazyVim.news.setup()
@ -213,37 +201,6 @@ function M.setup(opts)
"desc", "desc",
"vscode", "vscode",
}) })
if vim.g.lazyvim_check_order == false then
return
end
-- Check lazy.nvim import order
local imports = require("lazy.core.config").spec.modules
local function find(pat, last)
for i = last and #imports or 1, last and 1 or #imports, last and -1 or 1 do
if imports[i]:find(pat) then
return i
end
end
end
local lazyvim_plugins = find("^lazyvim%.plugins$")
local extras = find("^lazyvim%.plugins%.extras%.", true) or lazyvim_plugins
local plugins = find("^plugins$") or math.huge
if lazyvim_plugins ~= 1 or extras > plugins then
local msg = {
"The order of your `lazy.nvim` imports is incorrect:",
"- `lazyvim.plugins` should be first",
"- followed by any `lazyvim.plugins.extras`",
"- and finally your own `plugins`",
"",
"If you think you know what you're doing, you can disable this check with:",
"```lua",
"vim.g.lazyvim_check_order = false",
"```",
}
vim.notify(table.concat(msg, "\n"), "warn", { title = "LazyVim" })
end
end, end,
}) })
@ -291,23 +248,20 @@ function M.load(name)
end, { msg = "Failed loading " .. mod }) end, { msg = "Failed loading " .. mod })
end end
end end
local pattern = "LazyVim" .. name:sub(1, 1):upper() .. name:sub(2)
-- always load lazyvim, then user file -- always load lazyvim, then user file
if M.defaults[name] or name == "options" then if M.defaults[name] or name == "options" then
_load("lazyvim.config." .. name) _load("lazyvim.config." .. name)
vim.api.nvim_exec_autocmds("User", { pattern = pattern .. "Defaults", modeline = false })
end end
_load("config." .. name) _load("config." .. name)
if vim.bo.filetype == "lazy" then if vim.bo.filetype == "lazy" then
-- HACK: LazyVim may have overwritten options of the Lazy ui, so reset this here -- HACK: LazyVim may have overwritten options of the Lazy ui, so reset this here
vim.cmd([[do VimResized]]) vim.cmd([[do VimResized]])
end end
local pattern = "LazyVim" .. name:sub(1, 1):upper() .. name:sub(2)
vim.api.nvim_exec_autocmds("User", { pattern = pattern, modeline = false }) vim.api.nvim_exec_autocmds("User", { pattern = pattern, modeline = false })
end end
M.did_init = false M.did_init = false
M._options = {} ---@type vim.wo|vim.bo
function M.init() function M.init()
if M.did_init then if M.did_init then
return return
@ -331,15 +285,6 @@ function M.init()
-- after installing missing plugins -- after installing missing plugins
M.load("options") M.load("options")
-- save some options to track defaults
M._options.indentexpr = vim.o.indentexpr
M._options.foldmethod = vim.o.foldmethod
M._options.foldexpr = vim.o.foldexpr
-- defer built-in clipboard handling: "xsel" and "pbcopy" can be slow
lazy_clipboard = vim.opt.clipboard:get()
vim.opt.clipboard = ""
if vim.g.deprecation_warnings == false then if vim.g.deprecation_warnings == false then
vim.deprecate = function() end vim.deprecate = function() end
end end
@ -348,111 +293,6 @@ function M.init()
M.json.load() M.json.load()
end end
---@alias LazyVimDefault {name: string, group: string, extra: string, import: string, enabled?: boolean, origin?: "global" | "default" | "extra" }
---
local default_extras ---@type table<string, LazyVimDefault>
---@param name string
---@param extras LazyVimDefault[]
function M.register_defaults(name, extras)
assert(default_extras, "defaults should be loaded by now, this should never happen")
local valid = vim.tbl_map(function(extra)
return extra.name
end, extras) --[[@as string[] ]]
local origin = "default"
local ret ---@type LazyVimDefault?
local use ---@type string?
local global = vim.g["lazyvim_" .. name]
if vim.tbl_contains(valid, global) then
origin = "global" -- was set by the user in their config
use = global
else
if global and global ~= "auto" then
vim.notify(
("Invalid value for `vim.g.lazyvim_%s`: `%s`\nValid options are: %s"):format(
name,
global,
table.concat(valid, ", ")
),
vim.log.levels.ERROR,
{ title = "LazyVim" }
)
end
for _, extra in ipairs(extras) do
if LazyVim.has_extra(extra.extra) then
use = extra.name -- was imported by the user in their lazy spec or added by LazyExtras
origin = "extra"
break
end
end
end
use = use or valid[1] -- fallback to the first one if nothing was set
for _, extra in ipairs(extras) do
local import = "lazyvim.plugins.extras." .. extra.extra
extra = vim.deepcopy(extra)
extra.enabled = extra.name == use
extra.import = import
extra.group = name
if extra.enabled then
extra.origin = origin
ret = extra
end
default_extras[import] = extra
end
return assert(ret, "One of the extras should be enabled, this should never happen")
end
---@param group string
---@return LazyVimDefault?
function M.get_default(group)
for _, extra in pairs(M.get_defaults()) do
if extra.group == group and extra.enabled then
return extra
end
end
end
function M.get_defaults()
if default_extras then
return default_extras
end
default_extras = {}
---@type table<string, LazyVimDefault[]>
local checks = {
picker = {
{ name = "snacks", extra = "editor.snacks_picker" },
{ name = "fzf", extra = "editor.fzf" },
{ name = "telescope", extra = "editor.telescope" },
},
cmp = {
{ name = "blink.cmp", extra = "coding.blink" },
{ name = "nvim-cmp", extra = "coding.nvim-cmp" },
},
explorer = {
{ name = "snacks", extra = "editor.snacks_explorer" },
{ name = "neo-tree", extra = "editor.neo-tree" },
},
}
-- existing installs keep their defaults
if (LazyVim.config.json.data.install_version or 7) < 8 then
table.insert(checks.picker, 1, table.remove(checks.picker, 2))
table.insert(checks.explorer, 1, table.remove(checks.explorer, 2))
end
for name, extras in pairs(checks) do
M.register_defaults(name, extras)
end
return default_extras
end
setmetatable(M, { setmetatable(M, {
__index = function(_, key) __index = function(_, key)
if options == nil then if options == nil then

View file

@ -23,12 +23,12 @@ map("n", "<C-Left>", "<cmd>vertical resize -2<cr>", { desc = "Decrease Window Wi
map("n", "<C-Right>", "<cmd>vertical resize +2<cr>", { desc = "Increase Window Width" }) map("n", "<C-Right>", "<cmd>vertical resize +2<cr>", { desc = "Increase Window Width" })
-- Move Lines -- Move Lines
map("n", "<A-j>", "<cmd>execute 'move .+' . v:count1<cr>==", { desc = "Move Down" }) map("n", "<A-j>", "<cmd>m .+1<cr>==", { desc = "Move Down" })
map("n", "<A-k>", "<cmd>execute 'move .-' . (v:count1 + 1)<cr>==", { desc = "Move Up" }) map("n", "<A-k>", "<cmd>m .-2<cr>==", { desc = "Move Up" })
map("i", "<A-j>", "<esc><cmd>m .+1<cr>==gi", { desc = "Move Down" }) map("i", "<A-j>", "<esc><cmd>m .+1<cr>==gi", { desc = "Move Down" })
map("i", "<A-k>", "<esc><cmd>m .-2<cr>==gi", { desc = "Move Up" }) map("i", "<A-k>", "<esc><cmd>m .-2<cr>==gi", { desc = "Move Up" })
map("v", "<A-j>", ":<C-u>execute \"'<,'>move '>+\" . v:count1<cr>gv=gv", { desc = "Move Down" }) map("v", "<A-j>", ":m '>+1<cr>gv=gv", { desc = "Move Down" })
map("v", "<A-k>", ":<C-u>execute \"'<,'>move '<-\" . (v:count1 + 1)<cr>gv=gv", { desc = "Move Up" }) map("v", "<A-k>", ":m '<-2<cr>gv=gv", { desc = "Move Up" })
-- buffers -- buffers
map("n", "<S-h>", "<cmd>bprevious<cr>", { desc = "Prev Buffer" }) map("n", "<S-h>", "<cmd>bprevious<cr>", { desc = "Prev Buffer" })
@ -37,23 +37,11 @@ map("n", "[b", "<cmd>bprevious<cr>", { desc = "Prev Buffer" })
map("n", "]b", "<cmd>bnext<cr>", { desc = "Next Buffer" }) map("n", "]b", "<cmd>bnext<cr>", { desc = "Next Buffer" })
map("n", "<leader>bb", "<cmd>e #<cr>", { desc = "Switch to Other Buffer" }) map("n", "<leader>bb", "<cmd>e #<cr>", { desc = "Switch to Other Buffer" })
map("n", "<leader>`", "<cmd>e #<cr>", { desc = "Switch to Other Buffer" }) map("n", "<leader>`", "<cmd>e #<cr>", { desc = "Switch to Other Buffer" })
map("n", "<leader>bd", function() map("n", "<leader>bd", LazyVim.ui.bufremove, { desc = "Delete Buffer" })
Snacks.bufdelete()
end, { desc = "Delete Buffer" })
map("n", "<leader>bo", function()
Snacks.bufdelete.other()
end, { desc = "Delete Other Buffers" })
map("n", "<leader>bi", function()
Snacks.bufdelete.invisible()
end, { desc = "Delete Invisible Buffers" })
map("n", "<leader>bD", "<cmd>:bd<cr>", { desc = "Delete Buffer and Window" }) map("n", "<leader>bD", "<cmd>:bd<cr>", { desc = "Delete Buffer and Window" })
-- Clear search and stop snippet on escape -- Clear search with <esc>
map({ "i", "n", "s" }, "<esc>", function() map({ "i", "n" }, "<esc>", "<cmd>noh<cr><esc>", { desc = "Escape and Clear hlsearch" })
vim.cmd("noh")
LazyVim.cmp.actions.snippet_stop()
return "<esc>"
end, { expr = true, desc = "Escape and Clear hlsearch" })
-- Clear search, diff update and redraw -- Clear search, diff update and redraw
-- taken from runtime/lua/_editor.lua -- taken from runtime/lua/_editor.lua
@ -84,8 +72,8 @@ map({ "i", "x", "n", "s" }, "<C-s>", "<cmd>w<cr><esc>", { desc = "Save File" })
map("n", "<leader>K", "<cmd>norm! K<cr>", { desc = "Keywordprg" }) map("n", "<leader>K", "<cmd>norm! K<cr>", { desc = "Keywordprg" })
-- better indenting -- better indenting
map("x", "<", "<gv") map("v", "<", "<gv")
map("x", ">", ">gv") map("v", ">", ">gv")
-- commenting -- commenting
map("n", "gco", "o<esc>Vcx<esc><cmd>normal gcc<cr>fxa<bs>", { desc = "Add Comment Below" }) map("n", "gco", "o<esc>Vcx<esc><cmd>normal gcc<cr>fxa<bs>", { desc = "Add Comment Below" })
@ -97,38 +85,23 @@ map("n", "<leader>l", "<cmd>Lazy<cr>", { desc = "Lazy" })
-- new file -- new file
map("n", "<leader>fn", "<cmd>enew<cr>", { desc = "New File" }) map("n", "<leader>fn", "<cmd>enew<cr>", { desc = "New File" })
-- location list map("n", "<leader>xl", "<cmd>lopen<cr>", { desc = "Location List" })
map("n", "<leader>xl", function() map("n", "<leader>xq", "<cmd>copen<cr>", { desc = "Quickfix List" })
local success, err = pcall(vim.fn.getloclist(0, { winid = 0 }).winid ~= 0 and vim.cmd.lclose or vim.cmd.lopen)
if not success and err then
vim.notify(err, vim.log.levels.ERROR)
end
end, { desc = "Location List" })
-- quickfix list
map("n", "<leader>xq", function()
local success, err = pcall(vim.fn.getqflist({ winid = 0 }).winid ~= 0 and vim.cmd.cclose or vim.cmd.copen)
if not success and err then
vim.notify(err, vim.log.levels.ERROR)
end
end, { desc = "Quickfix List" })
map("n", "[q", vim.cmd.cprev, { desc = "Previous Quickfix" }) map("n", "[q", vim.cmd.cprev, { desc = "Previous Quickfix" })
map("n", "]q", vim.cmd.cnext, { desc = "Next Quickfix" }) map("n", "]q", vim.cmd.cnext, { desc = "Next Quickfix" })
-- formatting -- formatting
map({ "n", "x" }, "<leader>cf", function() map({ "n", "v" }, "<leader>cf", function()
LazyVim.format({ force = true }) LazyVim.format({ force = true })
end, { desc = "Format" }) end, { desc = "Format" })
-- diagnostic -- diagnostic
local diagnostic_goto = function(next, severity) local diagnostic_goto = function(next, severity)
local go = next and vim.diagnostic.goto_next or vim.diagnostic.goto_prev
severity = severity and vim.diagnostic.severity[severity] or nil
return function() return function()
vim.diagnostic.jump({ go({ severity = severity })
count = (next and 1 or -1) * vim.v.count1,
severity = severity and vim.diagnostic.severity[severity] or nil,
float = true,
})
end end
end end
map("n", "<leader>cd", vim.diagnostic.open_float, { desc = "Line Diagnostics" }) map("n", "<leader>cd", vim.diagnostic.open_float, { desc = "Line Diagnostics" })
@ -142,65 +115,73 @@ map("n", "[w", diagnostic_goto(false, "WARN"), { desc = "Prev Warning" })
-- stylua: ignore start -- stylua: ignore start
-- toggle options -- toggle options
LazyVim.format.snacks_toggle():map("<leader>uf") map("n", "<leader>uf", function() LazyVim.format.toggle() end, { desc = "Toggle Auto Format (Global)" })
LazyVim.format.snacks_toggle(true):map("<leader>uF") map("n", "<leader>uF", function() LazyVim.format.toggle(true) end, { desc = "Toggle Auto Format (Buffer)" })
Snacks.toggle.option("spell", { name = "Spelling" }):map("<leader>us") map("n", "<leader>us", function() LazyVim.toggle("spell") end, { desc = "Toggle Spelling" })
Snacks.toggle.option("wrap", { name = "Wrap" }):map("<leader>uw") map("n", "<leader>uw", function() LazyVim.toggle("wrap") end, { desc = "Toggle Word Wrap" })
Snacks.toggle.option("relativenumber", { name = "Relative Number" }):map("<leader>uL") map("n", "<leader>uL", function() LazyVim.toggle("relativenumber") end, { desc = "Toggle Relative Line Numbers" })
Snacks.toggle.diagnostics():map("<leader>ud") map("n", "<leader>ul", function() LazyVim.toggle.number() end, { desc = "Toggle Line Numbers" })
Snacks.toggle.line_number():map("<leader>ul") map("n", "<leader>ud", function() LazyVim.toggle.diagnostics() end, { desc = "Toggle Diagnostics" })
Snacks.toggle.option("conceallevel", { off = 0, on = vim.o.conceallevel > 0 and vim.o.conceallevel or 2, name = "Conceal Level" }):map("<leader>uc") local conceallevel = vim.o.conceallevel > 0 and vim.o.conceallevel or 3
Snacks.toggle.option("showtabline", { off = 0, on = vim.o.showtabline > 0 and vim.o.showtabline or 2, name = "Tabline" }):map("<leader>uA") map("n", "<leader>uc", function() LazyVim.toggle("conceallevel", false, {0, conceallevel}) end, { desc = "Toggle Conceal" })
Snacks.toggle.treesitter():map("<leader>uT") if vim.lsp.buf.inlay_hint or vim.lsp.inlay_hint then
Snacks.toggle.option("background", { off = "light", on = "dark" , name = "Dark Background" }):map("<leader>ub") map( "n", "<leader>uh", function() LazyVim.toggle.inlay_hints() end, { desc = "Toggle Inlay Hints" })
Snacks.toggle.dim():map("<leader>uD")
Snacks.toggle.animate():map("<leader>ua")
Snacks.toggle.indent():map("<leader>ug")
Snacks.toggle.scroll():map("<leader>uS")
Snacks.toggle.profiler():map("<leader>dpp")
Snacks.toggle.profiler_highlights():map("<leader>dph")
if vim.lsp.inlay_hint then
Snacks.toggle.inlay_hints():map("<leader>uh")
end end
map("n", "<leader>uT", function() if vim.b.ts_highlight then vim.treesitter.stop() else vim.treesitter.start() end end, { desc = "Toggle Treesitter Highlight" })
map("n", "<leader>ub", function() LazyVim.toggle("background", false, {"light", "dark"}) end, { desc = "Toggle Background" })
-- lazygit -- lazygit
if vim.fn.executable("lazygit") == 1 then map("n", "<leader>gg", function() LazyVim.lazygit( { cwd = LazyVim.root.git() }) end, { desc = "Lazygit (Root Dir)" })
map("n", "<leader>gg", function() Snacks.lazygit( { cwd = LazyVim.root.git() }) end, { desc = "Lazygit (Root Dir)" }) map("n", "<leader>gG", function() LazyVim.lazygit() end, { desc = "Lazygit (cwd)" })
map("n", "<leader>gG", function() Snacks.lazygit() end, { desc = "Lazygit (cwd)" }) map("n", "<leader>gb", LazyVim.lazygit.blame_line, { desc = "Git Blame Line" })
end map("n", "<leader>gB", LazyVim.lazygit.browse, { desc = "Git Browse" })
map("n", "<leader>gL", function() Snacks.picker.git_log() end, { desc = "Git Log (cwd)" }) map("n", "<leader>gf", function()
map("n", "<leader>gb", function() Snacks.picker.git_log_line() end, { desc = "Git Blame Line" }) local git_path = vim.api.nvim_buf_get_name(0)
map("n", "<leader>gf", function() Snacks.picker.git_log_file() end, { desc = "Git Current File History" }) LazyVim.lazygit({args = { "-f", vim.trim(git_path) }})
map("n", "<leader>gl", function() Snacks.picker.git_log({ cwd = LazyVim.root.git() }) end, { desc = "Git Log" }) end, { desc = "Lazygit Current File History" })
map({ "n", "x" }, "<leader>gB", function() Snacks.gitbrowse() end, { desc = "Git Browse (open)" })
map({"n", "x" }, "<leader>gY", function() map("n", "<leader>gl", function()
Snacks.gitbrowse({ open = function(url) vim.fn.setreg("+", url) end, notify = false }) LazyVim.lazygit({ args = { "log" }, cwd = LazyVim.root.git() })
end, { desc = "Git Browse (copy)" }) end, { desc = "Lazygit Log" })
map("n", "<leader>gL", function()
LazyVim.lazygit({ args = { "log" } })
end, { desc = "Lazygit Log (cwd)" })
-- quit -- quit
map("n", "<leader>qq", "<cmd>qa<cr>", { desc = "Quit All" }) map("n", "<leader>qq", "<cmd>qa<cr>", { desc = "Quit All" })
-- highlights under cursor -- highlights under cursor
map("n", "<leader>ui", vim.show_pos, { desc = "Inspect Pos" }) map("n", "<leader>ui", vim.show_pos, { desc = "Inspect Pos" })
map("n", "<leader>uI", function() vim.treesitter.inspect_tree() vim.api.nvim_input("I") end, { desc = "Inspect Tree" }) map("n", "<leader>uI", "<cmd>InspectTree<cr>", { desc = "Inspect Tree" })
-- LazyVim Changelog -- LazyVim Changelog
map("n", "<leader>L", function() LazyVim.news.changelog() end, { desc = "LazyVim Changelog" }) map("n", "<leader>L", function() LazyVim.news.changelog() end, { desc = "LazyVim Changelog" })
-- floating terminal -- floating terminal
map("n", "<leader>fT", function() Snacks.terminal() end, { desc = "Terminal (cwd)" }) local lazyterm = function() LazyVim.terminal(nil, { cwd = LazyVim.root() }) end
map("n", "<leader>ft", function() Snacks.terminal(nil, { cwd = LazyVim.root() }) end, { desc = "Terminal (Root Dir)" }) map("n", "<leader>ft", lazyterm, { desc = "Terminal (Root Dir)" })
map({"n","t"}, "<c-/>",function() Snacks.terminal.focus(nil, { cwd = LazyVim.root() }) end, { desc = "Terminal (Root Dir)" }) map("n", "<leader>fT", function() LazyVim.terminal() end, { desc = "Terminal (cwd)" })
map({"n","t"}, "<c-_>",function() Snacks.terminal.focus(nil, { cwd = LazyVim.root() }) end, { desc = "which_key_ignore" }) map("n", "<c-/>", lazyterm, { desc = "Terminal (Root Dir)" })
map("n", "<c-_>", lazyterm, { desc = "which_key_ignore" })
-- Terminal Mappings
map("t", "<esc><esc>", "<c-\\><c-n>", { desc = "Enter Normal Mode" })
map("t", "<C-h>", "<cmd>wincmd h<cr>", { desc = "Go to Left Window" })
map("t", "<C-j>", "<cmd>wincmd j<cr>", { desc = "Go to Lower Window" })
map("t", "<C-k>", "<cmd>wincmd k<cr>", { desc = "Go to Upper Window" })
map("t", "<C-l>", "<cmd>wincmd l<cr>", { desc = "Go to Right Window" })
map("t", "<C-/>", "<cmd>close<cr>", { desc = "Hide Terminal" })
map("t", "<c-_>", "<cmd>close<cr>", { desc = "which_key_ignore" })
-- windows -- windows
map("n", "<leader>ww", "<C-W>p", { desc = "Other Window", remap = true })
map("n", "<leader>wd", "<C-W>c", { desc = "Delete Window", remap = true })
map("n", "<leader>w-", "<C-W>s", { desc = "Split Window Below", remap = true })
map("n", "<leader>w|", "<C-W>v", { desc = "Split Window Right", remap = true })
map("n", "<leader>-", "<C-W>s", { desc = "Split Window Below", remap = true }) map("n", "<leader>-", "<C-W>s", { desc = "Split Window Below", remap = true })
map("n", "<leader>|", "<C-W>v", { desc = "Split Window Right", remap = true }) map("n", "<leader>|", "<C-W>v", { desc = "Split Window Right", remap = true })
map("n", "<leader>wd", "<C-W>c", { desc = "Delete Window", remap = true }) map("n", "<leader>wm", function() LazyVim.toggle.maximize() end, { desc = "Maximize Toggle" })
Snacks.toggle.zoom():map("<leader>wm"):map("<leader>uZ")
Snacks.toggle.zen():map("<leader>uz")
-- tabs -- tabs
map("n", "<leader><tab>l", "<cmd>tablast<cr>", { desc = "Last Tab" }) map("n", "<leader><tab>l", "<cmd>tablast<cr>", { desc = "Last Tab" })
@ -210,6 +191,3 @@ map("n", "<leader><tab><tab>", "<cmd>tabnew<cr>", { desc = "New Tab" })
map("n", "<leader><tab>]", "<cmd>tabnext<cr>", { desc = "Next Tab" }) map("n", "<leader><tab>]", "<cmd>tabnext<cr>", { desc = "Next Tab" })
map("n", "<leader><tab>d", "<cmd>tabclose<cr>", { desc = "Close Tab" }) map("n", "<leader><tab>d", "<cmd>tabclose<cr>", { desc = "Close Tab" })
map("n", "<leader><tab>[", "<cmd>tabprevious<cr>", { desc = "Previous Tab" }) map("n", "<leader><tab>[", "<cmd>tabprevious<cr>", { desc = "Previous Tab" })
-- lua
map({"n", "x"}, "<localleader>r", function() Snacks.debug.run() end, { desc = "Run Lua", ft = "lua" })

View file

@ -5,26 +5,12 @@ vim.g.maplocalleader = "\\"
-- LazyVim auto format -- LazyVim auto format
vim.g.autoformat = true vim.g.autoformat = true
-- Snacks animations
-- Set to `false` to globally disable all snacks animations
vim.g.snacks_animate = true
-- LazyVim picker to use. -- LazyVim picker to use.
-- Can be one of: telescope, fzf -- Can be one of: telescope, fzf
-- Leave it to "auto" to automatically use the picker -- Leave it to "auto" to automatically use the picker
-- enabled with `:LazyExtras` -- enabled with `:LazyExtras`
vim.g.lazyvim_picker = "auto" vim.g.lazyvim_picker = "auto"
-- LazyVim completion engine to use.
-- Can be one of: nvim-cmp, blink.cmp
-- Leave it to "auto" to automatically use the completion engine
-- enabled with `:LazyExtras`
vim.g.lazyvim_cmp = "auto"
-- if the completion engine supports the AI source,
-- use that instead of inline suggestions
vim.g.ai_cmp = true
-- LazyVim root dir detection -- LazyVim root dir detection
-- Each entry can be: -- Each entry can be:
-- * the name of a detector function like `lsp` or `cwd` -- * the name of a detector function like `lsp` or `cwd`
@ -32,29 +18,43 @@ vim.g.ai_cmp = true
-- * a function with signature `function(buf) -> string|string[]` -- * a function with signature `function(buf) -> string|string[]`
vim.g.root_spec = { "lsp", { ".git", "lua" }, "cwd" } vim.g.root_spec = { "lsp", { ".git", "lua" }, "cwd" }
-- LazyVim automatically configures lazygit:
-- * theme, based on the active colorscheme.
-- * editorPreset to nvim-remote
-- * enables nerd font icons
-- Set to false to disable.
vim.g.lazygit_config = true
-- Options for the LazyVim statuscolumn
vim.g.lazyvim_statuscolumn = {
folds_open = false, -- show fold sign when fold is open
folds_githl = false, -- highlight fold sign with git sign color
}
-- Optionally setup the terminal to use -- Optionally setup the terminal to use
-- This sets `vim.o.shell` and does some additional configuration for: -- This sets `vim.o.shell` and does some additional configuration for:
-- * pwsh -- * pwsh
-- * powershell -- * powershell
-- LazyVim.terminal.setup("pwsh") -- LazyVim.terminal.setup("pwsh")
-- Set LSP servers to be ignored when used with `util.root.detectors.lsp`
-- for detecting the LSP root
vim.g.root_lsp_ignore = { "copilot" }
-- Hide deprecation warnings -- Hide deprecation warnings
vim.g.deprecation_warnings = false vim.g.deprecation_warnings = false
-- Set filetype to `bigfile` for files larger than 1.5 MB
-- Only vim syntax will be enabled (with the correct filetype)
-- LSP, treesitter and other ft plugins will be disabled.
-- mini.animate will also be disabled.
vim.g.bigfile_size = 1024 * 1024 * 1.5 -- 1.5 MB
-- Show the current document symbols location from Trouble in lualine -- Show the current document symbols location from Trouble in lualine
-- You can disable this for a buffer by setting `vim.b.trouble_lualine = false`
vim.g.trouble_lualine = true vim.g.trouble_lualine = true
local opt = vim.opt local opt = vim.opt
opt.autowrite = true -- Enable auto write opt.autowrite = true -- Enable auto write
-- only set clipboard if not in ssh, to make sure the OSC 52 -- only set clipboard if not in ssh, to make sure the OSC 52
-- integration works automatically. -- integration works automatically. Requires Neovim >= 0.10.0
opt.clipboard = vim.env.SSH_CONNECTION and "" or "unnamedplus" -- Sync with system clipboard opt.clipboard = vim.env.SSH_TTY and "" or "unnamedplus" -- Sync with system clipboard
opt.completeopt = "menu,menuone,noselect" opt.completeopt = "menu,menuone,noselect"
opt.conceallevel = 2 -- Hide * markup for bold and italic, but not markers with substitutions opt.conceallevel = 2 -- Hide * markup for bold and italic, but not markers with substitutions
opt.confirm = true -- Confirm to save changes before exiting modified buffer opt.confirm = true -- Confirm to save changes before exiting modified buffer
@ -69,15 +69,12 @@ opt.fillchars = {
eob = " ", eob = " ",
} }
opt.foldlevel = 99 opt.foldlevel = 99
opt.foldmethod = "indent" opt.formatexpr = "v:lua.require'lazyvim.util'.format.formatexpr()"
opt.foldtext = ""
opt.formatexpr = "v:lua.LazyVim.format.formatexpr()"
opt.formatoptions = "jcroqlnt" -- tcqj opt.formatoptions = "jcroqlnt" -- tcqj
opt.grepformat = "%f:%l:%c:%m" opt.grepformat = "%f:%l:%c:%m"
opt.grepprg = "rg --vimgrep" opt.grepprg = "rg --vimgrep"
opt.ignorecase = true -- Ignore case opt.ignorecase = true -- Ignore case
opt.inccommand = "nosplit" -- preview incremental substitute opt.inccommand = "nosplit" -- preview incremental substitute
opt.jumpoptions = "view"
opt.laststatus = 3 -- global statusline opt.laststatus = 3 -- global statusline
opt.linebreak = true -- Wrap lines at convenient points opt.linebreak = true -- Wrap lines at convenient points
opt.list = true -- Show some invisible characters (tabs... opt.list = true -- Show some invisible characters (tabs...
@ -86,7 +83,6 @@ opt.number = true -- Print line number
opt.pumblend = 10 -- Popup blend opt.pumblend = 10 -- Popup blend
opt.pumheight = 10 -- Maximum number of entries in a popup opt.pumheight = 10 -- Maximum number of entries in a popup
opt.relativenumber = true -- Relative line numbers opt.relativenumber = true -- Relative line numbers
opt.ruler = false -- Disable the default ruler
opt.scrolloff = 4 -- Lines of context opt.scrolloff = 4 -- Lines of context
opt.sessionoptions = { "buffers", "curdir", "tabpages", "winsize", "help", "globals", "skiprtp", "folds" } opt.sessionoptions = { "buffers", "curdir", "tabpages", "winsize", "help", "globals", "skiprtp", "folds" }
opt.shiftround = true -- Round indent opt.shiftround = true -- Round indent
@ -97,12 +93,12 @@ opt.sidescrolloff = 8 -- Columns of context
opt.signcolumn = "yes" -- Always show the signcolumn, otherwise it would shift the text each time opt.signcolumn = "yes" -- Always show the signcolumn, otherwise it would shift the text each time
opt.smartcase = true -- Don't ignore case with capitals opt.smartcase = true -- Don't ignore case with capitals
opt.smartindent = true -- Insert indents automatically opt.smartindent = true -- Insert indents automatically
opt.smoothscroll = true
opt.spelllang = { "en" } opt.spelllang = { "en" }
opt.spelloptions:append("noplainbuffer")
opt.splitbelow = true -- Put new windows below current opt.splitbelow = true -- Put new windows below current
opt.splitkeep = "screen" opt.splitkeep = "screen"
opt.splitright = true -- Put new windows right of current opt.splitright = true -- Put new windows right of current
opt.statuscolumn = [[%!v:lua.LazyVim.statuscolumn()]] opt.statuscolumn = [[%!v:lua.require'lazyvim.util'.ui.statuscolumn()]]
opt.tabstop = 2 -- Number of spaces tabs count for opt.tabstop = 2 -- Number of spaces tabs count for
opt.termguicolors = true -- True color support opt.termguicolors = true -- True color support
opt.timeoutlen = vim.g.vscode and 1000 or 300 -- Lower than default (1000) to quickly trigger which-key opt.timeoutlen = vim.g.vscode and 1000 or 300 -- Lower than default (1000) to quickly trigger which-key
@ -114,5 +110,15 @@ opt.wildmode = "longest:full,full" -- Command-line completion mode
opt.winminwidth = 5 -- Minimum window width opt.winminwidth = 5 -- Minimum window width
opt.wrap = false -- Disable line wrap opt.wrap = false -- Disable line wrap
if vim.fn.has("nvim-0.10") == 1 then
opt.smoothscroll = true
opt.foldexpr = "v:lua.require'lazyvim.util'.ui.foldexpr()"
opt.foldmethod = "expr"
opt.foldtext = ""
else
opt.foldmethod = "indent"
opt.foldtext = "v:lua.require'lazyvim.util'.ui.foldtext()"
end
-- Fix markdown indentation settings -- Fix markdown indentation settings
vim.g.markdown_recommended_style = 0 vim.g.markdown_recommended_style = 0

View file

@ -4,18 +4,20 @@ local start = vim.health.start or vim.health.report_start
local ok = vim.health.ok or vim.health.report_ok local ok = vim.health.ok or vim.health.report_ok
local warn = vim.health.warn or vim.health.report_warn local warn = vim.health.warn or vim.health.report_warn
local error = vim.health.error or vim.health.report_error local error = vim.health.error or vim.health.report_error
local info = vim.health.info or vim.health.report_info
function M.check() function M.check()
start("LazyVim") start("LazyVim")
if vim.fn.has("nvim-0.11.2") == 1 then if vim.fn.has("nvim-0.9.0") == 1 then
ok("Using Neovim >= 0.11.2") ok("Using Neovim >= 0.9.0")
if vim.fn.has("nvim-0.10.0") == 0 then
warn("Use Neovim >= 0.10.0 for the best experience")
end
else else
error("Neovim >= 0.11.2 is required") error("Neovim >= 0.9.0 is required")
end end
for _, cmd in ipairs({ "git", "rg", { "fd", "fdfind" }, "lazygit", "fzf", "curl" }) do for _, cmd in ipairs({ "git", "rg", { "fd", "fdfind" }, "lazygit" }) do
local name = type(cmd) == "string" and cmd or vim.inspect(cmd) local name = type(cmd) == "string" and cmd or vim.inspect(cmd)
local commands = type(cmd) == "string" and { cmd } or cmd local commands = type(cmd) == "string" and { cmd } or cmd
---@cast commands string[] ---@cast commands string[]
@ -34,23 +36,6 @@ function M.check()
warn(("`%s` is not installed"):format(name)) warn(("`%s` is not installed"):format(name))
end end
end end
start("LazyVim nvim-treesitter")
local tsok, health = LazyVim.treesitter.check()
local keys = vim.tbl_keys(health) ---@type string[]
table.sort(keys)
for _, k in pairs(keys) do
(health[k] and ok or error)(("`%s` is %s"):format(k, health[k] and "installed" or "not installed"))
end
if not tsok then
info(
"See the requirements at [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter/tree/main?tab=readme-ov-file#requirements)"
)
info("Run `:checkhealth nvim-treesitter` for more information.")
if vim.fn.has("win32") == 1 and not health["C compiler"] then
info("Install a C compiler with `winget install --id=BrechtSanders.WinLibs.POSIX.UCRT -e`")
end
end
end end
return M return M

View file

@ -1,9 +1,120 @@
return { return {
-- Auto pairs
-- Automatically inserts a matching closing character -- auto completion
-- when you type an opening character like `"`, `[`, or `(`.
{ {
"nvim-mini/mini.pairs", "hrsh7th/nvim-cmp",
version = false, -- last release is way too old
event = "InsertEnter",
dependencies = {
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
},
-- Not all LSP servers add brackets when completing a function.
-- To better deal with this, LazyVim adds a custom option to cmp,
-- that you can configure. For example:
--
-- ```lua
-- opts = {
-- auto_brackets = { "python" }
-- }
-- ```
opts = function()
vim.api.nvim_set_hl(0, "CmpGhostText", { link = "Comment", default = true })
local cmp = require("cmp")
local defaults = require("cmp.config.default")()
local auto_select = true
return {
auto_brackets = {}, -- configure any filetype to auto add brackets
completion = {
completeopt = "menu,menuone,noinsert" .. (auto_select and "" or ",noselect"),
},
preselect = auto_select and cmp.PreselectMode.Item or cmp.PreselectMode.None,
mapping = cmp.mapping.preset.insert({
["<C-b>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(4),
["<C-Space>"] = cmp.mapping.complete(),
["<CR>"] = LazyVim.cmp.confirm({ select = auto_select }),
["<C-y>"] = LazyVim.cmp.confirm({ select = true }),
["<S-CR>"] = LazyVim.cmp.confirm({ behavior = cmp.ConfirmBehavior.Replace }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
["<C-CR>"] = function(fallback)
cmp.abort()
fallback()
end,
}),
sources = cmp.config.sources({
{ name = "nvim_lsp" },
{ name = "path" },
}, {
{ name = "buffer" },
}),
formatting = {
format = function(_, item)
local icons = LazyVim.config.icons.kinds
if icons[item.kind] then
item.kind = icons[item.kind] .. item.kind
end
return item
end,
},
experimental = {
ghost_text = {
hl_group = "CmpGhostText",
},
},
sorting = defaults.sorting,
}
end,
main = "lazyvim.util.cmp",
},
-- snippets
{
"nvim-cmp",
dependencies = {
{
"garymjr/nvim-snippets",
opts = {
friendly_snippets = true,
},
dependencies = { "rafamadriz/friendly-snippets" },
},
},
opts = function(_, opts)
opts.snippet = {
expand = function(item)
return LazyVim.cmp.expand(item.body)
end,
}
if LazyVim.has("nvim-snippets") then
table.insert(opts.sources, { name = "snippets" })
end
end,
keys = {
{
"<Tab>",
function()
return vim.snippet.active({ direction = 1 }) and "<cmd>lua vim.snippet.jump(1)<cr>" or "<Tab>"
end,
expr = true,
silent = true,
mode = { "i", "s" },
},
{
"<S-Tab>",
function()
return vim.snippet.active({ direction = -1 }) and "<cmd>lua vim.snippet.jump(-1)<cr>" or "<S-Tab>"
end,
expr = true,
silent = true,
mode = { "i", "s" },
},
},
},
-- auto pairs
{
"echasnovski/mini.pairs",
event = "VeryLazy", event = "VeryLazy",
opts = { opts = {
modes = { insert = true, command = true, terminal = false }, modes = { insert = true, command = true, terminal = false },
@ -17,27 +128,40 @@ return {
-- better deal with markdown code blocks -- better deal with markdown code blocks
markdown = true, markdown = true,
}, },
keys = {
{
"<leader>up",
function()
vim.g.minipairs_disable = not vim.g.minipairs_disable
if vim.g.minipairs_disable then
LazyVim.warn("Disabled auto pairs", { title = "Option" })
else
LazyVim.info("Enabled auto pairs", { title = "Option" })
end
end,
desc = "Toggle Auto Pairs",
},
},
config = function(_, opts) config = function(_, opts)
LazyVim.mini.pairs(opts) LazyVim.mini.pairs(opts)
end, end,
}, },
-- Improves comment syntax, lets Neovim handle multiple -- comments
-- types of comments for a single language, and relaxes rules
-- for uncommenting.
{ {
"folke/ts-comments.nvim", "folke/ts-comments.nvim",
event = "VeryLazy", event = "VeryLazy",
opts = {}, opts = {},
}, },
-- Extends the a & i text objects, this adds the ability to select -- Better text-objects
-- arguments, function calls, text within quotes and brackets, and to
-- repeat those selections to select an outer text object.
{ {
"nvim-mini/mini.ai", "echasnovski/mini.ai",
event = "VeryLazy", event = "VeryLazy",
opts = function() opts = function()
LazyVim.on_load("which-key.nvim", function()
vim.schedule(LazyVim.mini.ai_whichkey)
end)
local ai = require("mini.ai") local ai = require("mini.ai")
return { return {
n_lines = 500, n_lines = 500,
@ -54,36 +178,34 @@ return {
{ "%u[%l%d]+%f[^%l%d]", "%f[%S][%l%d]+%f[^%l%d]", "%f[%P][%l%d]+%f[^%l%d]", "^[%l%d]+%f[^%l%d]" }, { "%u[%l%d]+%f[^%l%d]", "%f[%S][%l%d]+%f[^%l%d]", "%f[%P][%l%d]+%f[^%l%d]", "^[%l%d]+%f[^%l%d]" },
"^().*()$", "^().*()$",
}, },
i = LazyVim.mini.ai_indent, -- indent
g = LazyVim.mini.ai_buffer, -- buffer g = LazyVim.mini.ai_buffer, -- buffer
u = ai.gen_spec.function_call(), -- u for "Usage" u = ai.gen_spec.function_call(), -- u for "Usage"
U = ai.gen_spec.function_call({ name_pattern = "[%w_]" }), -- without dot in function name U = ai.gen_spec.function_call({ name_pattern = "[%w_]" }), -- without dot in function name
}, },
} }
end, end,
config = function(_, opts)
require("mini.ai").setup(opts)
LazyVim.on_load("which-key.nvim", function()
vim.schedule(function()
LazyVim.mini.ai_whichkey(opts)
end)
end)
end,
}, },
-- Configures LuaLS to support auto-completion and type checking
-- while editing your Neovim configuration.
{ {
"folke/lazydev.nvim", "folke/lazydev.nvim",
ft = "lua", ft = "lua",
cmd = "LazyDev", cmd = "LazyDev",
opts = { opts = {
library = { library = {
{ path = "${3rd}/luv/library", words = { "vim%.uv" } }, { path = "luvit-meta/library", words = { "vim%.uv" } },
{ path = "LazyVim", words = { "LazyVim" } }, { path = "LazyVim", words = { "LazyVim" } },
{ path = "snacks.nvim", words = { "Snacks" } },
{ path = "lazy.nvim", words = { "LazyVim" } }, { path = "lazy.nvim", words = { "LazyVim" } },
{ path = "nvim-lspconfig", words = { "lspconfig.settings" } },
}, },
}, },
}, },
-- Manage libuv types with lazy. Plugin will never be loaded
{ "Bilal2453/luvit-meta", lazy = true },
-- Add lazydev source to cmp
{
"hrsh7th/nvim-cmp",
opts = function(_, opts)
table.insert(opts.sources, { name = "lazydev", group_index = 0 })
end,
},
} }

View file

@ -13,22 +13,12 @@ return {
lazy = true, lazy = true,
name = "catppuccin", name = "catppuccin",
opts = { opts = {
lsp_styles = {
underlines = {
errors = { "undercurl" },
hints = { "undercurl" },
warnings = { "undercurl" },
information = { "undercurl" },
},
},
integrations = { integrations = {
aerial = true, aerial = true,
alpha = true, alpha = true,
cmp = true, cmp = true,
dashboard = true, dashboard = true,
flash = true, flash = true,
fzf = true,
grug_far = true,
gitsigns = true, gitsigns = true,
headlines = true, headlines = true,
illuminate = true, illuminate = true,
@ -36,28 +26,28 @@ return {
leap = true, leap = true,
lsp_trouble = true, lsp_trouble = true,
mason = true, mason = true,
markdown = true,
mini = true, mini = true,
native_lsp = {
enabled = true,
underlines = {
errors = { "undercurl" },
hints = { "undercurl" },
warnings = { "undercurl" },
information = { "undercurl" },
},
},
navic = { enabled = true, custom_bg = "lualine" }, navic = { enabled = true, custom_bg = "lualine" },
neotest = true, neotest = true,
neotree = true, neotree = true,
noice = true, noice = true,
notify = true, notify = true,
snacks = true, semantic_tokens = true,
telescope = true, telescope = true,
treesitter = true,
treesitter_context = true, treesitter_context = true,
which_key = true, which_key = true,
}, },
}, },
specs = {
{
"akinsho/bufferline.nvim",
optional = true,
opts = function(_, opts)
if (vim.g.colors_name or ""):find("catppuccin") then
opts.highlights = require("catppuccin.special.bufferline").get_theme()
end
end,
},
},
}, },
} }

View file

@ -0,0 +1,38 @@
-- Compatibility with Neovim 0.9
return {
-- Use LuaSnip instead of native snippets
{ "garymjr/nvim-snippets", enabled = false },
{ import = "lazyvim.plugins.extras.coding.luasnip" },
-- Use mini.comment instead of ts-comments
{ "folke/ts-comments.nvim", enabled = false },
{ import = "lazyvim.plugins.extras.coding.mini-comment" },
-- Use neodev-types with lazydev
{ "folke/neodev.nvim", config = function() end },
{
"folke/lazydev.nvim",
opts = function(_, opts)
opts.library = opts.library or {}
table.insert(opts.library, { "neodev.nvim/types/stable" })
end,
config = function(_, opts)
-- force lazydev to load on Neovim 0.9
require("lazydev.config").have_0_10 = true
require("lazydev").setup(opts)
end,
},
{
"neovim/nvim-lspconfig",
dependencies = {},
},
-- dummy import to save core imports
{
import = "foobar",
enabled = function()
LazyVim.plugin.save_core()
return false
end,
},
}

View file

@ -1,26 +1,141 @@
return { return {
-- file explorer
{
"nvim-neo-tree/neo-tree.nvim",
branch = "v3.x",
cmd = "Neotree",
keys = {
{
"<leader>fe",
function()
require("neo-tree.command").execute({ toggle = true, dir = LazyVim.root() })
end,
desc = "Explorer NeoTree (Root Dir)",
},
{
"<leader>fE",
function()
require("neo-tree.command").execute({ toggle = true, dir = vim.uv.cwd() })
end,
desc = "Explorer NeoTree (cwd)",
},
{ "<leader>e", "<leader>fe", desc = "Explorer NeoTree (Root Dir)", remap = true },
{ "<leader>E", "<leader>fE", desc = "Explorer NeoTree (cwd)", remap = true },
{
"<leader>ge",
function()
require("neo-tree.command").execute({ source = "git_status", toggle = true })
end,
desc = "Git Explorer",
},
{
"<leader>be",
function()
require("neo-tree.command").execute({ source = "buffers", toggle = true })
end,
desc = "Buffer Explorer",
},
},
deactivate = function()
vim.cmd([[Neotree close]])
end,
init = function()
-- FIX: use `autocmd` for lazy-loading neo-tree instead of directly requiring it,
-- because `cwd` is not set up properly.
vim.api.nvim_create_autocmd("BufEnter", {
group = vim.api.nvim_create_augroup("Neotree_start_directory", { clear = true }),
desc = "Start Neo-tree with directory",
once = true,
callback = function()
if package.loaded["neo-tree"] then
return
else
local stats = vim.uv.fs_stat(vim.fn.argv(0))
if stats and stats.type == "directory" then
require("neo-tree")
end
end
end,
})
end,
opts = {
sources = { "filesystem", "buffers", "git_status" },
open_files_do_not_replace_types = { "terminal", "Trouble", "trouble", "qf", "Outline" },
filesystem = {
bind_to_cwd = false,
follow_current_file = { enabled = true },
use_libuv_file_watcher = true,
},
window = {
mappings = {
["l"] = "open",
["h"] = "close_node",
["<space>"] = "none",
["Y"] = {
function(state)
local node = state.tree:get_node()
local path = node:get_id()
vim.fn.setreg("+", path, "c")
end,
desc = "Copy Path to Clipboard",
},
["O"] = {
function(state)
require("lazy.util").open(state.tree:get_node().path, { system = true })
end,
desc = "Open with System Application",
},
["P"] = { "toggle_preview", config = { use_float = false } },
},
},
default_component_configs = {
indent = {
with_expanders = true, -- if nil and file nesting is enabled, will enable expanders
expander_collapsed = "",
expander_expanded = "",
expander_highlight = "NeoTreeExpander",
},
git_status = {
symbols = {
unstaged = "󰄱",
staged = "󰱒",
},
},
},
},
config = function(_, opts)
local function on_move(data)
LazyVim.lsp.on_rename(data.source, data.destination)
end
local events = require("neo-tree.events")
opts.event_handlers = opts.event_handlers or {}
vim.list_extend(opts.event_handlers, {
{ event = events.FILE_MOVED, handler = on_move },
{ event = events.FILE_RENAMED, handler = on_move },
})
require("neo-tree").setup(opts)
vim.api.nvim_create_autocmd("TermClose", {
pattern = "*lazygit",
callback = function()
if package.loaded["neo-tree.sources.git_status"] then
require("neo-tree.sources.git_status").refresh()
end
end,
})
end,
},
-- search/replace in multiple files -- search/replace in multiple files
{ {
"MagicDuck/grug-far.nvim", "nvim-pack/nvim-spectre",
opts = { headerMaxWidth = 80 }, build = false,
cmd = { "GrugFar", "GrugFarWithin" }, cmd = "Spectre",
opts = { open_cmd = "noswapfile vnew" },
-- stylua: ignore
keys = { keys = {
{ { "<leader>sr", function() require("spectre").open() end, desc = "Replace in Files (Spectre)" },
"<leader>sr",
function()
local grug = require("grug-far")
local ext = vim.bo.buftype == "" and vim.fn.expand("%:e")
grug.open({
transient = true,
prefills = {
filesFilter = ext and ext ~= "" and "*." .. ext or nil,
},
})
end,
mode = { "n", "x" },
desc = "Search and Replace",
},
}, },
}, },
@ -40,16 +155,6 @@ return {
{ "r", mode = "o", function() require("flash").remote() end, desc = "Remote Flash" }, { "r", mode = "o", function() require("flash").remote() end, desc = "Remote Flash" },
{ "R", mode = { "o", "x" }, function() require("flash").treesitter_search() end, desc = "Treesitter Search" }, { "R", mode = { "o", "x" }, function() require("flash").treesitter_search() end, desc = "Treesitter Search" },
{ "<c-s>", mode = { "c" }, function() require("flash").toggle() end, desc = "Toggle Flash Search" }, { "<c-s>", mode = { "c" }, function() require("flash").toggle() end, desc = "Toggle Flash Search" },
-- Simulate nvim-treesitter incremental selection
{ "<c-space>", mode = { "n", "o", "x" },
function()
require("flash").treesitter({
actions = {
["<c-space>"] = "next",
["<BS>"] = "prev"
}
})
end, desc = "Treesitter Incremental Selection" },
}, },
}, },
@ -58,72 +163,32 @@ return {
{ {
"folke/which-key.nvim", "folke/which-key.nvim",
event = "VeryLazy", event = "VeryLazy",
opts_extend = { "spec" },
opts = { opts = {
preset = "helix", plugins = { spelling = true },
defaults = {}, defaults = {
spec = { mode = { "n", "v" },
{ ["g"] = { name = "+goto" },
mode = { "n", "x" }, ["gs"] = { name = "+surround" },
{ "<leader><tab>", group = "tabs" }, ["z"] = { name = "+fold" },
{ "<leader>c", group = "code" }, ["]"] = { name = "+next" },
{ "<leader>d", group = "debug" }, ["["] = { name = "+prev" },
{ "<leader>dp", group = "profiler" }, ["<leader><tab>"] = { name = "+tabs" },
{ "<leader>f", group = "file/find" }, ["<leader>b"] = { name = "+buffer" },
{ "<leader>g", group = "git" }, ["<leader>c"] = { name = "+code" },
{ "<leader>gh", group = "hunks" }, ["<leader>f"] = { name = "+file/find" },
{ "<leader>q", group = "quit/session" }, ["<leader>g"] = { name = "+git" },
{ "<leader>s", group = "search" }, ["<leader>gh"] = { name = "+hunks", ["_"] = "which_key_ignore" },
{ "<leader>u", group = "ui" }, ["<leader>q"] = { name = "+quit/session" },
{ "<leader>x", group = "diagnostics/quickfix" }, ["<leader>s"] = { name = "+search" },
{ "[", group = "prev" }, ["<leader>u"] = { name = "+ui" },
{ "]", group = "next" }, ["<leader>w"] = { name = "+windows" },
{ "g", group = "goto" }, ["<leader>x"] = { name = "+diagnostics/quickfix" },
{ "gs", group = "surround" },
{ "z", group = "fold" },
{
"<leader>b",
group = "buffer",
expand = function()
return require("which-key.extras").expand.buf()
end,
},
{
"<leader>w",
group = "windows",
proxy = "<c-w>",
expand = function()
return require("which-key.extras").expand.win()
end,
},
-- better descriptions
{ "gx", desc = "Open with system app" },
},
},
},
keys = {
{
"<leader>?",
function()
require("which-key").show({ global = false })
end,
desc = "Buffer Keymaps (which-key)",
},
{
"<c-w><space>",
function()
require("which-key").show({ keys = "<c-w>", loop = true })
end,
desc = "Window Hydra Mode (which-key)",
}, },
}, },
config = function(_, opts) config = function(_, opts)
local wk = require("which-key") local wk = require("which-key")
wk.setup(opts) wk.setup(opts)
if not vim.tbl_isempty(opts.defaults) then wk.register(opts.defaults)
LazyVim.warn("which-key: opts.defaults is deprecated. Please use opts.spec instead.")
wk.register(opts.defaults)
end
end, end,
}, },
@ -153,7 +218,7 @@ return {
local gs = package.loaded.gitsigns local gs = package.loaded.gitsigns
local function map(mode, l, r, desc) local function map(mode, l, r, desc)
vim.keymap.set(mode, l, r, { buffer = buffer, desc = desc, silent = true }) vim.keymap.set(mode, l, r, { buffer = buffer, desc = desc })
end end
-- stylua: ignore start -- stylua: ignore start
@ -173,8 +238,8 @@ return {
end, "Prev Hunk") end, "Prev Hunk")
map("n", "]H", function() gs.nav_hunk("last") end, "Last Hunk") map("n", "]H", function() gs.nav_hunk("last") end, "Last Hunk")
map("n", "[H", function() gs.nav_hunk("first") end, "First Hunk") map("n", "[H", function() gs.nav_hunk("first") end, "First Hunk")
map({ "n", "x" }, "<leader>ghs", ":Gitsigns stage_hunk<CR>", "Stage Hunk") map({ "n", "v" }, "<leader>ghs", ":Gitsigns stage_hunk<CR>", "Stage Hunk")
map({ "n", "x" }, "<leader>ghr", ":Gitsigns reset_hunk<CR>", "Reset Hunk") map({ "n", "v" }, "<leader>ghr", ":Gitsigns reset_hunk<CR>", "Reset Hunk")
map("n", "<leader>ghS", gs.stage_buffer, "Stage Buffer") map("n", "<leader>ghS", gs.stage_buffer, "Stage Buffer")
map("n", "<leader>ghu", gs.undo_stage_hunk, "Undo Stage Hunk") map("n", "<leader>ghu", gs.undo_stage_hunk, "Undo Stage Hunk")
map("n", "<leader>ghR", gs.reset_buffer, "Reset Buffer") map("n", "<leader>ghR", gs.reset_buffer, "Reset Buffer")
@ -187,37 +252,21 @@ return {
end, end,
}, },
}, },
{
"gitsigns.nvim",
opts = function()
Snacks.toggle({
name = "Git Signs",
get = function()
return require("gitsigns.config").config.signcolumn
end,
set = function(state)
require("gitsigns").toggle_signs(state)
end,
}):map("<leader>uG")
end,
},
-- better diagnostics list and others -- better diagnostics list and others
{ {
"folke/trouble.nvim", "folke/trouble.nvim",
cmd = { "Trouble" }, cmd = { "Trouble" },
opts = { opts = {},
modes = {
lsp = {
win = { position = "right" },
},
},
},
keys = { keys = {
{ "<leader>xx", "<cmd>Trouble diagnostics toggle<cr>", desc = "Diagnostics (Trouble)" }, { "<leader>xx", "<cmd>Trouble diagnostics toggle<cr>", desc = "Diagnostics (Trouble)" },
{ "<leader>xX", "<cmd>Trouble diagnostics toggle filter.buf=0<cr>", desc = "Buffer Diagnostics (Trouble)" }, { "<leader>xX", "<cmd>Trouble diagnostics toggle filter.buf=0<cr>", desc = "Buffer Diagnostics (Trouble)" },
{ "<leader>cs", "<cmd>Trouble symbols toggle<cr>", desc = "Symbols (Trouble)" }, { "<leader>cs", "<cmd>Trouble symbols toggle focus=false<cr>", desc = "Symbols (Trouble)" },
{ "<leader>cS", "<cmd>Trouble lsp toggle<cr>", desc = "LSP references/definitions/... (Trouble)" }, {
"<leader>cS",
"<cmd>Trouble lsp toggle focus=false win.position=right<cr>",
desc = "LSP references/definitions/... (Trouble)",
},
{ "<leader>xL", "<cmd>Trouble loclist toggle<cr>", desc = "Location List (Trouble)" }, { "<leader>xL", "<cmd>Trouble loclist toggle<cr>", desc = "Location List (Trouble)" },
{ "<leader>xQ", "<cmd>Trouble qflist toggle<cr>", desc = "Quickfix List (Trouble)" }, { "<leader>xQ", "<cmd>Trouble qflist toggle<cr>", desc = "Quickfix List (Trouble)" },
{ {
@ -268,4 +317,17 @@ return {
{ "<leader>sT", "<cmd>TodoTelescope keywords=TODO,FIX,FIXME<cr>", desc = "Todo/Fix/Fixme" }, { "<leader>sT", "<cmd>TodoTelescope keywords=TODO,FIX,FIXME<cr>", desc = "Todo/Fix/Fixme" },
}, },
}, },
{
import = "lazyvim.plugins.extras.editor.fzf",
enabled = function()
return LazyVim.pick.want() == "fzf"
end,
},
{
import = "lazyvim.plugins.extras.editor.telescope",
enabled = function()
return LazyVim.pick.want() == "telescope"
end,
},
} }

View file

@ -1,89 +0,0 @@
return {
{ "MunifTanjim/nui.nvim", lazy = true },
{
"yetone/avante.nvim",
build = vim.fn.has("win32") ~= 0 and "powershell -ExecutionPolicy Bypass -File Build.ps1 -BuildFromSource false"
or "make",
event = "VeryLazy",
opts = {
provider = "copilot",
selection = {
hint_display = "none",
},
behaviour = {
auto_set_keymaps = false,
},
},
cmd = {
"AvanteAsk",
"AvanteBuild",
"AvanteChat",
"AvanteClear",
"AvanteEdit",
"AvanteFocus",
"AvanteHistory",
"AvanteModels",
"AvanteRefresh",
"AvanteShowRepoMap",
"AvanteStop",
"AvanteSwitchProvider",
"AvanteToggle",
},
keys = {
{ "<leader>aa", "<cmd>AvanteAsk<CR>", desc = "Ask Avante" },
{ "<leader>ac", "<cmd>AvanteChat<CR>", desc = "Chat with Avante" },
{ "<leader>ae", "<cmd>AvanteEdit<CR>", desc = "Edit Avante" },
{ "<leader>af", "<cmd>AvanteFocus<CR>", desc = "Focus Avante" },
{ "<leader>ah", "<cmd>AvanteHistory<CR>", desc = "Avante History" },
{ "<leader>am", "<cmd>AvanteModels<CR>", desc = "Select Avante Model" },
{ "<leader>an", "<cmd>AvanteChatNew<CR>", desc = "New Avante Chat" },
{ "<leader>ap", "<cmd>AvanteSwitchProvider<CR>", desc = "Switch Avante Provider" },
{ "<leader>ar", "<cmd>AvanteRefresh<CR>", desc = "Refresh Avante" },
{ "<leader>as", "<cmd>AvanteStop<CR>", desc = "Stop Avante" },
{ "<leader>at", "<cmd>AvanteToggle<CR>", desc = "Toggle Avante" },
},
},
-- support for image pasting
{
"HakonHarnes/img-clip.nvim",
event = "VeryLazy",
optional = true,
opts = {
-- recommended settings
default = {
embed_image_as_base64 = false,
prompt_for_file_name = false,
drag_and_drop = {
insert_mode = true,
},
-- required for Windows users
use_absolute_path = true,
},
},
},
-- Make sure to set this up properly if you have lazy=true
{
"MeanderingProgrammer/render-markdown.nvim",
optional = true,
opts = {
file_types = { "markdown", "Avante" },
},
ft = { "markdown", "Avante" },
},
-- blink.cmp source for avante.nvim
{
"saghen/blink.cmp",
optional = true,
specs = { "Kaiser-Yang/blink-cmp-avante" },
opts = {
sources = {
default = { "avante" },
providers = { avante = { module = "blink-cmp-avante", name = "Avante" } },
},
},
},
}

View file

@ -1,22 +0,0 @@
return {
"coder/claudecode.nvim",
opts = {},
keys = {
{ "<leader>a", "", desc = "+ai", mode = { "n", "v" } },
{ "<leader>ac", "<cmd>ClaudeCode<cr>", desc = "Toggle Claude" },
{ "<leader>af", "<cmd>ClaudeCodeFocus<cr>", desc = "Focus Claude" },
{ "<leader>ar", "<cmd>ClaudeCode --resume<cr>", desc = "Resume Claude" },
{ "<leader>aC", "<cmd>ClaudeCode --continue<cr>", desc = "Continue Claude" },
{ "<leader>ab", "<cmd>ClaudeCodeAdd %<cr>", desc = "Add current buffer" },
{ "<leader>as", "<cmd>ClaudeCodeSend<cr>", mode = "v", desc = "Send to Claude" },
{
"<leader>as",
"<cmd>ClaudeCodeTreeAdd<cr>",
desc = "Add file",
ft = { "NvimTree", "neo-tree", "oil" },
},
-- Diff management
{ "<leader>aa", "<cmd>ClaudeCodeDiffAccept<cr>", desc = "Accept diff" },
{ "<leader>ad", "<cmd>ClaudeCodeDiffDeny<cr>", desc = "Deny diff" },
},
}

View file

@ -1,76 +0,0 @@
return {
-- codeium
{
"Exafunction/codeium.nvim",
cmd = "Codeium",
event = "InsertEnter",
build = ":Codeium Auth",
opts = {
enable_cmp_source = vim.g.ai_cmp,
virtual_text = {
enabled = not vim.g.ai_cmp,
key_bindings = {
accept = false, -- handled by nvim-cmp / blink.cmp
next = "<M-]>",
prev = "<M-[>",
},
},
},
},
-- add ai_accept action
{
"Exafunction/codeium.nvim",
opts = function()
LazyVim.cmp.actions.ai_accept = function()
if require("codeium.virtual_text").get_current_completion_item() then
LazyVim.create_undo()
vim.api.nvim_input(require("codeium.virtual_text").accept())
return true
end
end
end,
},
-- codeium cmp source
{
"hrsh7th/nvim-cmp",
optional = true,
dependencies = { "codeium.nvim" },
opts = function(_, opts)
table.insert(opts.sources, 1, {
name = "codeium",
group_index = 1,
priority = 100,
})
end,
},
{
"nvim-lualine/lualine.nvim",
optional = true,
event = "VeryLazy",
opts = function(_, opts)
table.insert(opts.sections.lualine_x, 2, LazyVim.lualine.cmp_source("codeium"))
end,
},
vim.g.ai_cmp and {
"saghen/blink.cmp",
optional = true,
dependencies = { "codeium.nvim", "saghen/blink.compat" },
opts = {
sources = {
compat = { "codeium" },
providers = {
codeium = {
kind = "Codeium",
score_offset = 100,
async = true,
},
},
},
},
} or nil,
}

View file

@ -1,95 +0,0 @@
---@diagnostic disable: missing-fields
if lazyvim_docs then
-- Native inline completions don't support being shown as regular completions
vim.g.ai_cmp = false
end
if LazyVim.has_extra("ai.copilot-native") then
if vim.fn.has("nvim-0.12") == 0 then
LazyVim.error("You need Neovim >= 0.12 to use the `ai.copilot-native` extra.")
return {}
end
if LazyVim.has_extra("ai.copilot") then
LazyVim.error("Please disable the `ai.copilot` extra if you want to use `ai.copilot-native`")
return {}
end
end
vim.g.ai_cmp = false
local status = {} ---@type table<number, "ok" | "error" | "pending">
return {
desc = "Native Copilot LSP integration. Requires Neovim >= 0.12",
-- copilot-language-server
{
"neovim/nvim-lspconfig",
opts = {
servers = {
copilot = {
-- stylua: ignore
keys = {
{
"<M-]>",
function() vim.lsp.inline_completion.select({ count = 1 }) end,
desc = "Next Copilot Suggestion",
mode = { "i", "n" },
},
{
"<M-[>",
function() vim.lsp.inline_completion.select({ count = -1 }) end,
desc = "Prev Copilot Suggestion",
mode = { "i", "n" },
},
},
},
},
setup = {
copilot = function()
vim.schedule(function()
vim.lsp.inline_completion.enable()
end)
-- Accept inline suggestions or next edits
LazyVim.cmp.actions.ai_accept = function()
return vim.lsp.inline_completion.get()
end
if not LazyVim.has_extra("ai.sidekick") then
vim.lsp.config("copilot", {
handlers = {
didChangeStatus = function(err, res, ctx)
if err then
return
end
status[ctx.client_id] = res.kind ~= "Normal" and "error" or res.busy and "pending" or "ok"
if res.status == "Error" then
LazyVim.error("Please use `:LspCopilotSignIn` to sign in to Copilot")
end
end,
},
})
end
end,
},
},
},
-- lualine
{
"nvim-lualine/lualine.nvim",
optional = true,
event = "VeryLazy",
opts = function(_, opts)
if LazyVim.has_extra("ai.sidekick") then
return
end
table.insert(
opts.sections.lualine_x,
2,
LazyVim.lualine.status(LazyVim.config.icons.kinds.Copilot, function()
local clients = vim.lsp.get_clients({ name = "copilot", bufnr = 0 })
return #clients > 0 and status[clients[1].id] or nil
end)
)
end,
},
}

View file

@ -1,127 +0,0 @@
return {
recommended = true,
-- copilot
{
"zbirenbaum/copilot.lua",
cmd = "Copilot",
build = ":Copilot auth",
event = "BufReadPost",
opts = {
suggestion = {
enabled = not vim.g.ai_cmp,
auto_trigger = true,
hide_during_completion = vim.g.ai_cmp,
keymap = {
accept = false, -- handled by nvim-cmp / blink.cmp
next = "<M-]>",
prev = "<M-[>",
},
},
panel = { enabled = false },
filetypes = {
markdown = true,
help = true,
},
},
},
-- copilot-language-server
{
"neovim/nvim-lspconfig",
opts = {
servers = {
-- copilot.lua only works with its own copilot lsp server
copilot = { enabled = false },
},
},
},
-- add ai_accept action
{
"zbirenbaum/copilot.lua",
opts = function()
LazyVim.cmp.actions.ai_accept = function()
if require("copilot.suggestion").is_visible() then
LazyVim.create_undo()
require("copilot.suggestion").accept()
return true
end
end
end,
},
-- lualine
{
"nvim-lualine/lualine.nvim",
optional = true,
event = "VeryLazy",
opts = function(_, opts)
table.insert(
opts.sections.lualine_x,
2,
LazyVim.lualine.status(LazyVim.config.icons.kinds.Copilot, function()
local clients = package.loaded["copilot"] and vim.lsp.get_clients({ name = "copilot", bufnr = 0 }) or {}
if #clients > 0 then
local status = require("copilot.status").data.status
return (status == "InProgress" and "pending") or (status == "Warning" and "error") or "ok"
end
end)
)
end,
},
vim.g.ai_cmp and {
-- copilot cmp source
{
"hrsh7th/nvim-cmp",
optional = true,
dependencies = { -- this will only be evaluated if nvim-cmp is enabled
{
"zbirenbaum/copilot-cmp",
opts = {},
config = function(_, opts)
local copilot_cmp = require("copilot_cmp")
copilot_cmp.setup(opts)
-- attach cmp source whenever copilot attaches
-- fixes lazy-loading issues with the copilot cmp source
Snacks.util.lsp.on({ name = "copilot" }, function()
copilot_cmp._on_insert_enter({})
end)
end,
specs = {
{
"hrsh7th/nvim-cmp",
optional = true,
---@param opts cmp.ConfigSchema
opts = function(_, opts)
table.insert(opts.sources, 1, {
name = "copilot",
group_index = 1,
priority = 100,
})
end,
},
},
},
},
},
{
"saghen/blink.cmp",
optional = true,
dependencies = { "fang2hou/blink-copilot" },
opts = {
sources = {
default = { "copilot" },
providers = {
copilot = {
name = "copilot",
module = "blink-copilot",
score_offset = 100,
async = true,
},
},
},
},
},
} or nil,
}

View file

@ -1,155 +0,0 @@
return {
desc = "Next edit suggestions with the Copilot LSP server",
-- copilot-language-server
{
"neovim/nvim-lspconfig",
opts = function(_, opts)
local sk = LazyVim.opts("sidekick.nvim") ---@type sidekick.Config|{}
if vim.tbl_get(sk, "nes", "enabled") ~= false then
opts.servers = opts.servers or {}
opts.servers.copilot = opts.servers.copilot or {}
end
end,
},
-- lualine
{
"nvim-lualine/lualine.nvim",
optional = true,
event = "VeryLazy",
opts = function(_, opts)
local icons = {
Error = { "", "DiagnosticError" },
Inactive = { "", "MsgArea" },
Warning = { "", "DiagnosticWarn" },
Normal = { LazyVim.config.icons.kinds.Copilot, "Special" },
}
table.insert(opts.sections.lualine_x, 2, {
function()
local status = require("sidekick.status").get()
return status and vim.tbl_get(icons, status.kind, 1)
end,
cond = function()
return require("sidekick.status").get() ~= nil
end,
color = function()
local status = require("sidekick.status").get()
local hl = status and (status.busy and "DiagnosticWarn" or vim.tbl_get(icons, status.kind, 2))
return { fg = Snacks.util.color(hl) }
end,
})
table.insert(opts.sections.lualine_x, 2, {
function()
local status = require("sidekick.status").cli()
return "" .. (#status > 1 and #status or "")
end,
cond = function()
return #require("sidekick.status").cli() > 0
end,
color = function()
return { fg = Snacks.util.color("Special") }
end,
})
end,
},
{
"folke/sidekick.nvim",
opts = function()
-- Accept inline suggestions or next edits
LazyVim.cmp.actions.ai_nes = function()
local Nes = require("sidekick.nes")
if Nes.have() and (Nes.jump() or Nes.apply()) then
return true
end
end
Snacks.toggle({
name = "Sidekick NES",
get = function()
return require("sidekick.nes").enabled
end,
set = function(state)
require("sidekick.nes").enable(state)
end,
}):map("<leader>uN")
end,
-- stylua: ignore
keys = {
-- nes is also useful in normal mode
{ "<tab>", LazyVim.cmp.map({ "ai_nes" }, "<tab>"), mode = { "n" }, expr = true },
{ "<leader>a", "", desc = "+ai", mode = { "n", "v" } },
{
"<c-.>",
function() require("sidekick.cli").focus() end,
desc = "Sidekick Focus",
mode = { "n", "t", "i", "x" },
},
{
"<leader>aa",
function() require("sidekick.cli").toggle() end,
desc = "Sidekick Toggle CLI",
},
{
"<leader>as",
function() require("sidekick.cli").select() end,
-- Or to select only installed tools:
-- require("sidekick.cli").select({ filter = { installed = true } })
desc = "Select CLI",
},
{
"<leader>ad",
function() require("sidekick.cli").close() end,
desc = "Detach a CLI Session",
},
{
"<leader>at",
function() require("sidekick.cli").send({ msg = "{this}" }) end,
mode = { "x", "n" },
desc = "Send This",
},
{
"<leader>af",
function() require("sidekick.cli").send({ msg = "{file}" }) end,
desc = "Send File",
},
{
"<leader>av",
function() require("sidekick.cli").send({ msg = "{selection}" }) end,
mode = { "x" },
desc = "Send Visual Selection",
},
{
"<leader>ap",
function() require("sidekick.cli").prompt() end,
mode = { "n", "x" },
desc = "Sidekick Select Prompt",
},
},
},
{
"folke/snacks.nvim",
optional = true,
opts = {
picker = {
actions = {
sidekick_send = function(...)
return require("sidekick.cli.picker.snacks").send(...)
end,
},
win = {
input = {
keys = {
["<a-a>"] = {
"sidekick_send",
mode = { "n", "i" },
},
},
},
},
},
},
},
}

View file

@ -1,97 +0,0 @@
return {
{
"supermaven-inc/supermaven-nvim",
event = "InsertEnter",
cmd = {
"SupermavenUseFree",
"SupermavenUsePro",
},
opts = {
keymaps = {
accept_suggestion = nil, -- handled by nvim-cmp / blink.cmp
},
disable_inline_completion = vim.g.ai_cmp,
ignore_filetypes = { "bigfile", "snacks_input", "snacks_notif" },
},
},
-- add ai_accept action
{
"supermaven-inc/supermaven-nvim",
opts = function()
require("supermaven-nvim.completion_preview").suggestion_group = "SupermavenSuggestion"
LazyVim.cmp.actions.ai_accept = function()
local suggestion = require("supermaven-nvim.completion_preview")
if suggestion.has_suggestion() then
LazyVim.create_undo()
vim.schedule(function()
suggestion.on_accept_suggestion()
end)
return true
end
end
end,
},
-- cmp integration
{
"hrsh7th/nvim-cmp",
optional = true,
dependencies = { "supermaven-nvim" },
opts = function(_, opts)
if vim.g.ai_cmp then
table.insert(opts.sources, 1, {
name = "supermaven",
group_index = 1,
priority = 100,
})
end
end,
},
vim.g.ai_cmp and {
"saghen/blink.cmp",
optional = true,
dependencies = { "supermaven-nvim", "saghen/blink.compat" },
opts = {
sources = {
compat = { "supermaven" },
providers = {
supermaven = {
kind = "Supermaven",
score_offset = 100,
async = true,
},
},
},
},
} or nil,
{
"nvim-lualine/lualine.nvim",
optional = true,
event = "VeryLazy",
opts = function(_, opts)
table.insert(opts.sections.lualine_x, 2, LazyVim.lualine.cmp_source("supermaven"))
end,
},
{
"folke/noice.nvim",
optional = true,
opts = function(_, opts)
vim.list_extend(opts.routes, {
{
filter = {
event = "msg_show",
any = {
{ find = "Starting Supermaven" },
{ find = "Supermaven Free Tier" },
},
},
skip = true,
},
})
end,
},
}

View file

@ -1,212 +0,0 @@
---@diagnostic disable: missing-fields
if lazyvim_docs then
-- set to `true` to follow the main branch
-- you need to have a working rust toolchain to build the plugin
-- in this case.
vim.g.lazyvim_blink_main = false
end
return {
{
"hrsh7th/nvim-cmp",
optional = true,
enabled = false,
},
{
"saghen/blink.cmp",
version = not vim.g.lazyvim_blink_main and "*",
build = vim.g.lazyvim_blink_main and "cargo build --release",
opts_extend = {
"sources.completion.enabled_providers",
"sources.compat",
"sources.default",
},
dependencies = {
"rafamadriz/friendly-snippets",
-- add blink.compat to dependencies
{
"saghen/blink.compat",
optional = true, -- make optional so it's only enabled if any extras need it
opts = {},
version = not vim.g.lazyvim_blink_main and "*",
},
},
event = { "InsertEnter", "CmdlineEnter" },
---@module 'blink.cmp'
---@type blink.cmp.Config
opts = {
snippets = {
preset = "default",
},
appearance = {
-- sets the fallback highlight groups to nvim-cmp's highlight groups
-- useful for when your theme doesn't support blink.cmp
-- will be removed in a future release, assuming themes add support
use_nvim_cmp_as_default = false,
-- set to 'mono' for 'Nerd Font Mono' or 'normal' for 'Nerd Font'
-- adjusts spacing to ensure icons are aligned
nerd_font_variant = "mono",
},
completion = {
accept = {
-- experimental auto-brackets support
auto_brackets = {
enabled = true,
},
},
menu = {
draw = {
treesitter = { "lsp" },
},
},
documentation = {
auto_show = true,
auto_show_delay_ms = 200,
},
ghost_text = {
enabled = vim.g.ai_cmp,
},
},
-- experimental signature help support
-- signature = { enabled = true },
sources = {
-- adding any nvim-cmp sources here will enable them
-- with blink.compat
compat = {},
default = { "lsp", "path", "snippets", "buffer" },
},
cmdline = {
enabled = true,
keymap = {
preset = "cmdline",
["<Right>"] = false,
["<Left>"] = false,
},
completion = {
list = { selection = { preselect = false } },
menu = {
auto_show = function(ctx)
return vim.fn.getcmdtype() == ":"
end,
},
ghost_text = { enabled = true },
},
},
keymap = {
preset = "enter",
["<C-y>"] = { "select_and_accept" },
},
},
---@param opts blink.cmp.Config | { sources: { compat: string[] } }
config = function(_, opts)
if opts.snippets and opts.snippets.preset == "default" then
opts.snippets.expand = LazyVim.cmp.expand
end
-- setup compat sources
local enabled = opts.sources.default
for _, source in ipairs(opts.sources.compat or {}) do
opts.sources.providers[source] = vim.tbl_deep_extend(
"force",
{ name = source, module = "blink.compat.source" },
opts.sources.providers[source] or {}
)
if type(enabled) == "table" and not vim.tbl_contains(enabled, source) then
table.insert(enabled, source)
end
end
-- add ai_accept to <Tab> key
if not opts.keymap["<Tab>"] then
if opts.keymap.preset == "super-tab" then -- super-tab
opts.keymap["<Tab>"] = {
require("blink.cmp.keymap.presets").get("super-tab")["<Tab>"][1],
LazyVim.cmp.map({ "snippet_forward", "ai_nes", "ai_accept" }),
"fallback",
}
else -- other presets
opts.keymap["<Tab>"] = {
LazyVim.cmp.map({ "snippet_forward", "ai_nes", "ai_accept" }),
"fallback",
}
end
end
-- Unset custom prop to pass blink.cmp validation
opts.sources.compat = nil
-- check if we need to override symbol kinds
for _, provider in pairs(opts.sources.providers or {}) do
---@cast provider blink.cmp.SourceProviderConfig|{kind?:string}
if provider.kind then
local CompletionItemKind = require("blink.cmp.types").CompletionItemKind
local kind_idx = #CompletionItemKind + 1
CompletionItemKind[kind_idx] = provider.kind
---@diagnostic disable-next-line: no-unknown
CompletionItemKind[provider.kind] = kind_idx
---@type fun(ctx: blink.cmp.Context, items: blink.cmp.CompletionItem[]): blink.cmp.CompletionItem[]
local transform_items = provider.transform_items
---@param ctx blink.cmp.Context
---@param items blink.cmp.CompletionItem[]
provider.transform_items = function(ctx, items)
items = transform_items and transform_items(ctx, items) or items
for _, item in ipairs(items) do
item.kind = kind_idx or item.kind
item.kind_icon = LazyVim.config.icons.kinds[item.kind_name] or item.kind_icon or nil
end
return items
end
-- Unset custom prop to pass blink.cmp validation
provider.kind = nil
end
end
require("blink.cmp").setup(opts)
end,
},
-- add icons
{
"saghen/blink.cmp",
opts = function(_, opts)
opts.appearance = opts.appearance or {}
opts.appearance.kind_icons = vim.tbl_extend("force", opts.appearance.kind_icons or {}, LazyVim.config.icons.kinds)
end,
},
-- lazydev
{
"saghen/blink.cmp",
opts = {
sources = {
per_filetype = {
lua = { inherit_defaults = true, "lazydev" },
},
providers = {
lazydev = {
name = "LazyDev",
module = "lazydev.integrations.blink",
score_offset = 100, -- show at a higher priority than lsp
},
},
},
},
},
-- catppuccin support
{
"catppuccin",
optional = true,
opts = {
integrations = { blink_cmp = true },
},
},
}

View file

@ -0,0 +1,33 @@
return {
-- codeium cmp source
{
"nvim-cmp",
dependencies = {
-- codeium
{
"Exafunction/codeium.nvim",
cmd = "Codeium",
build = ":Codeium Auth",
opts = {},
},
},
---@param opts cmp.ConfigSchema
opts = function(_, opts)
table.insert(opts.sources, 1, {
name = "codeium",
group_index = 1,
priority = 100,
})
end,
},
{
"nvim-lualine/lualine.nvim",
optional = true,
event = "VeryLazy",
opts = function(_, opts)
table.insert(opts.sections.lualine_x, 2, LazyVim.lualine.cmp_source("codeium"))
end,
},
}

View file

@ -1,33 +1,52 @@
local M = {}
---@param kind string
function M.pick(kind)
return function()
local actions = require("CopilotChat.actions")
local items = actions[kind .. "_actions"]()
if not items then
LazyVim.warn("No " .. kind .. " found on the current line")
return
end
local ok = pcall(require, "fzf-lua")
require("CopilotChat.integrations." .. (ok and "fzflua" or "telescope")).pick(items)
end
end
return { return {
{ {
"CopilotC-Nvim/CopilotChat.nvim", "CopilotC-Nvim/CopilotChat.nvim",
branch = "main", branch = "canary",
cmd = "CopilotChat", cmd = "CopilotChat",
opts = function() opts = function()
local user = vim.env.USER or "User" local user = vim.env.USER or "User"
user = user:sub(1, 1):upper() .. user:sub(2) user = user:sub(1, 1):upper() .. user:sub(2)
return { return {
model = "gpt-4",
auto_insert_mode = true, auto_insert_mode = true,
headers = { show_help = true,
user = "" .. user .. " ", question_header = "" .. user .. " ",
assistant = " Copilot ", answer_header = " Copilot ",
tool = "󰊳 Tool ",
},
window = { window = {
width = 0.4, width = 0.4,
}, },
selection = function(source)
local select = require("CopilotChat.select")
return select.visual(source) or select.buffer(source)
end,
} }
end, end,
keys = { keys = {
{ "<c-s>", "<CR>", ft = "copilot-chat", desc = "Submit Prompt", remap = true }, { "<c-s>", "<CR>", ft = "copilot-chat", desc = "Submit Prompt", remap = true },
{ "<leader>a", "", desc = "+ai", mode = { "n", "x" } }, { "<leader>a", "", desc = "+ai", mode = { "n", "v" } },
{ {
"<leader>aa", "<leader>aa",
function() function()
return require("CopilotChat").toggle() return require("CopilotChat").toggle()
end, end,
desc = "Toggle (CopilotChat)", desc = "Toggle (CopilotChat)",
mode = { "n", "x" }, mode = { "n", "v" },
}, },
{ {
"<leader>ax", "<leader>ax",
@ -35,33 +54,27 @@ return {
return require("CopilotChat").reset() return require("CopilotChat").reset()
end, end,
desc = "Clear (CopilotChat)", desc = "Clear (CopilotChat)",
mode = { "n", "x" }, mode = { "n", "v" },
}, },
{ {
"<leader>aq", "<leader>aq",
function() function()
vim.ui.input({ local input = vim.fn.input("Quick Chat: ")
prompt = "Quick Chat: ", if input ~= "" then
}, function(input) require("CopilotChat").ask(input)
if input ~= "" then end
require("CopilotChat").ask(input)
end
end)
end, end,
desc = "Quick Chat (CopilotChat)", desc = "Quick Chat (CopilotChat)",
mode = { "n", "x" }, mode = { "n", "v" },
},
{
"<leader>ap",
function()
require("CopilotChat").select_prompt()
end,
desc = "Prompt Actions (CopilotChat)",
mode = { "n", "x" },
}, },
-- Show help actions with telescope
{ "<leader>ad", M.pick("help"), desc = "Diagnostic Help (CopilotChat)", mode = { "n", "v" } },
-- Show prompts actions with telescope
{ "<leader>ap", M.pick("prompt"), desc = "Prompt Actions (CopilotChat)", mode = { "n", "v" } },
}, },
config = function(_, opts) config = function(_, opts)
local chat = require("CopilotChat") local chat = require("CopilotChat")
require("CopilotChat.integrations.cmp").setup()
vim.api.nvim_create_autocmd("BufEnter", { vim.api.nvim_create_autocmd("BufEnter", {
pattern = "copilot-chat", pattern = "copilot-chat",
@ -88,24 +101,4 @@ return {
}) })
end, end,
}, },
-- Blink integration
{
"saghen/blink.cmp",
optional = true,
---@module 'blink.cmp'
---@type blink.cmp.Config
opts = {
sources = {
providers = {
path = {
-- Path sources triggered by "/" interfere with CopilotChat commands
enabled = function()
return vim.bo.filetype ~= "copilot-chat"
end,
},
},
},
},
},
} }

View file

@ -0,0 +1,83 @@
return {
recommended = true,
-- copilot
{
"zbirenbaum/copilot.lua",
cmd = "Copilot",
build = ":Copilot auth",
opts = {
suggestion = { enabled = false },
panel = { enabled = false },
filetypes = {
markdown = true,
help = true,
},
},
},
{
"nvim-lualine/lualine.nvim",
optional = true,
event = "VeryLazy",
opts = function(_, opts)
local colors = {
[""] = LazyVim.ui.fg("Special"),
["Normal"] = LazyVim.ui.fg("Special"),
["Warning"] = LazyVim.ui.fg("DiagnosticError"),
["InProgress"] = LazyVim.ui.fg("DiagnosticWarn"),
}
table.insert(opts.sections.lualine_x, 2, {
function()
local icon = LazyVim.config.icons.kinds.Copilot
local status = require("copilot.api").status.data
return icon .. (status.message or "")
end,
cond = function()
if not package.loaded["copilot"] then
return
end
local ok, clients = pcall(LazyVim.lsp.get_clients, { name = "copilot", bufnr = 0 })
if not ok then
return false
end
return ok and #clients > 0
end,
color = function()
if not package.loaded["copilot"] then
return
end
local status = require("copilot.api").status.data
return colors[status.status] or colors[""]
end,
})
end,
},
-- copilot cmp source
{
"nvim-cmp",
dependencies = {
{
"zbirenbaum/copilot-cmp",
dependencies = "copilot.lua",
opts = {},
config = function(_, opts)
local copilot_cmp = require("copilot_cmp")
copilot_cmp.setup(opts)
-- attach cmp source whenever copilot attaches
-- fixes lazy-loading issues with the copilot cmp source
LazyVim.lsp.on_attach(function(client)
copilot_cmp._on_insert_enter({})
end, "copilot")
end,
},
},
---@param opts cmp.ConfigSchema
opts = function(_, opts)
table.insert(opts.sources, 1, {
name = "copilot",
group_index = 1,
priority = 100,
})
end,
},
}

View file

@ -1,11 +1,6 @@
return { return {
-- disable builtin snippet support
{ "garymjr/nvim-snippets", optional = true, enabled = false },
-- add luasnip
{ {
"L3MON4D3/LuaSnip", "L3MON4D3/LuaSnip",
lazy = true,
build = (not LazyVim.is_win()) build = (not LazyVim.is_win())
and "echo 'NOTE: jsregexp is optional, so not a big deal if it fails to build'; make install_jsregexp" and "echo 'NOTE: jsregexp is optional, so not a big deal if it fails to build'; make install_jsregexp"
or nil, or nil,
@ -14,7 +9,20 @@ return {
"rafamadriz/friendly-snippets", "rafamadriz/friendly-snippets",
config = function() config = function()
require("luasnip.loaders.from_vscode").lazy_load() require("luasnip.loaders.from_vscode").lazy_load()
require("luasnip.loaders.from_vscode").lazy_load({ paths = { vim.fn.stdpath("config") .. "/snippets" } }) end,
},
{
"nvim-cmp",
dependencies = {
"saadparwaiz1/cmp_luasnip",
},
opts = function(_, opts)
opts.snippet = {
expand = function(args)
require("luasnip").lsp_expand(args.body)
end,
}
table.insert(opts.sources, { name = "luasnip" })
end, end,
}, },
}, },
@ -23,56 +31,23 @@ return {
delete_check_events = "TextChanged", delete_check_events = "TextChanged",
}, },
}, },
-- add snippet_forward action
{ {
"L3MON4D3/LuaSnip", "nvim-cmp",
opts = function()
LazyVim.cmp.actions.snippet_forward = function()
if require("luasnip").jumpable(1) then
vim.schedule(function()
require("luasnip").jump(1)
end)
return true
end
end
LazyVim.cmp.actions.snippet_stop = function()
if require("luasnip").expand_or_jumpable() then -- or just jumpable(1) is fine?
require("luasnip").unlink_current()
return true
end
end
end,
},
-- nvim-cmp integration
{
"hrsh7th/nvim-cmp",
optional = true,
dependencies = { "saadparwaiz1/cmp_luasnip" },
opts = function(_, opts)
opts.snippet = {
expand = function(args)
require("luasnip").lsp_expand(args.body)
end,
}
table.insert(opts.sources, { name = "luasnip" })
end,
-- stylua: ignore -- stylua: ignore
keys = { keys = {
{
"<tab>",
function()
return require("luasnip").jumpable(1) and "<Plug>luasnip-jump-next" or "<tab>"
end,
expr = true, silent = true, mode = "i",
},
{ "<tab>", function() require("luasnip").jump(1) end, mode = "s" }, { "<tab>", function() require("luasnip").jump(1) end, mode = "s" },
{ "<s-tab>", function() require("luasnip").jump(-1) end, mode = { "i", "s" } }, { "<s-tab>", function() require("luasnip").jump(-1) end, mode = { "i", "s" } },
}, },
}, },
-- blink.cmp integration
{ {
"saghen/blink.cmp", "garymjr/nvim-snippets",
optional = true, enabled = false,
opts = {
snippets = {
preset = "luasnip",
},
},
}, },
} }

View file

@ -1,6 +1,6 @@
return { return {
{ {
"nvim-mini/mini.comment", "echasnovski/mini.comment",
event = "VeryLazy", event = "VeryLazy",
opts = { opts = {
options = { options = {

View file

@ -1,171 +0,0 @@
if lazyvim_docs then
-- Set to `false` to prevent "non-lsp snippets"" from appearing inside completion windows
-- Motivation: Less clutter in completion windows and a more direct usage of snippets
vim.g.lazyvim_mini_snippets_in_completion = true
-- NOTE: Please also read:
-- https://github.com/nvim-mini/mini.nvim/blob/main/readmes/mini-snippets.md#expand
-- :h MiniSnippets-session
-- Example override for your own config:
--[[
return {
{
"nvim-mini/mini.snippets",
opts = function(_, opts)
-- By default, for opts.snippets, the extra for mini.snippets only adds gen_loader.from_lang()
-- This provides a sensible quickstart, integrating with friendly-snippets
-- and your own language-specific snippets
--
-- In order to change opts.snippets, replace the entire table inside your own opts
local snippets, config_path = require("mini.snippets"), vim.fn.stdpath("config")
opts.snippets = { -- override opts.snippets provided by extra...
-- Load custom file with global snippets first (order matters)
snippets.gen_loader.from_file(config_path .. "/snippets/global.json"),
-- Load snippets based on current language by reading files from
-- "snippets/" subdirectories from 'runtimepath' directories.
snippets.gen_loader.from_lang(), -- this is the default in the extra...
}
end,
},
}
--]]
end
local include_in_completion = vim.g.lazyvim_mini_snippets_in_completion == nil
or vim.g.lazyvim_mini_snippets_in_completion
local function expand_from_lsp(snippet)
local insert = MiniSnippets.config.expand.insert or MiniSnippets.default_insert
insert({ body = snippet })
end
local function jump(direction)
local is_active = MiniSnippets.session.get(false) ~= nil
if is_active then
MiniSnippets.session.jump(direction)
return true
end
end
---@type fun(snippets, insert) | nil
local expand_select_override = nil
return {
-- disable builtin snippet support:
{ "garymjr/nvim-snippets", optional = true, enabled = false },
-- disable luasnip:
{ "L3MON4D3/LuaSnip", optional = true, enabled = false },
-- add mini.snippets
desc = "Manage and expand snippets (alternative to Luasnip)",
{
"nvim-mini/mini.snippets",
event = "InsertEnter", -- don't depend on other plugins to load...
dependencies = "rafamadriz/friendly-snippets",
opts = function()
---@diagnostic disable-next-line: duplicate-set-field
LazyVim.cmp.actions.snippet_stop = function() end -- by design, <esc> should not stop the session!
---@diagnostic disable-next-line: duplicate-set-field
LazyVim.cmp.actions.snippet_forward = function()
return jump("next")
end
local mini_snippets = require("mini.snippets")
return {
snippets = { mini_snippets.gen_loader.from_lang() },
-- Following the behavior of vim.snippets,
-- the intended usage of <esc> is to be able to temporarily exit into normal mode for quick edits.
--
-- If you'd rather stop the snippet on <esc>, activate the line below in your own config:
-- mappings = { stop = "<esc>" }, -- <c-c> by default, see :h MiniSnippets-session
expand = {
select = function(snippets, insert)
-- Close completion window on snippet select - vim.ui.select
-- Needed to remove virtual text for fzf-lua and telescope, but not for mini.pick...
local select = expand_select_override or MiniSnippets.default_select
select(snippets, insert)
end,
},
}
end,
},
-- nvim-cmp integration
{
"hrsh7th/nvim-cmp",
optional = true,
dependencies = include_in_completion and { "abeldekat/cmp-mini-snippets" } or nil,
opts = function(_, opts)
local cmp = require("cmp")
local cmp_config = require("cmp.config")
opts.snippet = {
expand = function(args)
expand_from_lsp(args.body)
cmp.resubscribe({ "TextChangedI", "TextChangedP" })
cmp_config.set_onetime({ sources = {} })
end,
}
if include_in_completion then
table.insert(opts.sources, { name = "mini_snippets" })
else
expand_select_override = function(snippets, insert)
-- stylua: ignore
if cmp.visible() then cmp.close() end
MiniSnippets.default_select(snippets, insert)
end
end
end,
-- stylua: ignore
-- counterpart to <tab> defined in cmp.mappings
keys = include_in_completion and { { "<s-tab>", function() jump("prev") end, mode = "i" } } or nil,
},
-- blink.cmp integration
{
"saghen/blink.cmp",
optional = true,
opts = function(_, opts)
-- Return early
if include_in_completion then
opts.snippets = { preset = "mini_snippets" }
return
end
-- Standalone --
local blink = require("blink.cmp")
expand_select_override = function(snippets, insert)
-- Schedule, otherwise blink's virtual text is not removed on vim.ui.select
blink.cancel()
vim.schedule(function()
MiniSnippets.default_select(snippets, insert)
end)
end
--
-- Blink performs a require on blink.cmp.sources.snippets.default
-- By removing the source, that default engine will not be used
opts.sources.default = vim.tbl_filter(function(source)
return source ~= "snippets"
end, opts.sources.default)
opts.snippets = { -- need to repeat blink's preset here
expand = function(snippet)
expand_from_lsp(snippet)
blink.resubscribe()
end,
active = function()
return MiniSnippets.session.get(false) ~= nil
end,
jump = function(direction)
jump(direction == -1 and "prev" or "next")
end,
}
end,
},
}

View file

@ -3,12 +3,13 @@
-- to select the text inside, change or modify the surrounding characters, -- to select the text inside, change or modify the surrounding characters,
-- and more. -- and more.
return { return {
"nvim-mini/mini.surround", "echasnovski/mini.surround",
recommended = true,
keys = function(_, keys) keys = function(_, keys)
-- Populate the keys based on the user's options -- Populate the keys based on the user's options
local opts = LazyVim.opts("mini.surround") local opts = LazyVim.opts("mini.surround")
local mappings = { local mappings = {
{ opts.mappings.add, desc = "Add Surrounding", mode = { "n", "x" } }, { opts.mappings.add, desc = "Add Surrounding", mode = { "n", "v" } },
{ opts.mappings.delete, desc = "Delete Surrounding" }, { opts.mappings.delete, desc = "Delete Surrounding" },
{ opts.mappings.find, desc = "Find Right Surrounding" }, { opts.mappings.find, desc = "Find Right Surrounding" },
{ opts.mappings.find_left, desc = "Find Left Surrounding" }, { opts.mappings.find_left, desc = "Find Left Surrounding" },

View file

@ -1,6 +1,5 @@
return { return {
"danymat/neogen", "danymat/neogen",
dependencies = LazyVim.has("mini.snippets") and { "mini.snippets" } or {},
cmd = "Neogen", cmd = "Neogen",
keys = { keys = {
{ {
@ -18,7 +17,6 @@ return {
local map = { local map = {
["LuaSnip"] = "luasnip", ["LuaSnip"] = "luasnip",
["mini.snippets"] = "mini",
["nvim-snippy"] = "snippy", ["nvim-snippy"] = "snippy",
["vim-vsnip"] = "vsnip", ["vim-vsnip"] = "vsnip",
} }

View file

@ -1,121 +0,0 @@
return {
{
"saghen/blink.cmp",
enabled = false,
optional = true,
},
-- Setup nvim-cmp
{
"hrsh7th/nvim-cmp",
version = false, -- last release is way too old
event = "InsertEnter",
dependencies = {
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
},
-- Not all LSP servers add brackets when completing a function.
-- To better deal with this, LazyVim adds a custom option to cmp,
-- that you can configure. For example:
--
-- ```lua
-- opts = {
-- auto_brackets = { "python" }
-- }
-- ```
opts = function()
-- Register nvim-cmp lsp capabilities
vim.lsp.config("*", { capabilities = require("cmp_nvim_lsp").default_capabilities() })
vim.api.nvim_set_hl(0, "CmpGhostText", { link = "Comment", default = true })
local cmp = require("cmp")
local defaults = require("cmp.config.default")()
local auto_select = true
return {
auto_brackets = {}, -- configure any filetype to auto add brackets
completion = {
completeopt = "menu,menuone,noinsert" .. (auto_select and "" or ",noselect"),
},
preselect = auto_select and cmp.PreselectMode.Item or cmp.PreselectMode.None,
mapping = cmp.mapping.preset.insert({
["<C-b>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(4),
["<C-n>"] = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Insert }),
["<C-p>"] = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Insert }),
["<C-Space>"] = cmp.mapping.complete(),
["<CR>"] = LazyVim.cmp.confirm({ select = auto_select }),
["<C-y>"] = LazyVim.cmp.confirm({ select = true }),
["<S-CR>"] = LazyVim.cmp.confirm({ behavior = cmp.ConfirmBehavior.Replace }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
["<C-CR>"] = function(fallback)
cmp.abort()
fallback()
end,
["<tab>"] = function(fallback)
return LazyVim.cmp.map({ "snippet_forward", "ai_nes", "ai_accept" }, fallback)()
end,
}),
sources = cmp.config.sources({
{ name = "lazydev" },
{ name = "nvim_lsp" },
{ name = "path" },
}, {
{ name = "buffer" },
}),
formatting = {
format = function(entry, item)
local icons = LazyVim.config.icons.kinds
if icons[item.kind] then
item.kind = icons[item.kind] .. item.kind
end
local widths = {
abbr = vim.g.cmp_widths and vim.g.cmp_widths.abbr or 40,
menu = vim.g.cmp_widths and vim.g.cmp_widths.menu or 30,
}
for key, width in pairs(widths) do
if item[key] and vim.fn.strdisplaywidth(item[key]) > width then
item[key] = vim.fn.strcharpart(item[key], 0, width - 1) .. ""
end
end
return item
end,
},
experimental = {
-- only show ghost text when we show ai completions
ghost_text = vim.g.ai_cmp and {
hl_group = "CmpGhostText",
} or false,
},
sorting = defaults.sorting,
}
end,
main = "lazyvim.util.cmp",
},
-- snippets
{
"hrsh7th/nvim-cmp",
dependencies = {
{
"garymjr/nvim-snippets",
opts = {
friendly_snippets = true,
},
dependencies = { "rafamadriz/friendly-snippets" },
},
},
opts = function(_, opts)
opts.snippet = {
expand = function(item)
return LazyVim.cmp.expand(item.body)
end,
}
if LazyVim.has("nvim-snippets") then
table.insert(opts.sources, { name = "snippets" })
end
end,
},
}

View file

@ -1,22 +1,25 @@
return { return {
-- Tabnine cmp source -- Tabnine cmp source
{ {
"tzachar/cmp-tabnine", "nvim-cmp",
build = LazyVim.is_win() and "pwsh -noni .\\install.ps1" or "./install.sh", dependencies = {
opts = { {
max_lines = 1000, "tzachar/cmp-tabnine",
max_num_results = 3, build = {
sort = true, LazyVim.is_win() and "pwsh -noni .\\install.ps1" or "./install.sh",
":CmpTabnineHub",
},
dependencies = "hrsh7th/nvim-cmp",
opts = {
max_lines = 1000,
max_num_results = 3,
sort = true,
},
config = function(_, opts)
require("cmp_tabnine.config"):setup(opts)
end,
},
}, },
config = function(_, opts)
require("cmp_tabnine.config"):setup(opts)
end,
},
{
"hrsh7th/nvim-cmp",
optional = true,
dependencies = { "tzachar/cmp-tabnine" },
---@param opts cmp.ConfigSchema ---@param opts cmp.ConfigSchema
opts = function(_, opts) opts = function(_, opts)
table.insert(opts.sources, 1, { table.insert(opts.sources, 1, {
@ -33,25 +36,6 @@ return {
end) end)
end, end,
}, },
{
"saghen/blink.cmp",
optional = true,
dependencies = { "tzachar/cmp-tabnine", "saghen/blink.compat" },
opts = {
sources = {
compat = { "cmp_tabnine" },
providers = {
cmp_tabnine = {
kind = "TabNine",
score_offset = 100,
async = true,
},
},
},
},
},
-- Show TabNine status in lualine -- Show TabNine status in lualine
{ {
"nvim-lualine/lualine.nvim", "nvim-lualine/lualine.nvim",

View file

@ -5,9 +5,6 @@ return {
desc = "Better Yank/Paste", desc = "Better Yank/Paste",
event = "LazyFile", event = "LazyFile",
opts = { opts = {
system_clipboard = {
sync_with_ring = not vim.env.SSH_CONNECTION,
},
highlight = { timer = 150 }, highlight = { timer = 150 },
}, },
keys = { keys = {
@ -16,21 +13,18 @@ return {
function() function()
if LazyVim.pick.picker.name == "telescope" then if LazyVim.pick.picker.name == "telescope" then
require("telescope").extensions.yank_history.yank_history({}) require("telescope").extensions.yank_history.yank_history({})
elseif LazyVim.pick.picker.name == "snacks" then
Snacks.picker.yanky()
else else
vim.cmd([[YankyRingHistory]]) vim.cmd([[YankyRingHistory]])
end end
end, end,
mode = { "n", "x" },
desc = "Open Yank History", desc = "Open Yank History",
}, },
-- stylua: ignore -- stylua: ignore
{ "y", "<Plug>(YankyYank)", mode = { "n", "x" }, desc = "Yank Text" }, { "y", "<Plug>(YankyYank)", mode = { "n", "x" }, desc = "Yank Text" },
{ "p", "<Plug>(YankyPutAfter)", mode = { "n", "x" }, desc = "Put Text After Cursor" }, { "p", "<Plug>(YankyPutAfter)", mode = { "n", "x" }, desc = "Put Yanked Text After Cursor" },
{ "P", "<Plug>(YankyPutBefore)", mode = { "n", "x" }, desc = "Put Text Before Cursor" }, { "P", "<Plug>(YankyPutBefore)", mode = { "n", "x" }, desc = "Put Yanked Text Before Cursor" },
{ "gp", "<Plug>(YankyGPutAfter)", mode = { "n", "x" }, desc = "Put Text After Selection" }, { "gp", "<Plug>(YankyGPutAfter)", mode = { "n", "x" }, desc = "Put Yanked Text After Selection" },
{ "gP", "<Plug>(YankyGPutBefore)", mode = { "n", "x" }, desc = "Put Text Before Selection" }, { "gP", "<Plug>(YankyGPutBefore)", mode = { "n", "x" }, desc = "Put Yanked Text Before Selection" },
{ "[y", "<Plug>(YankyCycleForward)", desc = "Cycle Forward Through Yank History" }, { "[y", "<Plug>(YankyCycleForward)", desc = "Cycle Forward Through Yank History" },
{ "]y", "<Plug>(YankyCycleBackward)", desc = "Cycle Backward Through Yank History" }, { "]y", "<Plug>(YankyCycleBackward)", desc = "Cycle Backward Through Yank History" },
{ "]p", "<Plug>(YankyPutIndentAfterLinewise)", desc = "Put Indented After Cursor (Linewise)" }, { "]p", "<Plug>(YankyPutIndentAfterLinewise)", desc = "Put Indented After Cursor (Linewise)" },

View file

@ -1,17 +1,11 @@
---@param config {type?:string, args?:string[]|fun():string[]?} ---@param config {args?:string[]|fun():string[]?}
local function get_args(config) local function get_args(config)
local args = type(config.args) == "function" and (config.args() or {}) or config.args or {} --[[@as string[] | string ]] local args = type(config.args) == "function" and (config.args() or {}) or config.args or {}
local args_str = type(args) == "table" and table.concat(args, " ") or args --[[@as string]]
config = vim.deepcopy(config) config = vim.deepcopy(config)
---@cast args string[] ---@cast args string[]
config.args = function() config.args = function()
local new_args = vim.fn.expand(vim.fn.input("Run with args: ", args_str)) --[[@as string]] local new_args = vim.fn.input("Run with args: ", table.concat(args, " ")) --[[@as string]]
if config.type and config.type == "java" then return vim.split(vim.fn.expand(new_args) --[[@as string]], " ")
---@diagnostic disable-next-line: return-type-mismatch
return new_args
end
return require("dap.utils").splitstr(new_args)
end end
return config return config
end end
@ -33,9 +27,10 @@ return {
-- stylua: ignore -- stylua: ignore
keys = { keys = {
{ "<leader>d", "", desc = "+debug", mode = {"n", "v"} },
{ "<leader>dB", function() require("dap").set_breakpoint(vim.fn.input('Breakpoint condition: ')) end, desc = "Breakpoint Condition" }, { "<leader>dB", function() require("dap").set_breakpoint(vim.fn.input('Breakpoint condition: ')) end, desc = "Breakpoint Condition" },
{ "<leader>db", function() require("dap").toggle_breakpoint() end, desc = "Toggle Breakpoint" }, { "<leader>db", function() require("dap").toggle_breakpoint() end, desc = "Toggle Breakpoint" },
{ "<leader>dc", function() require("dap").continue() end, desc = "Run/Continue" }, { "<leader>dc", function() require("dap").continue() end, desc = "Continue" },
{ "<leader>da", function() require("dap").continue({ before = get_args }) end, desc = "Run with Args" }, { "<leader>da", function() require("dap").continue({ before = get_args }) end, desc = "Run with Args" },
{ "<leader>dC", function() require("dap").run_to_cursor() end, desc = "Run to Cursor" }, { "<leader>dC", function() require("dap").run_to_cursor() end, desc = "Run to Cursor" },
{ "<leader>dg", function() require("dap").goto_() end, desc = "Go to Line (No Execute)" }, { "<leader>dg", function() require("dap").goto_() end, desc = "Go to Line (No Execute)" },
@ -45,7 +40,7 @@ return {
{ "<leader>dl", function() require("dap").run_last() end, desc = "Run Last" }, { "<leader>dl", function() require("dap").run_last() end, desc = "Run Last" },
{ "<leader>do", function() require("dap").step_out() end, desc = "Step Out" }, { "<leader>do", function() require("dap").step_out() end, desc = "Step Out" },
{ "<leader>dO", function() require("dap").step_over() end, desc = "Step Over" }, { "<leader>dO", function() require("dap").step_over() end, desc = "Step Over" },
{ "<leader>dP", function() require("dap").pause() end, desc = "Pause" }, { "<leader>dp", function() require("dap").pause() end, desc = "Pause" },
{ "<leader>dr", function() require("dap").repl.toggle() end, desc = "Toggle REPL" }, { "<leader>dr", function() require("dap").repl.toggle() end, desc = "Toggle REPL" },
{ "<leader>ds", function() require("dap").session() end, desc = "Session" }, { "<leader>ds", function() require("dap").session() end, desc = "Session" },
{ "<leader>dt", function() require("dap").terminate() end, desc = "Terminate" }, { "<leader>dt", function() require("dap").terminate() end, desc = "Terminate" },
@ -84,7 +79,7 @@ return {
-- stylua: ignore -- stylua: ignore
keys = { keys = {
{ "<leader>du", function() require("dapui").toggle({ }) end, desc = "Dap UI" }, { "<leader>du", function() require("dapui").toggle({ }) end, desc = "Dap UI" },
{ "<leader>de", function() require("dapui").eval() end, desc = "Eval", mode = {"n", "x"} }, { "<leader>de", function() require("dapui").eval() end, desc = "Eval", mode = {"n", "v"} },
}, },
opts = {}, opts = {},
config = function(_, opts) config = function(_, opts)

View file

@ -1,4 +1,6 @@
local M = {} local M = {}
---@type table<string, table<string, string[]>>
M.dials_by_ft = {}
---@param increment boolean ---@param increment boolean
---@param g? boolean ---@param g? boolean
@ -7,7 +9,7 @@ function M.dial(increment, g)
-- Use visual commands for VISUAL 'v', VISUAL LINE 'V' and VISUAL BLOCK '\22' -- Use visual commands for VISUAL 'v', VISUAL LINE 'V' and VISUAL BLOCK '\22'
local is_visual = mode == "v" or mode == "V" or mode == "\22" local is_visual = mode == "v" or mode == "V" or mode == "\22"
local func = (increment and "inc" or "dec") .. (g and "_g" or "_") .. (is_visual and "visual" or "normal") local func = (increment and "inc" or "dec") .. (g and "_g" or "_") .. (is_visual and "visual" or "normal")
local group = vim.g.dials_by_ft[vim.bo.filetype] or "default" local group = M.dials_by_ft[vim.bo.filetype] or "default"
return require("dial.map")[func](group) return require("dial.map")[func](group)
end end
@ -19,8 +21,8 @@ return {
keys = { keys = {
{ "<C-a>", function() return M.dial(true) end, expr = true, desc = "Increment", mode = {"n", "v"} }, { "<C-a>", function() return M.dial(true) end, expr = true, desc = "Increment", mode = {"n", "v"} },
{ "<C-x>", function() return M.dial(false) end, expr = true, desc = "Decrement", mode = {"n", "v"} }, { "<C-x>", function() return M.dial(false) end, expr = true, desc = "Decrement", mode = {"n", "v"} },
{ "g<C-a>", function() return M.dial(true, true) end, expr = true, desc = "Increment", mode = {"n", "x"} }, { "g<C-a>", function() return M.dial(true, true) end, expr = true, desc = "Increment", mode = {"n", "v"} },
{ "g<C-x>", function() return M.dial(false, true) end, expr = true, desc = "Decrement", mode = {"n", "x"} }, { "g<C-x>", function() return M.dial(false, true) end, expr = true, desc = "Decrement", mode = {"n", "v"} },
}, },
opts = function() opts = function()
local augend = require("dial.augend") local augend = require("dial.augend")
@ -53,6 +55,20 @@ return {
cyclic = true, cyclic = true,
}) })
local weekdays = augend.constant.new({
elements = {
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday",
},
word = true,
cyclic = true,
})
local months = augend.constant.new({ local months = augend.constant.new({
elements = { elements = {
"January", "January",
@ -72,44 +88,46 @@ return {
cyclic = true, cyclic = true,
}) })
local capitalized_boolean = augend.constant.new({
elements = {
"True",
"False",
},
word = true,
cyclic = true,
})
return { return {
dials_by_ft = { dials_by_ft = {
css = "css", css = "css",
vue = "vue",
javascript = "typescript", javascript = "typescript",
typescript = "typescript",
typescriptreact = "typescript",
javascriptreact = "typescript", javascriptreact = "typescript",
json = "json", json = "json",
lua = "lua", lua = "lua",
markdown = "markdown", markdown = "markdown",
python = "python",
sass = "css", sass = "css",
scss = "css", scss = "css",
python = "python", typescript = "typescript",
typescriptreact = "typescript",
}, },
groups = { groups = {
default = { default = {
augend.integer.alias.decimal, -- nonnegative decimal number (0, 1, 2, 3, ...) augend.integer.alias.decimal, -- nonnegative decimal number (0, 1, 2, 3, ...)
augend.integer.alias.decimal_int, -- nonnegative and negative decimal number
augend.integer.alias.hex, -- nonnegative hex number (0x01, 0x1a1f, etc.) augend.integer.alias.hex, -- nonnegative hex number (0x01, 0x1a1f, etc.)
augend.date.alias["%Y/%m/%d"], -- date (2022/02/19, etc.) augend.date.alias["%Y/%m/%d"], -- date (2022/02/19, etc.)
augend.constant.alias.en_weekday, -- Mon, Tue, ..., Sat, Sun
augend.constant.alias.en_weekday_full, -- Monday, Tuesday, ..., Saturday, Sunday
ordinal_numbers,
months,
augend.constant.alias.bool, -- boolean value (true <-> false)
augend.constant.alias.Bool, -- boolean value (True <-> False)
logical_alias,
},
vue = {
augend.constant.new({ elements = { "let", "const" } }),
augend.hexcolor.new({ case = "lower" }),
augend.hexcolor.new({ case = "upper" }),
}, },
typescript = { typescript = {
augend.integer.alias.decimal, -- nonnegative and negative decimal number
augend.constant.alias.bool, -- boolean value (true <-> false)
logical_alias,
augend.constant.new({ elements = { "let", "const" } }), augend.constant.new({ elements = { "let", "const" } }),
ordinal_numbers,
weekdays,
months,
}, },
css = { css = {
augend.integer.alias.decimal, -- nonnegative and negative decimal number
augend.hexcolor.new({ augend.hexcolor.new({
case = "lower", case = "lower",
}), }),
@ -118,39 +136,40 @@ return {
}), }),
}, },
markdown = { markdown = {
augend.constant.new({
elements = { "[ ]", "[x]" },
word = false,
cyclic = true,
}),
augend.misc.alias.markdown_header, augend.misc.alias.markdown_header,
ordinal_numbers,
weekdays,
months,
}, },
json = { json = {
augend.integer.alias.decimal, -- nonnegative and negative decimal number
augend.semver.alias.semver, -- versioning (v1.1.2) augend.semver.alias.semver, -- versioning (v1.1.2)
}, },
lua = { lua = {
augend.integer.alias.decimal, -- nonnegative and negative decimal number
augend.constant.alias.bool, -- boolean value (true <-> false)
augend.constant.new({ augend.constant.new({
elements = { "and", "or" }, elements = { "and", "or" },
word = true, -- if false, "sand" is incremented into "sor", "doctor" into "doctand", etc. word = true, -- if false, "sand" is incremented into "sor", "doctor" into "doctand", etc.
cyclic = true, -- "or" is incremented into "and". cyclic = true, -- "or" is incremented into "and".
}), }),
ordinal_numbers,
weekdays,
months,
}, },
python = { python = {
augend.constant.new({ augend.integer.alias.decimal, -- nonnegative and negative decimal number
elements = { "and", "or" }, capitalized_boolean,
}), logical_alias,
ordinal_numbers,
weekdays,
months,
}, },
}, },
} }
end, end,
config = function(_, opts) config = function(_, opts)
-- copy defaults to each group
for name, group in pairs(opts.groups) do
if name ~= "default" then
vim.list_extend(group, opts.groups.default)
end
end
require("dial.config").augends:register_group(opts.groups) require("dial.config").augends:register_group(opts.groups)
vim.g.dials_by_ft = opts.dials_by_ft M.dials_by_ft = opts.dials_by_ft
end, end,
} }

View file

@ -40,21 +40,19 @@ end
return { return {
desc = "Awesome picker for FZF (alternative to Telescope)", desc = "Awesome picker for FZF (alternative to Telescope)",
recommended = true,
{ {
"ibhagwan/fzf-lua", "ibhagwan/fzf-lua",
cmd = "FzfLua", event = "VeryLazy",
opts = function(_, opts) opts = function(_, opts)
local fzf = require("fzf-lua") local config = require("fzf-lua.config")
local config = fzf.config local actions = require("fzf-lua.actions")
local actions = fzf.actions
-- Quickfix -- Quickfix
config.defaults.keymap.fzf["ctrl-q"] = "select-all+accept" config.defaults.keymap.fzf["ctrl-q"] = "select-all+accept"
config.defaults.keymap.fzf["ctrl-u"] = "half-page-up" config.defaults.keymap.fzf["ctrl-u"] = "half-page-up"
config.defaults.keymap.fzf["ctrl-d"] = "half-page-down" config.defaults.keymap.fzf["ctrl-d"] = "half-page-down"
config.defaults.keymap.fzf["ctrl-x"] = "jump" config.defaults.keymap.fzf["ctrl-x"] = "jump"
config.defaults.keymap.fzf["ctrl-f"] = "preview-page-down"
config.defaults.keymap.fzf["ctrl-b"] = "preview-page-up"
config.defaults.keymap.builtin["<c-f>"] = "preview-page-down" config.defaults.keymap.builtin["<c-f>"] = "preview-page-down"
config.defaults.keymap.builtin["<c-b>"] = "preview-page-up" config.defaults.keymap.builtin["<c-b>"] = "preview-page-up"
@ -74,6 +72,18 @@ return {
config.defaults.actions.files["alt-c"] = config.defaults.actions.files["ctrl-r"] config.defaults.actions.files["alt-c"] = config.defaults.actions.files["ctrl-r"]
config.set_action_helpstr(config.defaults.actions.files["ctrl-r"], "toggle-root-dir") config.set_action_helpstr(config.defaults.actions.files["ctrl-r"], "toggle-root-dir")
-- use the same prompt for all
local defaults = require("fzf-lua.profiles.default-title")
local function fix(t)
t.prompt = t.prompt ~= nil and "" or nil
for _, v in pairs(t) do
if type(v) == "table" then
fix(v)
end
end
end
fix(defaults)
local img_previewer ---@type string[]? local img_previewer ---@type string[]?
for _, v in ipairs({ for _, v in ipairs({
{ cmd = "ueberzug", args = {} }, { cmd = "ueberzug", args = {} },
@ -86,8 +96,7 @@ return {
end end
end end
return { return vim.tbl_deep_extend("force", defaults, {
"default-title",
fzf_colors = true, fzf_colors = true,
fzf_opts = { fzf_opts = {
["--no-scrollbar"] = true, ["--no-scrollbar"] = true,
@ -120,9 +129,9 @@ return {
winopts = { winopts = {
layout = "vertical", layout = "vertical",
-- height is number of items minus 15 lines for the preview, with a max of 80% screen height -- height is number of items minus 15 lines for the preview, with a max of 80% screen height
height = math.floor(math.min(vim.o.lines * 0.8 - 16, #items + 4) + 0.5) + 16, height = math.floor(math.min(vim.o.lines * 0.8 - 16, #items + 2) + 0.5) + 16,
width = 0.5, width = 0.5,
preview = not vim.tbl_isempty(vim.lsp.get_clients({ bufnr = 0, name = "vtsls" })) and { preview = not vim.tbl_isempty(LazyVim.lsp.get_clients({ bufnr = 0, name = "vtsls" })) and {
layout = "vertical", layout = "vertical",
vertical = "down:15,border-top", vertical = "down:15,border-top",
hidden = "hidden", hidden = "hidden",
@ -135,7 +144,7 @@ return {
winopts = { winopts = {
width = 0.5, width = 0.5,
-- height is number of items, with a max of 80% screen height -- height is number of items, with a max of 80% screen height
height = math.floor(math.min(vim.o.lines * 0.8, #items + 4) + 0.5), height = math.floor(math.min(vim.o.lines * 0.8, #items + 2) + 0.5),
}, },
}) })
end, end,
@ -175,35 +184,11 @@ return {
previewer = vim.fn.executable("delta") == 1 and "codeaction_native" or nil, previewer = vim.fn.executable("delta") == 1 and "codeaction_native" or nil,
}, },
}, },
} })
end, end,
config = function(_, opts) config = function(_, opts)
if opts[1] == "default-title" then
-- use the same prompt for all pickers for profile `default-title` and
-- profiles that use `default-title` as base profile
local function fix(t)
t.prompt = t.prompt ~= nil and "" or nil
for _, v in pairs(t) do
if type(v) == "table" then
fix(v)
end
end
return t
end
opts = vim.tbl_deep_extend("force", fix(require("fzf-lua.profiles.default-title")), opts)
opts[1] = nil
end
require("fzf-lua").setup(opts) require("fzf-lua").setup(opts)
end, require("fzf-lua").register_ui_select(opts.ui_select or nil)
init = function()
LazyVim.on_very_lazy(function()
vim.ui.select = function(...)
require("lazy").load({ plugins = { "fzf-lua" } })
local opts = LazyVim.opts("fzf-lua") or {}
require("fzf-lua").register_ui_select(opts.ui_select or nil)
return vim.ui.select(...)
end
end)
end, end,
keys = { keys = {
{ "<c-j>", "<c-j>", ft = "fzf", mode = "t", nowait = true }, { "<c-j>", "<c-j>", ft = "fzf", mode = "t", nowait = true },
@ -215,31 +200,26 @@ return {
}, },
{ "<leader>/", LazyVim.pick("live_grep"), desc = "Grep (Root Dir)" }, { "<leader>/", LazyVim.pick("live_grep"), desc = "Grep (Root Dir)" },
{ "<leader>:", "<cmd>FzfLua command_history<cr>", desc = "Command History" }, { "<leader>:", "<cmd>FzfLua command_history<cr>", desc = "Command History" },
{ "<leader><space>", LazyVim.pick("files"), desc = "Find Files (Root Dir)" }, { "<leader><space>", LazyVim.pick("auto"), desc = "Find Files (Root Dir)" },
-- find -- find
{ "<leader>fb", "<cmd>FzfLua buffers sort_mru=true sort_lastused=true<cr>", desc = "Buffers" }, { "<leader>fb", "<cmd>FzfLua buffers sort_mru=true sort_lastused=true<cr>", desc = "Buffers" },
{ "<leader>fB", "<cmd>FzfLua buffers<cr>", desc = "Buffers (all)" },
{ "<leader>fc", LazyVim.pick.config_files(), desc = "Find Config File" }, { "<leader>fc", LazyVim.pick.config_files(), desc = "Find Config File" },
{ "<leader>ff", LazyVim.pick("files"), desc = "Find Files (Root Dir)" }, { "<leader>ff", LazyVim.pick("auto"), desc = "Find Files (Root Dir)" },
{ "<leader>fF", LazyVim.pick("files", { root = false }), desc = "Find Files (cwd)" }, { "<leader>fF", LazyVim.pick("auto", { root = false }), desc = "Find Files (cwd)" },
{ "<leader>fg", "<cmd>FzfLua git_files<cr>", desc = "Find Files (git-files)" }, { "<leader>fg", "<cmd>FzfLua git_files<cr>", desc = "Find Files (git-files)" },
{ "<leader>fr", "<cmd>FzfLua oldfiles<cr>", desc = "Recent" }, { "<leader>fr", "<cmd>FzfLua oldfiles<cr>", desc = "Recent" },
{ "<leader>fR", LazyVim.pick("oldfiles", { cwd = vim.uv.cwd() }), desc = "Recent (cwd)" }, { "<leader>fR", LazyVim.pick("oldfiles", { cwd = vim.uv.cwd() }), desc = "Recent (cwd)" },
-- git -- git
{ "<leader>gc", "<cmd>FzfLua git_commits<CR>", desc = "Commits" }, { "<leader>gc", "<cmd>FzfLua git_commits<CR>", desc = "Commits" },
{ "<leader>gd", "<cmd>FzfLua git_diff<cr>", desc = "Git Diff (files)" },
{ "<leader>gl", "<cmd>FzfLua git_commits<CR>", desc = "Commits" },
{ "<leader>gs", "<cmd>FzfLua git_status<CR>", desc = "Status" }, { "<leader>gs", "<cmd>FzfLua git_status<CR>", desc = "Status" },
{ "<leader>gS", "<cmd>FzfLua git_stash<cr>", desc = "Git Stash" },
-- search -- search
{ '<leader>s"', "<cmd>FzfLua registers<cr>", desc = "Registers" }, { '<leader>s"', "<cmd>FzfLua registers<cr>", desc = "Registers" },
{ "<leader>s/", "<cmd>FzfLua search_history<cr>", desc = "Search History" },
{ "<leader>sa", "<cmd>FzfLua autocmds<cr>", desc = "Auto Commands" }, { "<leader>sa", "<cmd>FzfLua autocmds<cr>", desc = "Auto Commands" },
{ "<leader>sb", "<cmd>FzfLua lines<cr>", desc = "Buffer Lines" }, { "<leader>sb", "<cmd>FzfLua grep_curbuf<cr>", desc = "Buffer" },
{ "<leader>sc", "<cmd>FzfLua command_history<cr>", desc = "Command History" }, { "<leader>sc", "<cmd>FzfLua command_history<cr>", desc = "Command History" },
{ "<leader>sC", "<cmd>FzfLua commands<cr>", desc = "Commands" }, { "<leader>sC", "<cmd>FzfLua commands<cr>", desc = "Commands" },
{ "<leader>sd", "<cmd>FzfLua diagnostics_workspace<cr>", desc = "Diagnostics" }, { "<leader>sd", "<cmd>FzfLua diagnostics_document<cr>", desc = "Document Diagnostics" },
{ "<leader>sD", "<cmd>FzfLua diagnostics_document<cr>", desc = "Buffer Diagnostics" }, { "<leader>sD", "<cmd>FzfLua diagnostics_workspace<cr>", desc = "Workspace Diagnostics" },
{ "<leader>sg", LazyVim.pick("live_grep"), desc = "Grep (Root Dir)" }, { "<leader>sg", LazyVim.pick("live_grep"), desc = "Grep (Root Dir)" },
{ "<leader>sG", LazyVim.pick("live_grep", { root = false }), desc = "Grep (cwd)" }, { "<leader>sG", LazyVim.pick("live_grep", { root = false }), desc = "Grep (cwd)" },
{ "<leader>sh", "<cmd>FzfLua help_tags<cr>", desc = "Help Pages" }, { "<leader>sh", "<cmd>FzfLua help_tags<cr>", desc = "Help Pages" },
@ -253,8 +233,8 @@ return {
{ "<leader>sq", "<cmd>FzfLua quickfix<cr>", desc = "Quickfix List" }, { "<leader>sq", "<cmd>FzfLua quickfix<cr>", desc = "Quickfix List" },
{ "<leader>sw", LazyVim.pick("grep_cword"), desc = "Word (Root Dir)" }, { "<leader>sw", LazyVim.pick("grep_cword"), desc = "Word (Root Dir)" },
{ "<leader>sW", LazyVim.pick("grep_cword", { root = false }), desc = "Word (cwd)" }, { "<leader>sW", LazyVim.pick("grep_cword", { root = false }), desc = "Word (cwd)" },
{ "<leader>sw", LazyVim.pick("grep_visual"), mode = "x", desc = "Selection (Root Dir)" }, { "<leader>sw", LazyVim.pick("grep_visual"), mode = "v", desc = "Selection (Root Dir)" },
{ "<leader>sW", LazyVim.pick("grep_visual", { root = false }), mode = "x", desc = "Selection (cwd)" }, { "<leader>sW", LazyVim.pick("grep_visual", { root = false }), mode = "v", desc = "Selection (cwd)" },
{ "<leader>uC", LazyVim.pick("colorschemes"), desc = "Colorscheme with Preview" }, { "<leader>uC", LazyVim.pick("colorschemes"), desc = "Colorscheme with Preview" },
{ {
"<leader>ss", "<leader>ss",
@ -289,18 +269,15 @@ return {
{ {
"neovim/nvim-lspconfig", "neovim/nvim-lspconfig",
opts = { opts = function()
servers = { local Keys = require("lazyvim.plugins.lsp.keymaps").get()
-- stylua: ignore -- stylua: ignore
["*"] = { vim.list_extend(Keys, {
keys = { { "gd", "<cmd>FzfLua lsp_definitions jump_to_single_result=true ignore_current_line=true<cr>", desc = "Goto Definition", has = "definition" },
{ "gd", "<cmd>FzfLua lsp_definitions jump1=true ignore_current_line=true<cr>", desc = "Goto Definition", has = "definition" }, { "gr", "<cmd>FzfLua lsp_references jump_to_single_result=true ignore_current_line=true<cr>", desc = "References", nowait = true },
{ "gr", "<cmd>FzfLua lsp_references jump1=true ignore_current_line=true<cr>", desc = "References", nowait = true }, { "gI", "<cmd>FzfLua lsp_implementations jump_to_single_result=true ignore_current_line=true<cr>", desc = "Goto Implementation" },
{ "gI", "<cmd>FzfLua lsp_implementations jump1=true ignore_current_line=true<cr>", desc = "Goto Implementation" }, { "gy", "<cmd>FzfLua lsp_typedefs jump_to_single_result=true ignore_current_line=true<cr>", desc = "Goto T[y]pe Definition" },
{ "gy", "<cmd>FzfLua lsp_typedefs jump1=true ignore_current_line=true<cr>", desc = "Goto T[y]pe Definition" }, })
} end,
},
},
},
}, },
} }

View file

@ -28,7 +28,7 @@ return {
}, },
} }
for i = 1, 9 do for i = 1, 5 do
table.insert(keys, { table.insert(keys, {
"<leader>" .. i, "<leader>" .. i,
function() function()

View file

@ -2,9 +2,6 @@
-- This works with LSP, Treesitter, and regexp matching to find the other -- This works with LSP, Treesitter, and regexp matching to find the other
-- instances. -- instances.
return { return {
-- disable snacks words
{ "snacks.nvim", opts = { words = { enabled = false } } },
{ {
"RRethy/vim-illuminate", "RRethy/vim-illuminate",
event = "LazyFile", event = "LazyFile",
@ -18,21 +15,6 @@ return {
config = function(_, opts) config = function(_, opts)
require("illuminate").configure(opts) require("illuminate").configure(opts)
Snacks.toggle({
name = "Illuminate",
get = function()
return not require("illuminate.engine").is_paused()
end,
set = function(enabled)
local m = require("illuminate")
if enabled then
m.resume()
else
m.pause()
end
end,
}):map("<leader>ux")
local function map(key, dir, buffer) local function map(key, dir, buffer)
vim.keymap.set("n", key, function() vim.keymap.set("n", key, function()
require("illuminate")["goto_" .. dir .. "_reference"](false) require("illuminate")["goto_" .. dir .. "_reference"](false)
@ -56,4 +38,8 @@ return {
{ "[[", desc = "Prev Reference" }, { "[[", desc = "Prev Reference" },
}, },
}, },
{
"neovim/nvim-lspconfig",
opts = { document_highlight = { enabled = false } },
},
} }

View file

@ -12,24 +12,19 @@ return {
-- LSP Keymaps -- LSP Keymaps
{ {
"neovim/nvim-lspconfig", "neovim/nvim-lspconfig",
opts = { opts = function()
servers = { local keys = require("lazyvim.plugins.lsp.keymaps").get()
["*"] = { keys[#keys + 1] = {
keys = { "<leader>cr",
{ function()
"<leader>cr", local inc_rename = require("inc_rename")
function() return ":" .. inc_rename.config.cmd_name .. " " .. vim.fn.expand("<cword>")
local inc_rename = require("inc_rename") end,
return ":" .. inc_rename.config.cmd_name .. " " .. vim.fn.expand("<cword>") expr = true,
end, desc = "Rename (inc-rename.nvim)",
expr = true, has = "rename",
desc = "Rename (inc-rename.nvim)", }
has = "rename", end,
},
},
},
},
},
}, },
--- Noice integration --- Noice integration

View file

@ -4,20 +4,20 @@ return {
-- easily jump to any location and enhanced f/t motions for Leap -- easily jump to any location and enhanced f/t motions for Leap
{ {
url = "https://codeberg.org/andyg/leap.nvim.git", "ggandor/flit.nvim",
enabled = true, enabled = true,
keys = function() keys = function()
---@type LazyKeysSpec[] ---@type LazyKeys[]
local ret = {} local ret = {}
for _, key in ipairs({ "f", "F", "t", "T" }) do for _, key in ipairs({ "f", "F", "t", "T" }) do
ret[#ret + 1] = { key, mode = { "n", "x", "o" } } ret[#ret + 1] = { key, mode = { "n", "x", "o" }, desc = key }
end end
return ret return ret
end, end,
opts = { labeled_modes = "nx" }, opts = { labeled_modes = "nx" },
}, },
{ {
url = "https://codeberg.org/andyg/leap.nvim.git", "ggandor/leap.nvim",
enabled = true, enabled = true,
keys = { keys = {
{ "s", mode = { "n", "x", "o" }, desc = "Leap Forward to" }, { "s", mode = { "n", "x", "o" }, desc = "Leap Forward to" },
@ -37,7 +37,7 @@ return {
-- rename surround mappings from gs to gz to prevent conflict with leap -- rename surround mappings from gs to gz to prevent conflict with leap
{ {
"nvim-mini/mini.surround", "echasnovski/mini.surround",
optional = true, optional = true,
opts = { opts = {
mappings = { mappings = {

View file

@ -7,7 +7,7 @@ return {
-- setup mini.diff -- setup mini.diff
{ {
"nvim-mini/mini.diff", "echasnovski/mini.diff",
event = "VeryLazy", event = "VeryLazy",
keys = { keys = {
{ {
@ -29,29 +29,6 @@ return {
}, },
}, },
}, },
{
"mini.diff",
opts = function()
Snacks.toggle({
name = "Mini Diff Signs",
get = function()
return vim.g.minidiff_disable ~= true
end,
set = function(state)
vim.g.minidiff_disable = not state
if state then
require("mini.diff").enable(0)
else
require("mini.diff").disable(0)
end
-- HACK: redraw to update the signs
vim.defer_fn(function()
vim.cmd([[redraw!]])
end, 200)
end,
}):map("<leader>uG")
end,
},
-- lualine integration -- lualine integration
{ {

View file

@ -1,5 +1,5 @@
return { return {
"nvim-mini/mini.files", "echasnovski/mini.files",
opts = { opts = {
windows = { windows = {
preview = true, preview = true,
@ -48,7 +48,7 @@ return {
local map_split = function(buf_id, lhs, direction, close_on_file) local map_split = function(buf_id, lhs, direction, close_on_file)
local rhs = function() local rhs = function()
local new_target_window local new_target_window
local cur_target_window = require("mini.files").get_explorer_state().target_window local cur_target_window = require("mini.files").get_target_window()
if cur_target_window ~= nil then if cur_target_window ~= nil then
vim.api.nvim_win_call(cur_target_window, function() vim.api.nvim_win_call(cur_target_window, function()
vim.cmd("belowright " .. direction .. " split") vim.cmd("belowright " .. direction .. " split")
@ -104,7 +104,7 @@ return {
vim.api.nvim_create_autocmd("User", { vim.api.nvim_create_autocmd("User", {
pattern = "MiniFilesActionRename", pattern = "MiniFilesActionRename",
callback = function(event) callback = function(event)
Snacks.rename.on_rename_file(event.data.from, event.data.to) LazyVim.lsp.on_rename(event.data.from, event.data.to)
end, end,
}) })
end, end,

View file

@ -1,6 +1,6 @@
return { return {
{ {
"nvim-mini/mini.move", "echasnovski/mini.move",
event = "VeryLazy", event = "VeryLazy",
opts = {}, opts = {},
}, },

View file

@ -7,11 +7,13 @@ return {
lazy = true, lazy = true,
init = function() init = function()
vim.g.navic_silence = true vim.g.navic_silence = true
LazyVim.lsp.on_attach(function(client, buffer)
if client.supports_method("textDocument/documentSymbol") then
require("nvim-navic").attach(client, buffer)
end
end)
end, end,
opts = function() opts = function()
Snacks.util.lsp.on({ method = "textDocument/documentSymbol" }, function(buffer, client)
require("nvim-navic").attach(client, buffer)
end)
return { return {
separator = " ", separator = " ",
highlight = true, highlight = true,
@ -28,7 +30,14 @@ return {
optional = true, optional = true,
opts = function(_, opts) opts = function(_, opts)
if not vim.g.trouble_lualine then if not vim.g.trouble_lualine then
table.insert(opts.sections.lualine_c, { "navic", color_correction = "dynamic" }) table.insert(opts.sections.lualine_c, {
function()
return require("nvim-navic").get_location()
end,
cond = function()
return package.loaded["nvim-navic"] and require("nvim-navic").is_available()
end,
})
end end
end, end,
}, },

View file

@ -1,128 +0,0 @@
return {
-- file explorer
{
"nvim-neo-tree/neo-tree.nvim",
cmd = "Neotree",
keys = {
{
"<leader>fe",
function()
require("neo-tree.command").execute({ toggle = true, dir = LazyVim.root() })
end,
desc = "Explorer NeoTree (Root Dir)",
},
{
"<leader>fE",
function()
require("neo-tree.command").execute({ toggle = true, dir = vim.uv.cwd() })
end,
desc = "Explorer NeoTree (cwd)",
},
{ "<leader>e", "<leader>fe", desc = "Explorer NeoTree (Root Dir)", remap = true },
{ "<leader>E", "<leader>fE", desc = "Explorer NeoTree (cwd)", remap = true },
{
"<leader>ge",
function()
require("neo-tree.command").execute({ source = "git_status", toggle = true })
end,
desc = "Git Explorer",
},
{
"<leader>be",
function()
require("neo-tree.command").execute({ source = "buffers", toggle = true })
end,
desc = "Buffer Explorer",
},
},
deactivate = function()
vim.cmd([[Neotree close]])
end,
init = function()
-- FIX: use `autocmd` for lazy-loading neo-tree instead of directly requiring it,
-- because `cwd` is not set up properly.
vim.api.nvim_create_autocmd("BufEnter", {
group = vim.api.nvim_create_augroup("Neotree_start_directory", { clear = true }),
desc = "Start Neo-tree with directory",
once = true,
callback = function()
if package.loaded["neo-tree"] then
return
else
local stats = vim.uv.fs_stat(vim.fn.argv(0))
if stats and stats.type == "directory" then
require("neo-tree")
end
end
end,
})
end,
opts = {
sources = { "filesystem", "buffers", "git_status" },
open_files_do_not_replace_types = { "terminal", "Trouble", "trouble", "qf", "Outline" },
filesystem = {
bind_to_cwd = false,
follow_current_file = { enabled = true },
use_libuv_file_watcher = true,
},
window = {
mappings = {
["l"] = "open",
["h"] = "close_node",
["<space>"] = "none",
["Y"] = {
function(state)
local node = state.tree:get_node()
local path = node:get_id()
vim.fn.setreg("+", path, "c")
end,
desc = "Copy Path to Clipboard",
},
["O"] = {
function(state)
require("lazy.util").open(state.tree:get_node().path, { system = true })
end,
desc = "Open with System Application",
},
["P"] = { "toggle_preview", config = { use_float = false } },
},
},
default_component_configs = {
indent = {
with_expanders = true, -- if nil and file nesting is enabled, will enable expanders
expander_collapsed = "",
expander_expanded = "",
expander_highlight = "NeoTreeExpander",
},
git_status = {
symbols = {
unstaged = "󰄱",
staged = "󰱒",
},
},
},
},
config = function(_, opts)
local function on_move(data)
Snacks.rename.on_rename_file(data.source, data.destination)
end
local events = require("neo-tree.events")
opts.event_handlers = opts.event_handlers or {}
vim.list_extend(opts.event_handlers, {
{ event = events.FILE_MOVED, handler = on_move },
{ event = events.FILE_RENAMED, handler = on_move },
})
require("neo-tree").setup(opts)
vim.api.nvim_create_autocmd("TermClose", {
pattern = "*lazygit",
callback = function()
if package.loaded["neo-tree.sources.git_status"] then
require("neo-tree.sources.git_status").refresh()
end
end,
})
end,
},
}

View file

@ -14,21 +14,28 @@ return {
opts = function() opts = function()
local defaults = require("outline.config").defaults local defaults = require("outline.config").defaults
local opts = { local opts = {
symbols = { symbols = {},
icons = {}, symbol_blacklist = {},
filter = vim.deepcopy(LazyVim.config.kind_filter),
},
keymaps = { keymaps = {
up_and_jump = "<up>", up_and_jump = "<up>",
down_and_jump = "<down>", down_and_jump = "<down>",
}, },
} }
local filter = LazyVim.config.kind_filter
for kind, symbol in pairs(defaults.symbols.icons) do if type(filter) == "table" then
opts.symbols.icons[kind] = { filter = filter.default
icon = LazyVim.config.icons.kinds[kind] or symbol.icon, if type(filter) == "table" then
hl = symbol.hl, for kind, symbol in pairs(defaults.symbols) do
} opts.symbols[kind] = {
icon = LazyVim.config.icons.kinds[kind] or symbol.icon,
hl = symbol.hl,
}
if not vim.tbl_contains(filter, kind) then
table.insert(opts.symbol_blacklist, kind)
end
end
end
end end
return opts return opts
end, end,

View file

@ -8,20 +8,29 @@ return {
}, },
{ {
"stevearc/overseer.nvim", "stevearc/overseer.nvim",
lazy = false, -- plugin is self-lazy-loading
cmd = { cmd = {
"OverseerOpen", "OverseerOpen",
"OverseerClose", "OverseerClose",
"OverseerToggle", "OverseerToggle",
"OverseerSaveBundle",
"OverseerLoadBundle",
"OverseerDeleteBundle",
"OverseerRunCmd",
"OverseerRun", "OverseerRun",
"OverseerInfo",
"OverseerBuild",
"OverseerQuickAction",
"OverseerTaskAction", "OverseerTaskAction",
"OverseerClearCache",
}, },
opts = { opts = {
dap = false, dap = false,
task_list = { task_list = {
keymaps = { bindings = {
["<C-h>"] = false,
["<C-j>"] = false, ["<C-j>"] = false,
["<C-k>"] = false, ["<C-k>"] = false,
["<C-l>"] = false,
}, },
}, },
form = { form = {
@ -29,6 +38,11 @@ return {
winblend = 0, winblend = 0,
}, },
}, },
confirm = {
win_opts = {
winblend = 0,
},
},
task_win = { task_win = {
win_opts = { win_opts = {
winblend = 0, winblend = 0,
@ -37,18 +51,20 @@ return {
}, },
-- stylua: ignore -- stylua: ignore
keys = { keys = {
{ "<leader>ow", "<cmd>OverseerToggle!<cr>", desc = "Task list" }, { "<leader>ow", "<cmd>OverseerToggle<cr>", desc = "Task list" },
{ "<leader>oo", "<cmd>OverseerRun<cr>", desc = "Run task" }, { "<leader>oo", "<cmd>OverseerRun<cr>", desc = "Run task" },
{ "<leader>ot", "<cmd>OverseerTaskAction<cr>", desc = "Task action" }, { "<leader>oq", "<cmd>OverseerQuickAction<cr>", desc = "Action recent task" },
{ "<leader>oi", "<cmd>OverseerInfo<cr>", desc = "Overseer Info" },
{ "<leader>ob", "<cmd>OverseerBuild<cr>", desc = "Task builder" },
{ "<leader>ot", "<cmd>OverseerTaskAction<cr>", desc = "Task action" },
{ "<leader>oc", "<cmd>OverseerClearCache<cr>", desc = "Clear cache" },
}, },
}, },
{ {
"folke/which-key.nvim", "folke/which-key.nvim",
optional = true, optional = true,
opts = { opts = {
spec = { defaults = { ["<leader>o"] = { name = "+overseer" } },
{ "<leader>o", group = "overseer" },
},
}, },
}, },
{ {

View file

@ -1,88 +1,147 @@
if LazyVim.has_extra("editor.refactoring") then local pick = function()
if vim.fn.has("nvim-0.12") == 0 then if LazyVim.pick.picker.name == "telescope" then
LazyVim.error("refactoring.nvim requires Neovim 0.12 or higher", { title = "refactoring.nvim" }) return require("telescope").extensions.refactoring.refactors()
return {} elseif LazyVim.pick.picker.name == "fzf" then
local fzf_lua = require("fzf-lua")
local results = require("refactoring").get_refactors()
local refactoring = require("refactoring")
local opts = {
fzf_opts = {},
fzf_colors = true,
actions = {
["default"] = function(selected)
refactoring.refactor(selected[1])
end,
},
}
fzf_lua.fzf_exec(results, opts)
end end
end end
return { return {
{ "lewis6991/async.nvim", lazy = true },
{ {
"ThePrimeagen/refactoring.nvim", "ThePrimeagen/refactoring.nvim",
event = { "BufReadPre", "BufNewFile" }, event = { "BufReadPre", "BufNewFile" },
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-treesitter/nvim-treesitter",
},
keys = { keys = {
{ "<leader>r", "", desc = "+refactor", mode = { "n", "x" } }, { "<leader>r", "", desc = "+refactor", mode = { "n", "v" } },
{ {
"<leader>rs", "<leader>rs",
function() pick,
return require("refactoring").select_refactor() mode = "v",
end, desc = "Refactor",
mode = { "n", "x" },
desc = "Select Refactor",
}, },
{ {
"<leader>ri", "<leader>ri",
function() function()
return require("refactoring").inline_var() require("refactoring").refactor("Inline Variable")
end, end,
mode = { "n", "x" }, mode = { "n", "v" },
desc = "Inline Variable", desc = "Inline Variable",
expr = true,
}, },
{ {
"<leader>rP", "<leader>rb",
function() function()
return require("refactoring.debug").print_loc({ output_location = "below" }) require("refactoring").refactor("Extract Block")
end, end,
desc = "Debug Print Location", desc = "Extract Block",
expr = true,
},
{
"<leader>rp",
function()
return require("refactoring.debug").print_var({ output_location = "below" }) .. "iw"
end,
mode = { "n", "x" },
desc = "Debug Print Variable",
expr = true,
},
{
"<leader>rc",
function()
return require("refactoring.debug").cleanup({ restore_view = true }) .. "ag"
end,
desc = "Debug Cleanup",
expr = true,
}, },
{ {
"<leader>rf", "<leader>rf",
function() function()
return require("refactoring").extract_func() require("refactoring").refactor("Extract Block To File")
end, end,
mode = { "n", "x" }, desc = "Extract Block To File",
},
{
"<leader>rP",
function()
require("refactoring").debug.printf({ below = false })
end,
desc = "Debug Print",
},
{
"<leader>rp",
function()
require("refactoring").debug.print_var({ normal = true })
end,
desc = "Debug Print Variable",
},
{
"<leader>rc",
function()
require("refactoring").debug.cleanup({})
end,
desc = "Debug Cleanup",
},
{
"<leader>rf",
function()
require("refactoring").refactor("Extract Function")
end,
mode = "v",
desc = "Extract Function", desc = "Extract Function",
expr = true,
}, },
{ {
"<leader>rF", "<leader>rF",
function() function()
return require("refactoring").extract_func_to_file() require("refactoring").refactor("Extract Function To File")
end, end,
mode = { "n", "x" }, mode = "v",
desc = "Extract Function To File", desc = "Extract Function To File",
expr = true,
}, },
{ {
"<leader>rx", "<leader>rx",
function() function()
return require("refactoring").extract_var() require("refactoring").refactor("Extract Variable")
end, end,
mode = { "n", "x" }, mode = "v",
desc = "Extract Variable", desc = "Extract Variable",
expr = true, },
{
"<leader>rp",
function()
require("refactoring").debug.print_var()
end,
mode = "v",
desc = "Debug Print Variable",
}, },
}, },
opts = {}, opts = {
prompt_func_return_type = {
go = false,
java = false,
cpp = false,
c = false,
h = false,
hpp = false,
cxx = false,
},
prompt_func_param_type = {
go = false,
java = false,
cpp = false,
c = false,
h = false,
hpp = false,
cxx = false,
},
printf_statements = {},
print_var_statements = {},
show_success_message = true, -- shows a message with information about the refactor on success
-- i.e. [Refactor] Inlined 3 variable occurrences
},
config = function(_, opts)
require("refactoring").setup(opts)
if LazyVim.has("telescope.nvim") then
LazyVim.on_load("telescope.nvim", function()
require("telescope").load_extension("refactoring")
end)
end
end,
}, },
} }

View file

@ -1,24 +0,0 @@
return {
desc = "Snacks File Explorer",
recommended = true,
"folke/snacks.nvim",
opts = { explorer = {} },
keys = {
{
"<leader>fe",
function()
Snacks.explorer({ cwd = LazyVim.root() })
end,
desc = "Explorer Snacks (root dir)",
},
{
"<leader>fE",
function()
Snacks.explorer()
end,
desc = "Explorer Snacks (cwd)",
},
{ "<leader>e", "<leader>fe", desc = "Explorer Snacks (root dir)", remap = true },
{ "<leader>E", "<leader>fE", desc = "Explorer Snacks (cwd)", remap = true },
},
}

View file

@ -1,265 +0,0 @@
if lazyvim_docs then
-- In case you don't want to use `:LazyExtras`,
-- then you need to set the option below.
vim.g.lazyvim_picker = "snacks"
end
---@module 'snacks'
---@type LazyPicker
local picker = {
name = "snacks",
commands = {
files = "files",
live_grep = "grep",
oldfiles = "recent",
},
---@param source string
---@param opts? snacks.picker.Config
open = function(source, opts)
return Snacks.picker.pick(source, opts)
end,
}
if not LazyVim.pick.register(picker) then
return {}
end
return {
desc = "Fast and modern file picker",
recommended = true,
{
"folke/snacks.nvim",
opts = {
picker = {
win = {
input = {
keys = {
["<a-c>"] = {
"toggle_cwd",
mode = { "n", "i" },
},
},
},
},
actions = {
---@param p snacks.Picker
toggle_cwd = function(p)
local root = LazyVim.root({ buf = p.input.filter.current_buf, normalize = true })
local cwd = vim.fs.normalize((vim.uv or vim.loop).cwd() or ".")
local current = p:cwd()
p:set_cwd(current == root and cwd or root)
p:find()
end,
},
},
},
-- stylua: ignore
keys = {
{ "<leader>,", function() Snacks.picker.buffers() end, desc = "Buffers" },
{ "<leader>/", LazyVim.pick("grep"), desc = "Grep (Root Dir)" },
{ "<leader>:", function() Snacks.picker.command_history() end, desc = "Command History" },
{ "<leader><space>", LazyVim.pick("files"), desc = "Find Files (Root Dir)" },
{ "<leader>n", function() Snacks.picker.notifications() end, desc = "Notification History" },
-- find
{ "<leader>fb", function() Snacks.picker.buffers() end, desc = "Buffers" },
{ "<leader>fB", function() Snacks.picker.buffers({ hidden = true, nofile = true }) end, desc = "Buffers (all)" },
{ "<leader>fc", LazyVim.pick.config_files(), desc = "Find Config File" },
{ "<leader>ff", LazyVim.pick("files"), desc = "Find Files (Root Dir)" },
{ "<leader>fF", LazyVim.pick("files", { root = false }), desc = "Find Files (cwd)" },
{ "<leader>fg", function() Snacks.picker.git_files() end, desc = "Find Files (git-files)" },
{ "<leader>fr", LazyVim.pick("oldfiles"), desc = "Recent" },
{ "<leader>fR", function() Snacks.picker.recent({ filter = { cwd = true }}) end, desc = "Recent (cwd)" },
{ "<leader>fp", function() Snacks.picker.projects() end, desc = "Projects" },
-- git
{ "<leader>gd", function() Snacks.picker.git_diff() end, desc = "Git Diff (hunks)" },
{ "<leader>gD", function() Snacks.picker.git_diff({ base = "origin", group = true }) end, desc = "Git Diff (origin)" },
{ "<leader>gs", function() Snacks.picker.git_status() end, desc = "Git Status" },
{ "<leader>gS", function() Snacks.picker.git_stash() end, desc = "Git Stash" },
{ "<leader>gi", function() Snacks.picker.gh_issue() end, desc = "GitHub Issues (open)" },
{ "<leader>gI", function() Snacks.picker.gh_issue({ state = "all" }) end, desc = "GitHub Issues (all)" },
{ "<leader>gp", function() Snacks.picker.gh_pr() end, desc = "GitHub Pull Requests (open)" },
{ "<leader>gP", function() Snacks.picker.gh_pr({ state = "all" }) end, desc = "GitHub Pull Requests (all)" },
-- Grep
{ "<leader>sb", function() Snacks.picker.lines() end, desc = "Buffer Lines" },
{ "<leader>sB", function() Snacks.picker.grep_buffers() end, desc = "Grep Open Buffers" },
{ "<leader>sg", LazyVim.pick("live_grep"), desc = "Grep (Root Dir)" },
{ "<leader>sG", LazyVim.pick("live_grep", { root = false }), desc = "Grep (cwd)" },
{ "<leader>sp", function() Snacks.picker.lazy() end, desc = "Search for Plugin Spec" },
{ "<leader>sw", LazyVim.pick("grep_word"), desc = "Visual selection or word (Root Dir)", mode = { "n", "x" } },
{ "<leader>sW", LazyVim.pick("grep_word", { root = false }), desc = "Visual selection or word (cwd)", mode = { "n", "x" } },
-- search
{ '<leader>s"', function() Snacks.picker.registers() end, desc = "Registers" },
{ '<leader>s/', function() Snacks.picker.search_history() end, desc = "Search History" },
{ "<leader>sa", function() Snacks.picker.autocmds() end, desc = "Autocmds" },
{ "<leader>sc", function() Snacks.picker.command_history() end, desc = "Command History" },
{ "<leader>sC", function() Snacks.picker.commands() end, desc = "Commands" },
{ "<leader>sd", function() Snacks.picker.diagnostics() end, desc = "Diagnostics" },
{ "<leader>sD", function() Snacks.picker.diagnostics_buffer() end, desc = "Buffer Diagnostics" },
{ "<leader>sh", function() Snacks.picker.help() end, desc = "Help Pages" },
{ "<leader>sH", function() Snacks.picker.highlights() end, desc = "Highlights" },
{ "<leader>si", function() Snacks.picker.icons() end, desc = "Icons" },
{ "<leader>sj", function() Snacks.picker.jumps() end, desc = "Jumps" },
{ "<leader>sk", function() Snacks.picker.keymaps() end, desc = "Keymaps" },
{ "<leader>sl", function() Snacks.picker.loclist() end, desc = "Location List" },
{ "<leader>sM", function() Snacks.picker.man() end, desc = "Man Pages" },
{ "<leader>sm", function() Snacks.picker.marks() end, desc = "Marks" },
{ "<leader>sR", function() Snacks.picker.resume() end, desc = "Resume" },
{ "<leader>sq", function() Snacks.picker.qflist() end, desc = "Quickfix List" },
{ "<leader>su", function() Snacks.picker.undo() end, desc = "Undotree" },
-- ui
{ "<leader>uC", function() Snacks.picker.colorschemes() end, desc = "Colorschemes" },
},
},
{
"folke/snacks.nvim",
opts = function(_, opts)
if LazyVim.has("trouble.nvim") then
return vim.tbl_deep_extend("force", opts or {}, {
picker = {
actions = {
trouble_open = function(...)
return require("trouble.sources.snacks").actions.trouble_open.action(...)
end,
},
win = {
input = {
keys = {
["<a-t>"] = {
"trouble_open",
mode = { "n", "i" },
},
},
},
},
},
})
end
end,
},
{
"neovim/nvim-lspconfig",
opts = {
servers = {
["*"] = {
-- stylua: ignore
keys = {
{ "gd", function() Snacks.picker.lsp_definitions() end, desc = "Goto Definition", has = "definition" },
{ "gr", function() Snacks.picker.lsp_references() end, nowait = true, desc = "References" },
{ "gI", function() Snacks.picker.lsp_implementations() end, desc = "Goto Implementation" },
{ "gy", function() Snacks.picker.lsp_type_definitions() end, desc = "Goto T[y]pe Definition" },
{ "<leader>ss", function() Snacks.picker.lsp_symbols({ filter = LazyVim.config.kind_filter }) end, desc = "LSP Symbols", has = "documentSymbol" },
{ "<leader>sS", function() Snacks.picker.lsp_workspace_symbols({ filter = LazyVim.config.kind_filter }) end, desc = "LSP Workspace Symbols", has = "workspace/symbols" },
{ "gai", function() Snacks.picker.lsp_incoming_calls() end, desc = "C[a]lls Incoming", has = "callHierarchy/incomingCalls" },
{ "gao", function() Snacks.picker.lsp_outgoing_calls() end, desc = "C[a]lls Outgoing", has = "callHierarchy/outgoingCalls" },
},
},
},
},
},
{
"folke/todo-comments.nvim",
optional = true,
-- stylua: ignore
keys = {
{ "<leader>st", function() Snacks.picker.todo_comments() end, desc = "Todo" },
{ "<leader>sT", function () Snacks.picker.todo_comments({ keywords = { "TODO", "FIX", "FIXME" } }) end, desc = "Todo/Fix/Fixme" },
},
},
{
"folke/snacks.nvim",
opts = function(_, opts)
table.insert(opts.dashboard.preset.keys, 3, {
icon = "",
key = "p",
desc = "Projects",
action = ":lua Snacks.picker.projects()",
})
end,
},
{
"goolord/alpha-nvim",
optional = true,
opts = function(_, dashboard)
local button = dashboard.button("p", "" .. " Projects", [[<cmd> lua Snacks.picker.projects() <cr>]])
button.opts.hl = "AlphaButtons"
button.opts.hl_shortcut = "AlphaShortcut"
table.insert(dashboard.section.buttons.val, 4, button)
end,
},
{
"nvim-mini/mini.starter",
optional = true,
opts = function(_, opts)
local items = {
{
name = "Projects",
action = [[lua Snacks.picker.projects()]],
section = string.rep(" ", 22) .. "Telescope",
},
}
vim.list_extend(opts.items, items)
end,
},
{
"nvimdev/dashboard-nvim",
optional = true,
opts = function(_, opts)
if not vim.tbl_get(opts, "config", "center") then
return
end
local projects = {
action = "lua Snacks.picker.projects()",
desc = " Projects",
icon = "",
key = "p",
}
projects.desc = projects.desc .. string.rep(" ", 43 - #projects.desc)
projects.key_format = " %s"
table.insert(opts.config.center, 3, projects)
end,
},
{
"folke/flash.nvim",
optional = true,
specs = {
{
"folke/snacks.nvim",
opts = {
picker = {
win = {
input = {
keys = {
["<a-s>"] = { "flash", mode = { "n", "i" } },
["s"] = { "flash" },
},
},
},
actions = {
flash = function(picker)
require("flash").jump({
pattern = "^",
label = { after = { 0, 0 } },
search = {
mode = "search",
exclude = {
function(win)
return vim.bo[vim.api.nvim_win_get_buf(win)].filetype ~= "snacks_picker_list"
end,
},
},
action = function(match)
local idx = picker.list:row2idx(match.pos[1])
picker.list:_move(idx, true, true)
end,
})
end,
},
},
},
},
},
},
}

View file

@ -4,13 +4,8 @@ if lazyvim_docs then
vim.g.lazyvim_picker = "telescope" vim.g.lazyvim_picker = "telescope"
end end
local build_cmd ---@type string? local have_make = vim.fn.executable("make") == 1
for _, cmd in ipairs({ "make", "cmake", "gmake" }) do local have_cmake = vim.fn.executable("cmake") == 1
if vim.fn.executable(cmd) == 1 then
build_cmd = cmd
break
end
end
---@type LazyPicker ---@type LazyPicker
local picker = { local picker = {
@ -61,13 +56,16 @@ return {
{ {
"nvim-telescope/telescope.nvim", "nvim-telescope/telescope.nvim",
cmd = "Telescope", cmd = "Telescope",
enabled = function()
return LazyVim.pick.want() == "telescope"
end,
version = false, -- telescope did only one release, so use HEAD for now version = false, -- telescope did only one release, so use HEAD for now
dependencies = { dependencies = {
{ {
"nvim-telescope/telescope-fzf-native.nvim", "nvim-telescope/telescope-fzf-native.nvim",
build = (build_cmd ~= "cmake") and "make" build = have_make and "make"
or "cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build", or "cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build",
enabled = build_cmd ~= nil, enabled = have_make or have_cmake,
config = function(plugin) config = function(plugin)
LazyVim.on_load("telescope.nvim", function() LazyVim.on_load("telescope.nvim", function()
local ok, err = pcall(require("telescope").load_extension, "fzf") local ok, err = pcall(require("telescope").load_extension, "fzf")
@ -94,34 +92,26 @@ return {
}, },
{ "<leader>/", LazyVim.pick("live_grep"), desc = "Grep (Root Dir)" }, { "<leader>/", LazyVim.pick("live_grep"), desc = "Grep (Root Dir)" },
{ "<leader>:", "<cmd>Telescope command_history<cr>", desc = "Command History" }, { "<leader>:", "<cmd>Telescope command_history<cr>", desc = "Command History" },
{ "<leader><space>", LazyVim.pick("files"), desc = "Find Files (Root Dir)" }, { "<leader><space>", LazyVim.pick("auto"), desc = "Find Files (Root Dir)" },
-- find -- find
{ { "<leader>fb", "<cmd>Telescope buffers sort_mru=true sort_lastused=true<cr>", desc = "Buffers" },
"<leader>fb",
"<cmd>Telescope buffers sort_mru=true sort_lastused=true ignore_current_buffer=true<cr>",
desc = "Buffers",
},
{ "<leader>fB", "<cmd>Telescope buffers<cr>", desc = "Buffers (all)" },
{ "<leader>fc", LazyVim.pick.config_files(), desc = "Find Config File" }, { "<leader>fc", LazyVim.pick.config_files(), desc = "Find Config File" },
{ "<leader>ff", LazyVim.pick("files"), desc = "Find Files (Root Dir)" }, { "<leader>ff", LazyVim.pick("auto"), desc = "Find Files (Root Dir)" },
{ "<leader>fF", LazyVim.pick("files", { root = false }), desc = "Find Files (cwd)" }, { "<leader>fF", LazyVim.pick("auto", { root = false }), desc = "Find Files (cwd)" },
{ "<leader>fg", "<cmd>Telescope git_files<cr>", desc = "Find Files (git-files)" }, { "<leader>fg", "<cmd>Telescope git_files<cr>", desc = "Find Files (git-files)" },
{ "<leader>fr", "<cmd>Telescope oldfiles<cr>", desc = "Recent" }, { "<leader>fr", "<cmd>Telescope oldfiles<cr>", desc = "Recent" },
{ "<leader>fR", LazyVim.pick("oldfiles", { cwd = vim.uv.cwd() }), desc = "Recent (cwd)" }, { "<leader>fR", LazyVim.pick("oldfiles", { cwd = vim.uv.cwd() }), desc = "Recent (cwd)" },
-- git -- git
{ "<leader>gc", "<cmd>Telescope git_commits<CR>", desc = "Commits" }, { "<leader>gc", "<cmd>Telescope git_commits<CR>", desc = "Commits" },
{ "<leader>gl", "<cmd>Telescope git_commits<CR>", desc = "Commits" },
{ "<leader>gs", "<cmd>Telescope git_status<CR>", desc = "Status" }, { "<leader>gs", "<cmd>Telescope git_status<CR>", desc = "Status" },
{ "<leader>gS", "<cmd>Telescope git_stash<cr>", desc = "Git Stash" },
-- search -- search
{ '<leader>s"', "<cmd>Telescope registers<cr>", desc = "Registers" }, { '<leader>s"', "<cmd>Telescope registers<cr>", desc = "Registers" },
{ "<leader>s/", "<cmd>Telescope search_history<cr>", desc = "Search History" },
{ "<leader>sa", "<cmd>Telescope autocommands<cr>", desc = "Auto Commands" }, { "<leader>sa", "<cmd>Telescope autocommands<cr>", desc = "Auto Commands" },
{ "<leader>sb", "<cmd>Telescope current_buffer_fuzzy_find<cr>", desc = "Buffer Lines" }, { "<leader>sb", "<cmd>Telescope current_buffer_fuzzy_find<cr>", desc = "Buffer" },
{ "<leader>sc", "<cmd>Telescope command_history<cr>", desc = "Command History" }, { "<leader>sc", "<cmd>Telescope command_history<cr>", desc = "Command History" },
{ "<leader>sC", "<cmd>Telescope commands<cr>", desc = "Commands" }, { "<leader>sC", "<cmd>Telescope commands<cr>", desc = "Commands" },
{ "<leader>sd", "<cmd>Telescope diagnostics<cr>", desc = "Diagnostics" }, { "<leader>sd", "<cmd>Telescope diagnostics bufnr=0<cr>", desc = "Document Diagnostics" },
{ "<leader>sD", "<cmd>Telescope diagnostics bufnr=0<cr>", desc = "Buffer Diagnostics" }, { "<leader>sD", "<cmd>Telescope diagnostics<cr>", desc = "Workspace Diagnostics" },
{ "<leader>sg", LazyVim.pick("live_grep"), desc = "Grep (Root Dir)" }, { "<leader>sg", LazyVim.pick("live_grep"), desc = "Grep (Root Dir)" },
{ "<leader>sG", LazyVim.pick("live_grep", { root = false }), desc = "Grep (cwd)" }, { "<leader>sG", LazyVim.pick("live_grep", { root = false }), desc = "Grep (cwd)" },
{ "<leader>sh", "<cmd>Telescope help_tags<cr>", desc = "Help Pages" }, { "<leader>sh", "<cmd>Telescope help_tags<cr>", desc = "Help Pages" },
@ -136,8 +126,8 @@ return {
{ "<leader>sq", "<cmd>Telescope quickfix<cr>", desc = "Quickfix List" }, { "<leader>sq", "<cmd>Telescope quickfix<cr>", desc = "Quickfix List" },
{ "<leader>sw", LazyVim.pick("grep_string", { word_match = "-w" }), desc = "Word (Root Dir)" }, { "<leader>sw", LazyVim.pick("grep_string", { word_match = "-w" }), desc = "Word (Root Dir)" },
{ "<leader>sW", LazyVim.pick("grep_string", { root = false, word_match = "-w" }), desc = "Word (cwd)" }, { "<leader>sW", LazyVim.pick("grep_string", { root = false, word_match = "-w" }), desc = "Word (cwd)" },
{ "<leader>sw", LazyVim.pick("grep_string"), mode = "x", desc = "Selection (Root Dir)" }, { "<leader>sw", LazyVim.pick("grep_string"), mode = "v", desc = "Selection (Root Dir)" },
{ "<leader>sW", LazyVim.pick("grep_string", { root = false }), mode = "x", desc = "Selection (cwd)" }, { "<leader>sW", LazyVim.pick("grep_string", { root = false }), mode = "v", desc = "Selection (cwd)" },
{ "<leader>uC", LazyVim.pick("colorscheme", { enable_preview = true }), desc = "Colorscheme with Preview" }, { "<leader>uC", LazyVim.pick("colorscheme", { enable_preview = true }), desc = "Colorscheme with Preview" },
{ {
"<leader>ss", "<leader>ss",
@ -175,20 +165,6 @@ return {
LazyVim.pick("find_files", { hidden = true, default_text = line })() LazyVim.pick("find_files", { hidden = true, default_text = line })()
end end
local function find_command()
if 1 == vim.fn.executable("rg") then
return { "rg", "--files", "--color", "never", "-g", "!.git" }
elseif 1 == vim.fn.executable("fd") then
return { "fd", "--type", "f", "--color", "never", "-E", ".git" }
elseif 1 == vim.fn.executable("fdfind") then
return { "fdfind", "--type", "f", "--color", "never", "-E", ".git" }
elseif 1 == vim.fn.executable("find") and vim.fn.has("win32") == 0 then
return { "find", ".", "-type", "f" }
elseif 1 == vim.fn.executable("where") then
return { "where", "/r", ".", "*" }
end
end
return { return {
defaults = { defaults = {
prompt_prefix = "", prompt_prefix = "",
@ -222,12 +198,6 @@ return {
}, },
}, },
}, },
pickers = {
find_files = {
find_command = find_command,
hidden = true,
},
},
} }
end, end,
}, },
@ -268,6 +238,9 @@ return {
{ {
"stevearc/dressing.nvim", "stevearc/dressing.nvim",
lazy = true, lazy = true,
enabled = function()
return LazyVim.pick.want() == "telescope"
end,
init = function() init = function()
---@diagnostic disable-next-line: duplicate-set-field ---@diagnostic disable-next-line: duplicate-set-field
vim.ui.select = function(...) vim.ui.select = function(...)
@ -284,18 +257,18 @@ return {
{ {
"neovim/nvim-lspconfig", "neovim/nvim-lspconfig",
opts = { opts = function()
servers = { if LazyVim.pick.want() ~= "telescope" then
["*"] = { return
-- stylua: ignore end
keys = { local Keys = require("lazyvim.plugins.lsp.keymaps").get()
{ "gd", function() require("telescope.builtin").lsp_definitions({ reuse_win = true }) end, desc = "Goto Definition", has = "definition" }, -- stylua: ignore
{ "gr", "<cmd>Telescope lsp_references<cr>", desc = "References", nowait = true }, vim.list_extend(Keys, {
{ "gI", function() require("telescope.builtin").lsp_implementations({ reuse_win = true }) end, desc = "Goto Implementation" }, { "gd", function() require("telescope.builtin").lsp_definitions({ reuse_win = true }) end, desc = "Goto Definition", has = "definition" },
{ "gy", function() require("telescope.builtin").lsp_type_definitions({ reuse_win = true }) end, desc = "Goto T[y]pe Definition" }, { "gr", "<cmd>Telescope lsp_references<cr>", desc = "References", nowait = true },
}, { "gI", function() require("telescope.builtin").lsp_implementations({ reuse_win = true }) end, desc = "Goto Implementation" },
}, { "gy", function() require("telescope.builtin").lsp_type_definitions({ reuse_win = true }) end, desc = "Goto T[y]pe Definition" },
}, })
}, end,
}, },
} }

View file

@ -1,6 +1,6 @@
return { return {
{ {
"mason-org/mason.nvim", "williamboman/mason.nvim",
opts = function(_, opts) opts = function(_, opts)
table.insert(opts.ensure_installed, "black") table.insert(opts.ensure_installed, "black")
end, end,

View file

@ -58,7 +58,7 @@ M.has_parser = LazyVim.memoize(M.has_parser)
return { return {
{ {
"mason-org/mason.nvim", "williamboman/mason.nvim",
opts = { ensure_installed = { "prettier" } }, opts = { ensure_installed = { "prettier" } },
}, },
@ -70,8 +70,7 @@ return {
opts = function(_, opts) opts = function(_, opts)
opts.formatters_by_ft = opts.formatters_by_ft or {} opts.formatters_by_ft = opts.formatters_by_ft or {}
for _, ft in ipairs(supported) do for _, ft in ipairs(supported) do
opts.formatters_by_ft[ft] = opts.formatters_by_ft[ft] or {} opts.formatters_by_ft[ft] = { "prettier" }
table.insert(opts.formatters_by_ft[ft], "prettier")
end end
opts.formatters = opts.formatters or {} opts.formatters = opts.formatters or {}

View file

@ -35,10 +35,10 @@ return {
}, },
setup = { setup = {
angularls = function() angularls = function()
Snacks.util.lsp.on({ name = "angularls" }, function(_, client) LazyVim.lsp.on_attach(function(client)
--HACK: disable angular renaming capability due to duplicate rename popping up --HACK: disable angular renaming capability due to duplicate rename popping up
client.server_capabilities.renameProvider = false client.server_capabilities.renameProvider = false
end) end, "angularls")
end, end,
}, },
}, },
@ -57,15 +57,4 @@ return {
}) })
end, end,
}, },
-- formatting
{
"conform.nvim",
opts = function(_, opts)
if LazyVim.has_extra("formatting.prettier") then
opts.formatters_by_ft = opts.formatters_by_ft or {}
opts.formatters_by_ft.htmlangular = { "prettier" }
end
end,
},
} }

View file

@ -6,7 +6,7 @@ return {
}) })
end, end,
{ {
"mason-org/mason.nvim", "williamboman/mason.nvim",
opts = { ensure_installed = { "ansible-lint" } }, opts = { ensure_installed = { "ansible-lint" } },
}, },
{ {
@ -19,14 +19,13 @@ return {
}, },
{ {
"mfussenegger/nvim-ansible", "mfussenegger/nvim-ansible",
ft = { "yaml" }, ft = {},
keys = { keys = {
{ {
"<leader>ta", "<leader>ta",
function() function()
require("ansible").run() require("ansible").run()
end, end,
ft = "yaml.ansible",
desc = "Ansible Run Playbook/Role", desc = "Ansible Run Playbook/Role",
silent = true, silent = true,
}, },

View file

@ -17,7 +17,7 @@ return {
{ {
"nvim-treesitter/nvim-treesitter", "nvim-treesitter/nvim-treesitter",
opts = { ensure_installed = { "astro", "css" } }, opts = { ensure_installed = { "astro" } },
}, },
-- LSP Servers -- LSP Servers

View file

@ -9,8 +9,6 @@ return {
"compile_commands.json", "compile_commands.json",
"compile_flags.txt", "compile_flags.txt",
"configure.ac", -- AutoTools "configure.ac", -- AutoTools
"meson.build",
"build.ninja",
}, },
}) })
end, end,
@ -23,7 +21,8 @@ return {
{ {
"p00f/clangd_extensions.nvim", "p00f/clangd_extensions.nvim",
ft = { "c", "cpp", "objc", "objcpp" }, lazy = true,
config = function() end,
opts = { opts = {
inlay_hints = { inlay_hints = {
inline = false, inline = false,
@ -59,21 +58,21 @@ return {
-- Ensure mason installs the server -- Ensure mason installs the server
clangd = { clangd = {
keys = { keys = {
{ "<leader>ch", "<cmd>LspClangdSwitchSourceHeader<cr>", desc = "Switch Source/Header (C/C++)" }, { "<leader>ch", "<cmd>ClangdSwitchSourceHeader<cr>", desc = "Switch Source/Header (C/C++)" },
},
root_markers = {
"compile_commands.json",
"compile_flags.txt",
"configure.ac", -- AutoTools
"Makefile",
"configure.ac",
"configure.in",
"config.h.in",
"meson.build",
"meson_options.txt",
"build.ninja",
".git",
}, },
root_dir = function(fname)
return require("lspconfig.util").root_pattern(
"Makefile",
"configure.ac",
"configure.in",
"config.h.in",
"meson.build",
"meson_options.txt",
"build.ninja"
)(fname) or require("lspconfig.util").root_pattern("compile_commands.json", "compile_flags.txt")(
fname
) or require("lspconfig.util").find_git_ancestor(fname)
end,
capabilities = { capabilities = {
offsetEncoding = { "utf-16" }, offsetEncoding = { "utf-16" },
}, },
@ -93,15 +92,19 @@ return {
}, },
}, },
}, },
setup = {
clangd = function(_, opts)
local clangd_ext_opts = LazyVim.opts("clangd_extensions.nvim")
require("clangd_extensions").setup(vim.tbl_deep_extend("force", clangd_ext_opts or {}, { server = opts }))
return false
end,
},
}, },
}, },
{ {
"hrsh7th/nvim-cmp", "nvim-cmp",
optional = true,
opts = function(_, opts) opts = function(_, opts)
opts.sorting = opts.sorting or {}
opts.sorting.comparators = opts.sorting.comparators or {}
table.insert(opts.sorting.comparators, 1, require("clangd_extensions.cmp_scores")) table.insert(opts.sorting.comparators, 1, require("clangd_extensions.cmp_scores"))
end, end,
}, },
@ -111,7 +114,7 @@ return {
optional = true, optional = true,
dependencies = { dependencies = {
-- Ensure C/C++ debugger is installed -- Ensure C/C++ debugger is installed
"mason-org/mason.nvim", "williamboman/mason.nvim",
optional = true, optional = true,
opts = { ensure_installed = { "codelldb" } }, opts = { ensure_installed = { "codelldb" } },
}, },

View file

@ -21,13 +21,13 @@ return {
}, },
opts = function(_, opts) opts = function(_, opts)
if type(opts.sources) == "table" then if type(opts.sources) == "table" then
vim.list_extend(opts.sources, { name = "conjure" }) vim.list_extend(opts.sources, { name = "clojure" })
end end
end, end,
}, },
-- Add s-exp mappings -- Add s-exp mappings
{ "julienvincent/nvim-paredit", opts = {}, event = "LazyFile" }, { "PaterJason/nvim-treesitter-sexp", opts = {}, event = "LazyFile" },
-- Colorize the output of the log buffer -- Colorize the output of the log buffer
{ {
@ -52,6 +52,7 @@ return {
event = "LazyFile", event = "LazyFile",
config = function(_, _) config = function(_, _)
require("conjure.main").main() require("conjure.main").main()
require("conjure.mapping")["on-filetype"]()
end, end,
init = function() init = function()
-- print color codes if baleia.nvim is available -- print color codes if baleia.nvim is available
@ -75,13 +76,13 @@ return {
end end
vim.keymap.set( vim.keymap.set(
{ "n", "x" }, { "n", "v" },
"[c", "[c",
"<CMD>call search('^; -\\+$', 'bw')<CR>", "<CMD>call search('^; -\\+$', 'bw')<CR>",
{ silent = true, buffer = true, desc = "Jumps to the begining of previous evaluation output." } { silent = true, buffer = true, desc = "Jumps to the begining of previous evaluation output." }
) )
vim.keymap.set( vim.keymap.set(
{ "n", "x" }, { "n", "v" },
"]c", "]c",
"<CMD>call search('^; -\\+$', 'w')<CR>", "<CMD>call search('^; -\\+$', 'w')<CR>",
{ silent = true, buffer = true, desc = "Jumps to the begining of next evaluation output." } { silent = true, buffer = true, desc = "Jumps to the begining of next evaluation output." }

View file

@ -1,40 +0,0 @@
return {
recommended = function()
return LazyVim.extras.wants({
ft = "dart",
root = { "pubspec.yaml" },
})
end,
{
"neovim/nvim-lspconfig",
opts = {
servers = {
dartls = {},
},
},
},
{
"nvim-treesitter/nvim-treesitter",
opts = { ensure_installed = { "dart" } },
},
{
"stevearc/conform.nvim",
opts = {
formatters_by_ft = {
dart = { "dart_format" },
},
},
},
{
"nvim-neotest/neotest",
optional = true,
dependencies = {
"sidlatau/neotest-dart",
},
opts = {
adapters = {
["neotest-dart"] = {},
},
},
},
}

View file

@ -2,14 +2,7 @@ return {
recommended = function() recommended = function()
return LazyVim.extras.wants({ return LazyVim.extras.wants({
ft = "dockerfile", ft = "dockerfile",
root = { root = { "Dockerfile", "docker-compose.yml", "compose.yml", "docker-compose.yaml", "compose.yaml" },
"Dockerfile",
"Containerfile",
"docker-compose.yml",
"compose.yml",
"docker-compose.yaml",
"compose.yaml",
},
}) })
end, end,
{ {

View file

@ -1,7 +1,7 @@
return { return {
recommended = function() recommended = function()
return LazyVim.extras.wants({ return LazyVim.extras.wants({
ft = { "elixir", "eelixir", "heex", "surface", "livebook" }, ft = { "elixir", "eelixir", "heex", "surface" },
root = "mix.exs", root = "mix.exs",
}) })
end, end,
@ -9,46 +9,13 @@ return {
"neovim/nvim-lspconfig", "neovim/nvim-lspconfig",
opts = { opts = {
servers = { servers = {
elixirls = { elixirls = {},
keys = {
{
"<leader>cp",
function()
local params = vim.lsp.util.make_position_params()
LazyVim.lsp.execute({
title = "toPipe",
filter = "elixirls",
command = "manipulatePipes:serverid",
arguments = { "toPipe", params.textDocument.uri, params.position.line, params.position.character },
})
end,
desc = "To Pipe",
},
{
"<leader>cP",
function()
local params = vim.lsp.util.make_position_params()
LazyVim.lsp.execute({
title = "fromPipe",
filter = "elixirls",
command = "manipulatePipes:serverid",
arguments = { "fromPipe", params.textDocument.uri, params.position.line, params.position.character },
})
end,
desc = "From Pipe",
},
},
},
}, },
}, },
}, },
{ {
"nvim-treesitter/nvim-treesitter", "nvim-treesitter/nvim-treesitter",
opts = function(_, opts) opts = { ensure_installed = { "elixir", "heex", "eex" } },
opts.ensure_installed = opts.ensure_installed or {}
vim.list_extend(opts.ensure_installed, { "elixir", "heex", "eex" })
vim.treesitter.language.register("markdown", "livebook")
end,
}, },
{ {
"nvim-neotest/neotest", "nvim-neotest/neotest",
@ -93,11 +60,4 @@ return {
} }
end, end,
}, },
{
"MeanderingProgrammer/render-markdown.nvim",
optional = true,
ft = function(_, ft)
vim.list_extend(ft, { "livebook" })
end,
},
} }

View file

@ -10,7 +10,7 @@ return {
}, },
{ {
"mason-org/mason.nvim", "williamboman/mason.nvim",
opts = { ensure_installed = { "elm-format" } }, opts = { ensure_installed = { "elm-format" } },
}, },

View file

@ -1,29 +0,0 @@
return {
recommended = function()
return LazyVim.extras.wants({
ft = { "handlebars", "typescript", "javascript", "typescript.glimmer", "javascript.glimmer" },
root = { "ember-cli-build.js" },
})
end,
{
"nvim-treesitter/nvim-treesitter",
opts = { ensure_installed = { "css", "glimmer", "glimmer_javascript", "glimmer_typescript" } },
},
{
"neovim/nvim-lspconfig",
opts = {
servers = {
ember = {},
},
},
},
{
"conform.nvim",
opts = function(_, opts)
if LazyVim.has_extra("formatting.prettier") then
opts.formatters_by_ft = opts.formatters_by_ft or {}
opts.formatters_by_ft.glimmer = { "prettier" }
end
end,
},
}

View file

@ -1,20 +0,0 @@
return {
recommended = function()
return LazyVim.extras.wants({
ft = { "erlang" },
root = { "rebar.config", "erlang.mk" },
})
end,
{
"neovim/nvim-lspconfig",
opts = {
servers = {
erlangls = {},
},
},
},
{
"nvim-treesitter/nvim-treesitter",
opts = { ensure_installed = { "erlang" } },
},
}

View file

@ -9,8 +9,7 @@ return {
}, },
{ {
"hrsh7th/nvim-cmp", "nvim-cmp",
optional = true,
dependencies = { dependencies = {
{ "petertriho/cmp-git", opts = {} }, { "petertriho/cmp-git", opts = {} },
}, },

View file

@ -17,13 +17,4 @@ return {
}, },
}, },
}, },
{
"conform.nvim",
optional = true,
opts = {
formatters_by_ft = {
gleam = { "gleam" },
},
},
},
} }

View file

@ -14,9 +14,6 @@ return {
opts = { opts = {
servers = { servers = {
gopls = { gopls = {
init_options = {
semanticTokens = true,
},
settings = { settings = {
gopls = { gopls = {
gofumpt = true, gofumpt = true,
@ -40,6 +37,7 @@ return {
rangeVariableTypes = true, rangeVariableTypes = true,
}, },
analyses = { analyses = {
fieldalignment = true,
nilness = true, nilness = true,
unusedparams = true, unusedparams = true,
unusedwrite = true, unusedwrite = true,
@ -49,6 +47,7 @@ return {
completeUnimported = true, completeUnimported = true,
staticcheck = true, staticcheck = true,
directoryFilters = { "-.git", "-.vscode", "-.idea", "-.vscode-test", "-node_modules" }, directoryFilters = { "-.git", "-.vscode", "-.idea", "-.vscode-test", "-node_modules" },
semanticTokens = true,
}, },
}, },
}, },
@ -57,13 +56,8 @@ return {
gopls = function(_, opts) gopls = function(_, opts)
-- workaround for gopls not supporting semanticTokensProvider -- workaround for gopls not supporting semanticTokensProvider
-- https://github.com/golang/go/issues/54531#issuecomment-1464982242 -- https://github.com/golang/go/issues/54531#issuecomment-1464982242
Snacks.util.lsp.on({ name = "gopls" }, function(_, client) LazyVim.lsp.on_attach(function(client, _)
if if not client.server_capabilities.semanticTokensProvider then
client.config
and client.config.init_options
and client.config.init_options.semanticTokens
and not client.server_capabilities.semanticTokensProvider
then
local semantic = client.config.capabilities.textDocument.semanticTokens local semantic = client.config.capabilities.textDocument.semanticTokens
client.server_capabilities.semanticTokensProvider = { client.server_capabilities.semanticTokensProvider = {
full = true, full = true,
@ -74,7 +68,7 @@ return {
range = true, range = true,
} }
end end
end) end, "gopls")
-- end workaround -- end workaround
end, end,
}, },
@ -82,7 +76,7 @@ return {
}, },
-- Ensure Go tools are installed -- Ensure Go tools are installed
{ {
"mason-org/mason.nvim", "williamboman/mason.nvim",
opts = { ensure_installed = { "goimports", "gofumpt" } }, opts = { ensure_installed = { "goimports", "gofumpt" } },
}, },
{ {
@ -90,7 +84,7 @@ return {
optional = true, optional = true,
dependencies = { dependencies = {
{ {
"mason-org/mason.nvim", "williamboman/mason.nvim",
opts = { ensure_installed = { "gomodifytags", "impl" } }, opts = { ensure_installed = { "gomodifytags", "impl" } },
}, },
}, },
@ -104,22 +98,6 @@ return {
}) })
end, end,
}, },
-- Add linting
{
"mfussenegger/nvim-lint",
optional = true,
dependencies = {
{
"mason-org/mason.nvim",
opts = { ensure_installed = { "golangci-lint" } },
},
},
opts = {
linters_by_ft = {
go = { "golangcilint" },
},
},
},
{ {
"stevearc/conform.nvim", "stevearc/conform.nvim",
optional = true, optional = true,
@ -134,7 +112,7 @@ return {
optional = true, optional = true,
dependencies = { dependencies = {
{ {
"mason-org/mason.nvim", "williamboman/mason.nvim",
opts = { ensure_installed = { "delve" } }, opts = { ensure_installed = { "delve" } },
}, },
{ {
@ -159,17 +137,4 @@ return {
}, },
}, },
}, },
-- Filetype icons
{
"nvim-mini/mini.icons",
opts = {
file = {
[".go-version"] = { glyph = "", hl = "MiniIconsBlue" },
},
filetype = {
gotmpl = { glyph = "󰟓", hl = "MiniIconsGrey" },
},
},
},
} }

View file

@ -14,44 +14,21 @@ return {
{ {
"mrcjkb/haskell-tools.nvim", "mrcjkb/haskell-tools.nvim",
version = false, version = "^3",
ft = { "haskell", "lhaskell", "cabal", "cabalproject" }, ft = { "haskell", "lhaskell", "cabal", "cabalproject" },
keys = { dependencies = {
{ { "nvim-telescope/telescope.nvim", optional = true },
"<localleader>e",
"<cmd>HlsEvalAll<cr>",
ft = "haskell",
desc = "Evaluate All",
},
{
"<localleader>h",
function()
require("haskell-tools").hoogle.hoogle_signature()
end,
ft = "haskell",
desc = "Hoogle Signature",
},
{
"<localleader>r",
function()
require("haskell-tools").repl.toggle()
end,
ft = "haskell",
desc = "REPL (Package)",
},
{
"<localleader>R",
function()
require("haskell-tools").repl.toggle(vim.api.nvim_buf_get_name(0))
end,
ft = "haskell",
desc = "REPL (Buffer)",
},
}, },
config = function()
local ok, telescope = pcall(require, "telescope")
if ok then
telescope.load_extension("ht")
end
end,
}, },
{ {
"mason-org/mason.nvim", "williamboman/mason.nvim",
opts = { ensure_installed = { "haskell-language-server" } }, opts = { ensure_installed = { "haskell-language-server" } },
}, },
@ -60,7 +37,7 @@ return {
optional = true, optional = true,
dependencies = { dependencies = {
{ {
"mason-org/mason.nvim", "williamboman/mason.nvim",
opts = { ensure_installed = { "haskell-debug-adapter" } }, opts = { ensure_installed = { "haskell-debug-adapter" } },
}, },
}, },
@ -90,48 +67,17 @@ return {
}, },
{ {
"nvim-telescope/telescope.nvim", "luc-tielen/telescope_hoogle",
optional = true, ft = { "haskell", "lhaskell", "cabal", "cabalproject" },
specs = { dependencies = {
{ { "nvim-telescope/telescope.nvim" },
"luc-tielen/telescope_hoogle",
ft = { "haskell", "lhaskell", "cabal", "cabalproject" },
opts = function()
LazyVim.on_load("telescope.nvim", function()
require("telescope").load_extension("ht")
end)
end,
keys = {
{
"<localleader>H",
"<cmd>Telescope hoogle<cr>",
ft = "haskell",
desc = "Hoogle",
},
},
},
},
},
{
"stevearc/conform.nvim",
optional = true,
opts = {
formatters_by_ft = {
haskell = { "fourmolu" },
cabal = { "cabal_fmt" },
},
},
},
{
"mfussenegger/nvim-lint",
optional = true,
opts = {
linters_by_ft = {
haskell = { "hlint" },
},
}, },
config = function()
local ok, telescope = pcall(require, "telescope")
if ok then
telescope.load_extension("hoogle")
end
end,
}, },
-- Make sure lspconfig doesn't start hls, -- Make sure lspconfig doesn't start hls,

View file

@ -6,8 +6,7 @@ return {
}) })
end, end,
{ "qvalentin/helm-ls.nvim", ft = "helm" }, { "towolf/vim-helm", ft = "helm" },
{ {
"nvim-treesitter/nvim-treesitter", "nvim-treesitter/nvim-treesitter",
opts = { ensure_installed = { "helm" } }, opts = { ensure_installed = { "helm" } },
@ -19,6 +18,17 @@ return {
servers = { servers = {
helm_ls = {}, helm_ls = {},
}, },
setup = {
yamlls = function()
LazyVim.lsp.on_attach(function(client, buffer)
if vim.bo[buffer].filetype == "helm" then
vim.schedule(function()
vim.cmd("LspStop ++force yamlls")
end)
end
end, "yamlls")
end,
},
}, },
}, },
} }

View file

@ -1,4 +1,4 @@
-- This is the same as in lspconfig.configs.jdtls, but avoids -- This is the same as in lspconfig.server_configurations.jdtls, but avoids
-- needing to require that when this module loads. -- needing to require that when this module loads.
local java_filetypes = { "java" } local java_filetypes = { "java" }
@ -40,23 +40,9 @@ return {
{ {
"mfussenegger/nvim-dap", "mfussenegger/nvim-dap",
optional = true, optional = true,
opts = function()
-- Simple configuration to attach to remote java debug process
-- Taken directly from https://github.com/mfussenegger/nvim-dap/wiki/Java
local dap = require("dap")
dap.configurations.java = {
{
type = "java",
request = "attach",
name = "Debug (Attach) - Remote",
hostName = "127.0.0.1",
port = 5005,
},
}
end,
dependencies = { dependencies = {
{ {
"mason-org/mason.nvim", "williamboman/mason.nvim",
opts = { ensure_installed = { "java-debug-adapter", "java-test" } }, opts = { ensure_installed = { "java-debug-adapter", "java-test" } },
}, },
}, },
@ -85,15 +71,12 @@ return {
dependencies = { "folke/which-key.nvim" }, dependencies = { "folke/which-key.nvim" },
ft = java_filetypes, ft = java_filetypes,
opts = function() opts = function()
local cmd = { vim.fn.exepath("jdtls") } local mason_registry = require("mason-registry")
if LazyVim.has("mason.nvim") then local lombok_jar = mason_registry.get_package("jdtls"):get_install_path() .. "/lombok.jar"
local lombok_jar = vim.fn.expand("$MASON/share/jdtls/lombok.jar")
table.insert(cmd, string.format("--jvm-arg=-javaagent:%s", lombok_jar))
end
return { return {
root_dir = function(path) -- How to find the root dir for a given filename. The default comes from
return vim.fs.root(path, vim.lsp.config.jdtls.root_markers) -- lspconfig which provides a function specifically for java projects.
end, root_dir = require("lspconfig.server_configurations.jdtls").default_config.root_dir,
-- How to find the project name for a given root dir. -- How to find the project name for a given root dir.
project_name = function(root_dir) project_name = function(root_dir)
@ -110,7 +93,10 @@ return {
-- How to run jdtls. This can be overridden to a full java command-line -- How to run jdtls. This can be overridden to a full java command-line
-- if the Python wrapper script doesn't suffice. -- if the Python wrapper script doesn't suffice.
cmd = cmd, cmd = {
vim.fn.exepath("jdtls"),
string.format("--jvm-arg=-javaagent:%s", lombok_jar),
},
full_cmd = function(opts) full_cmd = function(opts)
local fname = vim.api.nvim_buf_get_name(0) local fname = vim.api.nvim_buf_get_name(0)
local root_dir = opts.root_dir(fname) local root_dir = opts.root_dir(fname)
@ -129,7 +115,6 @@ return {
-- These depend on nvim-dap, but can additionally be disabled by setting false here. -- These depend on nvim-dap, but can additionally be disabled by setting false here.
dap = { hotcodereplace = "auto", config_overrides = {} }, dap = { hotcodereplace = "auto", config_overrides = {} },
-- Can set this to false to disable main class scan, which is a performance killer for large project
dap_main = {}, dap_main = {},
test = true, test = true,
settings = { settings = {
@ -146,17 +131,29 @@ return {
config = function(_, opts) config = function(_, opts)
-- Find the extra bundles that should be passed on the jdtls command-line -- Find the extra bundles that should be passed on the jdtls command-line
-- if nvim-dap is enabled with java debug/test. -- if nvim-dap is enabled with java debug/test.
local mason_registry = require("mason-registry")
local bundles = {} ---@type string[] local bundles = {} ---@type string[]
if LazyVim.has("mason.nvim") then if opts.dap and LazyVim.has("nvim-dap") and mason_registry.is_installed("java-debug-adapter") then
local mason_registry = require("mason-registry") local java_dbg_pkg = mason_registry.get_package("java-debug-adapter")
if opts.dap and LazyVim.has("nvim-dap") and mason_registry.is_installed("java-debug-adapter") then local java_dbg_path = java_dbg_pkg:get_install_path()
bundles = vim.fn.glob("$MASON/share/java-debug-adapter/com.microsoft.java.debug.plugin-*jar", false, true) local jar_patterns = {
-- java-test also depends on java-debug-adapter. java_dbg_path .. "/extension/server/com.microsoft.java.debug.plugin-*.jar",
if opts.test and mason_registry.is_installed("java-test") then }
vim.list_extend(bundles, vim.fn.glob("$MASON/share/java-test/*.jar", false, true)) -- java-test also depends on java-debug-adapter.
if opts.test and mason_registry.is_installed("java-test") then
local java_test_pkg = mason_registry.get_package("java-test")
local java_test_path = java_test_pkg:get_install_path()
vim.list_extend(jar_patterns, {
java_test_path .. "/extension/server/*.jar",
})
end
for _, jar_pattern in ipairs(jar_patterns) do
for _, bundle in ipairs(vim.split(vim.fn.glob(jar_pattern), "\n")) do
table.insert(bundles, bundle)
end end
end end
end end
local function attach_jdtls() local function attach_jdtls()
local fname = vim.api.nvim_buf_get_name(0) local fname = vim.api.nvim_buf_get_name(0)
@ -169,9 +166,7 @@ return {
}, },
settings = opts.settings, settings = opts.settings,
-- enable CMP capabilities -- enable CMP capabilities
capabilities = LazyVim.has("blink.cmp") and require("blink.cmp").get_lsp_capabilities() or LazyVim.has( capabilities = LazyVim.has("cmp-nvim-lsp") and require("cmp_nvim_lsp").default_capabilities() or nil,
"cmp-nvim-lsp"
) and require("cmp_nvim_lsp").default_capabilities() or nil,
}, opts.jdtls) }, opts.jdtls)
-- Existing server will be reused if the root_dir matches. -- Existing server will be reused if the root_dir matches.
@ -195,80 +190,45 @@ return {
local client = vim.lsp.get_client_by_id(args.data.client_id) local client = vim.lsp.get_client_by_id(args.data.client_id)
if client and client.name == "jdtls" then if client and client.name == "jdtls" then
local wk = require("which-key") local wk = require("which-key")
wk.add({ wk.register({
{ ["<leader>cx"] = { name = "+extract" },
mode = "n", ["<leader>cxv"] = { require("jdtls").extract_variable_all, "Extract Variable" },
buffer = args.buf, ["<leader>cxc"] = { require("jdtls").extract_constant, "Extract Constant" },
{ "<leader>cx", group = "extract" }, ["gs"] = { require("jdtls").super_implementation, "Goto Super" },
{ "<leader>cxv", require("jdtls").extract_variable_all, desc = "Extract Variable" }, ["gS"] = { require("jdtls.tests").goto_subjects, "Goto Subjects" },
{ "<leader>cxc", require("jdtls").extract_constant, desc = "Extract Constant" }, ["<leader>co"] = { require("jdtls").organize_imports, "Organize Imports" },
{ "<leader>cgs", require("jdtls").super_implementation, desc = "Goto Super" }, }, { mode = "n", buffer = args.buf })
{ "<leader>cgS", require("jdtls.tests").goto_subjects, desc = "Goto Subjects" }, wk.register({
{ "<leader>co", require("jdtls").organize_imports, desc = "Organize Imports" }, ["<leader>c"] = { name = "+code" },
["<leader>cx"] = { name = "+extract" },
["<leader>cxm"] = {
[[<ESC><CMD>lua require('jdtls').extract_method(true)<CR>]],
"Extract Method",
}, },
}) ["<leader>cxv"] = {
wk.add({ [[<ESC><CMD>lua require('jdtls').extract_variable_all(true)<CR>]],
{ "Extract Variable",
mode = "x",
buffer = args.buf,
{ "<leader>cx", group = "extract" },
{
"<leader>cxm",
[[<ESC><CMD>lua require('jdtls').extract_method(true)<CR>]],
desc = "Extract Method",
},
{
"<leader>cxv",
[[<ESC><CMD>lua require('jdtls').extract_variable_all(true)<CR>]],
desc = "Extract Variable",
},
{
"<leader>cxc",
[[<ESC><CMD>lua require('jdtls').extract_constant(true)<CR>]],
desc = "Extract Constant",
},
}, },
}) ["<leader>cxc"] = {
[[<ESC><CMD>lua require('jdtls').extract_constant(true)<CR>]],
"Extract Constant",
},
}, { mode = "v", buffer = args.buf })
if LazyVim.has("mason.nvim") then if opts.dap and LazyVim.has("nvim-dap") and mason_registry.is_installed("java-debug-adapter") then
local mason_registry = require("mason-registry") -- custom init for Java debugger
if opts.dap and LazyVim.has("nvim-dap") and mason_registry.is_installed("java-debug-adapter") then require("jdtls").setup_dap(opts.dap)
-- custom init for Java debugger require("jdtls.dap").setup_dap_main_class_configs(opts.dap_main)
require("jdtls").setup_dap(opts.dap)
if opts.dap_main then
require("jdtls.dap").setup_dap_main_class_configs(opts.dap_main)
end
-- Java Test require Java debugger to work -- Java Test require Java debugger to work
if opts.test and mason_registry.is_installed("java-test") then if opts.test and mason_registry.is_installed("java-test") then
-- custom keymaps for Java test runner (not yet compatible with neotest) -- custom keymaps for Java test runner (not yet compatible with neotest)
wk.add({ wk.register({
{ ["<leader>t"] = { name = "+test" },
mode = "n", ["<leader>tt"] = { require("jdtls.dap").test_class, "Run All Test" },
buffer = args.buf, ["<leader>tr"] = { require("jdtls.dap").test_nearest_method, "Run Nearest Test" },
{ "<leader>t", group = "test" }, ["<leader>tT"] = { require("jdtls.dap").pick_test, "Run Test" },
{ }, { mode = "n", buffer = args.buf })
"<leader>tt",
function()
require("jdtls.dap").test_class({
config_overrides = type(opts.test) ~= "boolean" and opts.test.config_overrides or nil,
})
end,
desc = "Run All Test",
},
{
"<leader>tr",
function()
require("jdtls.dap").test_nearest_method({
config_overrides = type(opts.test) ~= "boolean" and opts.test.config_overrides or nil,
})
end,
desc = "Run Nearest Test",
},
{ "<leader>tT", require("jdtls.dap").pick_test, desc = "Run Test" },
},
})
end
end end
end end

View file

@ -27,7 +27,7 @@ return {
servers = { servers = {
jsonls = { jsonls = {
-- lazy-load schemastore when needed -- lazy-load schemastore when needed
before_init = function(_, new_config) on_new_config = function(new_config)
new_config.settings.json.schemas = new_config.settings.json.schemas or {} new_config.settings.json.schemas = new_config.settings.json.schemas or {}
vim.list_extend(new_config.settings.json.schemas, require("schemastore").json.schemas()) vim.list_extend(new_config.settings.json.schemas, require("schemastore").json.schemas())
end, end,

View file

@ -1,66 +0,0 @@
return {
recommended = function()
return LazyVim.extras.wants({
ft = { "julia" },
root = { "Project.toml" },
})
end,
{
"nvim-treesitter/nvim-treesitter",
opts = { ensure_installed = { "julia" } },
},
{
"neovim/nvim-lspconfig",
opts = {
servers = {
julials = {
settings = {
-- use the same default settings as the Julia VS Code extension
julia = {
completionmode = "qualify",
lint = { missingrefs = "none" },
},
},
},
},
},
},
-- cmp integration
{
"hrsh7th/nvim-cmp",
optional = true,
dependencies = { "kdheepak/cmp-latex-symbols" },
opts = function(_, opts)
table.insert(opts.sources, {
name = "latex_symbols",
option = {
strategy = 0, -- mixed
},
})
end,
},
-- blink.cmp integration
{
"saghen/blink.cmp",
optional = true,
dependencies = { "kdheepak/cmp-latex-symbols", "saghen/blink.compat" },
opts = {
sources = {
compat = { "latex_symbols" },
providers = {
latex_symbols = {
kind = "LatexSymbols",
async = true,
opts = {
strategy = 0, -- mixed
},
},
},
},
},
},
}

View file

@ -14,7 +14,7 @@ return {
end, end,
-- Add packages(linting, debug adapter) -- Add packages(linting, debug adapter)
{ {
"mason-org/mason.nvim", "williamboman/mason.nvim",
opts = { ensure_installed = { "ktlint" } }, opts = { ensure_installed = { "ktlint" } },
}, },
-- Add syntax highlighting -- Add syntax highlighting
@ -35,7 +35,7 @@ return {
{ {
"mfussenegger/nvim-lint", "mfussenegger/nvim-lint",
optional = true, optional = true,
dependencies = "mason-org/mason.nvim", dependencies = "williamboman/mason.nvim",
opts = { opts = {
linters_by_ft = { kotlin = { "ktlint" } }, linters_by_ft = { kotlin = { "ktlint" } },
}, },
@ -64,7 +64,7 @@ return {
{ {
"mfussenegger/nvim-dap", "mfussenegger/nvim-dap",
optional = true, optional = true,
dependencies = "mason-org/mason.nvim", dependencies = "williamboman/mason.nvim",
opts = function() opts = function()
local dap = require("dap") local dap = require("dap")
if not dap.adapters.kotlin then if not dap.adapters.kotlin then

View file

@ -1,125 +0,0 @@
return {
recommended = function()
return LazyVim.extras.wants({
ft = { "lean" },
root = { "lean-toolchain" },
})
end,
"Julian/lean.nvim",
event = { "BufReadPre *.lean", "BufNewFile *.lean" },
dependencies = {
"nvim-lua/plenary.nvim",
},
-- see details below for full configuration options
opts = {
-- Enable the Lean language server(s)?
--
-- false to disable, otherwise should be a table of options to pass to `leanls`
--
-- See https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.md#leanls for details.
-- In particular ensure you have followed instructions setting up a callback
-- for `LspAttach` which sets your key bindings!
lsp = {
init_options = {
-- See Lean.Lsp.InitializationOptions for details and further options.
-- Time (in milliseconds) which must pass since latest edit until elaboration begins.
-- Lower values may make editing feel faster at the cost of higher CPU usage.
-- Note that lean.nvim changes the Lean default for this value!
editDelay = 0,
-- Whether to signal that widgets are supported.
hasWidgets = true,
},
},
ft = {
-- A list of patterns which will be used to protect any matching
-- Lean file paths from being accidentally modified (by marking the
-- buffer as `nomodifiable`).
nomodifiable = {
-- by default, this list includes the Lean standard libraries,
-- as well as files within dependency directories (e.g. `_target`)
-- Set this to an empty table to disable.
},
},
-- Abbreviation support
abbreviations = {
-- Enable expanding of unicode abbreviations?
enable = true,
-- additional abbreviations:
extra = {
-- Add a \wknight abbreviation to insert ♘
--
-- Note that the backslash is implied, and that you of
-- course may also use a snippet engine directly to do
-- this if so desired.
wknight = "",
},
-- Change if you don't like the backslash
-- (comma is a popular choice on French keyboards)
leader = "\\",
},
-- Enable suggested mappings?
--
-- false by default, true to enable
mappings = true,
-- Infoview support
infoview = {
-- Automatically open an infoview on entering a Lean buffer?
-- Should be a function that will be called anytime a new Lean file
-- is opened. Return true to open an infoview, otherwise false.
-- Setting this to `true` is the same as `function() return true end`,
-- i.e. autoopen for any Lean file, or setting it to `false` is the
-- same as `function() return false end`, i.e. never autoopen.
autoopen = true,
-- Set infoview windows' starting dimensions.
-- Windows are opened horizontally or vertically depending on spacing.
width = 50,
height = 20,
-- Put the infoview on the top or bottom when horizontal?
-- top | bottom
horizontal_position = "bottom",
-- Always open the infoview window in a separate tabpage.
-- Might be useful if you are using a screen reader and don't want too
-- many dynamic updates in the terminal at the same time.
-- Note that `height` and `width` will be ignored in this case.
separate_tab = false,
-- Show indicators for pin locations when entering an infoview window?
-- always | never | auto (= only when there are multiple pins)
indicators = "auto",
},
-- Progress bar support
progress_bars = {
-- Enable the progress bars?
enable = true,
-- What character should be used for the bars?
character = "",
-- Use a different priority for the signs
priority = 10,
},
-- Redirect Lean's stderr messages somewhere (to a buffer by default)
stderr = {
enable = true,
-- height of the window
height = 5,
-- a callback which will be called with (multi-line) stderr output
-- e.g., use:
-- on_lines = function(lines) vim.notify(lines) end
-- if you want to redirect stderr to `vim.notify`.
-- The default implementation will redirect to a dedicated stderr
-- window.
on_lines = nil,
},
},
}

View file

@ -24,14 +24,6 @@ return {
end end
end, end,
}, },
["markdownlint-cli2"] = {
condition = function(_, ctx)
local diag = vim.tbl_filter(function(d)
return d.source == "markdownlint"
end, vim.diagnostic.get(ctx.buf))
return #diag > 0
end,
},
}, },
formatters_by_ft = { formatters_by_ft = {
["markdown"] = { "prettier", "markdownlint-cli2", "markdown-toc" }, ["markdown"] = { "prettier", "markdownlint-cli2", "markdown-toc" },
@ -40,7 +32,7 @@ return {
}, },
}, },
{ {
"mason-org/mason.nvim", "williamboman/mason.nvim",
opts = { ensure_installed = { "markdownlint-cli2", "markdown-toc" } }, opts = { ensure_installed = { "markdownlint-cli2", "markdown-toc" } },
}, },
{ {
@ -76,7 +68,6 @@ return {
"iamcco/markdown-preview.nvim", "iamcco/markdown-preview.nvim",
cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" }, cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" },
build = function() build = function()
require("lazy").load({ plugins = { "markdown-preview.nvim" } })
vim.fn["mkdp#util#install"]() vim.fn["mkdp#util#install"]()
end, end,
keys = { keys = {
@ -93,29 +84,30 @@ return {
}, },
{ {
"MeanderingProgrammer/render-markdown.nvim", "lukas-reineke/headlines.nvim",
opts = { opts = function()
code = { local opts = {}
sign = false, for _, ft in ipairs({ "markdown", "norg", "rmd", "org" }) do
width = "block", opts[ft] = {
right_pad = 1, headline_highlights = {},
}, -- disable bullets for now. See https://github.com/lukas-reineke/headlines.nvim/issues/66
heading = { bullets = {},
sign = false, }
icons = {}, for i = 1, 6 do
}, local hl = "Headline" .. i
checkbox = { vim.api.nvim_set_hl(0, hl, { link = "Headline", default = true })
enabled = false, table.insert(opts[ft].headline_highlights, hl)
}, end
}, end
ft = { "markdown", "norg", "rmd", "org", "codecompanion" }, return opts
end,
ft = { "markdown", "norg", "rmd", "org" },
config = function(_, opts) config = function(_, opts)
require("render-markdown").setup(opts) -- PERF: schedule to prevent headlines slowing down opening a file
Snacks.toggle({ vim.schedule(function()
name = "Render Markdown", require("headlines").setup(opts)
get = require("render-markdown").get, require("headlines").refresh()
set = require("render-markdown").set, end)
}):map("<leader>um")
end, end,
}, },
} }

View file

@ -24,13 +24,4 @@ return {
}, },
}, },
}, },
{
"mfussenegger/nvim-lint",
optional = true,
opts = {
linters_by_ft = {
nix = { "statix" },
},
},
},
} }

View file

@ -12,6 +12,23 @@ return {
}, },
{ {
"nvim-treesitter/nvim-treesitter", "nvim-treesitter/nvim-treesitter",
opts = { ensure_installed = { "nu" } }, dependencies = {
{ "nushell/tree-sitter-nu" },
},
opts = function(_, opts)
---@diagnostic disable-next-line: inject-field
require("nvim-treesitter.parsers").get_parser_configs().nu = {
install_info = {
url = "https://github.com/nushell/tree-sitter-nu",
files = { "src/parser.c" },
branch = "main",
},
filetype = "nu",
}
if type(opts.ensure_installed) == "table" then
vim.list_extend(opts.ensure_installed, { "nu" })
end
end,
}, },
} }

View file

@ -1,46 +0,0 @@
return {
recommended = function()
return LazyVim.extras.wants({
ft = { "ml", "mli", "cmi", "cmo", "cmx", "cma", "cmxa", "cmxs", "cmt", "cmti", "opam" },
root = { "merlin.opam", "dune-project" },
})
end,
{
"nvim-treesitter/nvim-treesitter",
opts = function(_, opts)
if type(opts.ensure_installed) == "table" then
vim.list_extend(opts.ensure_installed, { "ocaml" })
end
end,
},
{
"neovim/nvim-lspconfig",
opts = {
servers = {
ocamllsp = {
filetypes = {
"ocaml",
"ocaml.menhir",
"ocaml.interface",
"ocaml.ocamllex",
"reason",
"dune",
},
root_markers = {
function(name)
return name:match(".*%.opam$")
end,
"esy.json",
"package.json",
".git",
"dune-project",
"dune-workspace",
function(name)
return name:match(".*%.ml$")
end,
},
},
},
},
},
}

Some files were not shown because too many files have changed in this diff Show more