{"id":24515564,"url":"https://github.com/mkdir700/lvim","last_synced_at":"2026-04-13T18:01:10.612Z","repository":{"id":169200596,"uuid":"645110247","full_name":"mkdir700/lvim","owner":"mkdir700","description":"IDE configuration based on Lunarvim out of the box.","archived":false,"fork":false,"pushed_at":"2023-08-02T03:07:01.000Z","size":169,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-24T10:53:28.970Z","etag":null,"topics":["nvim","vim"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mkdir700.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-05-25T00:23:47.000Z","updated_at":"2023-08-01T07:00:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"a7042434-7282-4476-a85b-58a28e9f423d","html_url":"https://github.com/mkdir700/lvim","commit_stats":null,"previous_names":["mkdir700/lunarvim-config","mkdir700/lvim"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mkdir700/lvim","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkdir700%2Flvim","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkdir700%2Flvim/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkdir700%2Flvim/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkdir700%2Flvim/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mkdir700","download_url":"https://codeload.github.com/mkdir700/lvim/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkdir700%2Flvim/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31764317,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T15:25:13.801Z","status":"ssl_error","status_checked_at":"2026-04-13T15:25:09.162Z","response_time":93,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nvim","vim"],"created_at":"2025-01-22T01:18:18.719Z","updated_at":"2026-04-13T18:01:10.591Z","avatar_url":"https://github.com/mkdir700.png","language":"Lua","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LunarVim: Code on Neovim\n\n[English Doc](README.en.md)\n\n当前配置源自：https://github.com/mrbeardad/MyLunarVim\n\n在原配置的基础上根据自己的需求改动。\n\n以下为原文介绍：\n\n![mylunarvim](images/mylunarvim.png \"不多废话,直接上图\")\n\n\n- [LunarVim: Code on Neovim](#lunarvim-code-on-neovim)\n  - [前言](#前言)\n  - [安装](#安装)\n  - [功能介绍](#功能介绍)\n    - [目录结构](#目录结构)\n    - [颜色主题](#颜色主题)\n    - [状态栏](#状态栏)\n    - [标签栏](#标签栏)\n    - [滚动条](#滚动条)\n    - [其他](#其他)\n  - [如何定制](#如何定制)\n    - [Language Server](#language-server)\n    - [Linter](#linter)\n    - [Formatter](#formatter)\n    - [Syntax](#syntax)\n  - [快捷键](#快捷键)\n\n## 前言\n\n自从 NeoVim 支持[LSP](https://microsoft.github.io/language-server-protocol/)并转用[Lua](https://www.lua.org/about.html)作为首席插件语言代替又丑又慢 VimL 后，使用体验直接翻倍。\n[LunarVim](https://github.com/LunarVim/LunarVim)就是基于全新 Neovim Lua 生态打造的配置集合，旨在将 Neovim 打造成高性能的 IDE。迁移到 LunarVim 后，nvim 的启动时间也大幅降低。\n\n## 安装\n\n首先你需要安装[LunarVim](https://www.lunarvim.org/01-installing.html#installation)，安装依赖包括:\n\n1. [neovim-0.7](https://github.com/neovim/neovim/releases)或以上版本\n2. [git](https://git-scm.com/downloads)\n3. [python pip](https://pip.pypa.io/en/stable/installation/)\n4. [nodejs npm](https://www.npmjs.com/)\n5. [rust cargo](https://www.rust-lang.org/)(可选，你可以手动安装 ripgrep 和 fd-find)\n\n```sh\nbash \u003c(curl -s https://raw.githubusercontent.com/lunarvim/lunarvim/master/utils/installer/install.sh)\n```\n\n如上，官方的安装脚本会提示你是否需要自动安装依赖，可能会有如下问题:\n\n1. 记得挂梯子 [(✿◡‿◡)](## \"真的会谢\")\n2. 记得设置 npm 的 prefix 以设置可访问的全局安装路径\n\n   ```sh\n   npm config set perfix ~/.local\n   ```\n\n3. 你可能需要将 _~/.cargo/bin_ 加入你的环境变量`PATH`\n\n然后，安装本配置:\n\n```sh\n# backup original config\nmv ~/.config/lvim{,.bak}\n# install my config\ngit clone https://github.com/mrbeardad/MyLunarVim ~/.config/lvim\n# install all plugins\nlvim --headless -c 'autocmd User PackerComplete quitall' -c 'PackerSync'\n```\n\n`lvim`是 LunarVim 官方提供的启动脚本，可以与原来的配置隔离开来。\n\n## 功能介绍\n\n### 目录结构\n\n```txt\nlvim/\n    config.lua          配置入口和一些LunarVim内建配置\n    lua/user/\n        plugin.lua      插件加载\n        keybinding.lua  快捷键定义\n        neovim.lua      neovim原生配置\n        alpha.lua       alpha启动页面配置，包含大量字符画\n        statusline.lua  lualine状态栏配置\n        treesitter.lua  treesitter相关配置\n        setup/          在插件加载前的插件配置\n        config/         在插件加载后的插件配置\n```\n\n### 颜色主题\n\n有两个颜色主题，[catppuccin](https://github.com/catppuccin/nvim)和[tokyonight](https://github.com/folke/tokyonight.nvim)，根据启动时间选择其中一款加载。\n\n![catppuccin](https://user-images.githubusercontent.com/56817415/193099598-a5482fa9-bc22-42e8-ad61-ad73303f781f.png \"官方图\")\n\n![tokyonight](https://user-images.githubusercontent.com/292349/115295095-3a9e5080-a10e-11eb-9aed-6054488c46ce.png \"官方图\")\n\n### 状态栏\n\n![lualine](images/lualine.png)\n左边：\n\n1. 模式（颜色区分）\n2. 工作目录\n3. git branch\n4. git status\n\n右边：\n\n1. 语言诊断信息\n2. 该语言是否支持 TreeSitter\n3. 该语言支持的 Language Server，Linter，Formatter\n4. 文件类型\n5. 编码类型（`\\n`还是`\\r\\n`）\n6. 文件大小\n7. 光标位置\n8. 光标位置百分比\n\n### 标签栏\n\n![bufferline](images/bufferline.png)\n\n- 高亮当前缓冲区\n- 显示文件类型图标\n- 显示语言诊断信息\n- 显示缓冲区是否被修改\n\n### 滚动条\n\n![scrollbar](images/scrollbar.png)\n\n- 显示语言诊断信息等等，跟 vscode 类似\n\n### 其他\n\n总之插件列表都在`lua/user/plugin.lua`中，也分了类，你可以浏览并尝试修改。\n\n## 如何定制\n\n搭建一个语言的开发环境，你需要什么?\n\n### [Language Server](https://microsoft.github.io/language-server-protocol/implementors/servers/)\n\n![lsp](images/lsp.webp)\n\n最初由微软提议的语言服务协议(LSP)现在可谓百花齐放，它运行在后台解析代码符号并指导客户端编辑器的行为: 代码补全，语法提示，代码格式化，类型提示，文档提示，代码导航，符号搜索，重构等等功能.\n\n现在 Neovim 已内建支持 LSP，不再像以前那样，有许多配置提供都能提供以上功能，要想获取结果就要针对每个插件都做适配. Neovim 内建 LSP 后提供了同一接口获取有关信息，极大方便了插件生态发展.\n\n相关插件：\n\n- [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig)：提供基础的 LSP 配置封装 neovim lsp 接口，并为大多数 language server 提供了基本配置；\n- [nlsp-settings](https://github.com/tamago324/nlsp-settings.nvim/tree/main/schemas/_generated)：以 Json 的形式添加 language server 配置；\n- [nvim-lsp-installer](https://github.com/williamboman/nvim-lsp-installer)：提供命令以方便下载绝大多数 language server；\n- [null-ls.nvim](https://github.com/jose-elias-alvarez/null-ls.nvim)：将额外的 Linter 和 Formatter 整合到 lsp 接口\n\n\u003e 提示: 快捷键`Space L i`或命令`:LvimInfo`可查看当前语言服务信息\n\nLunarVim 默认当你打开文件时自动下载对应 Language Server，你可能有如下情景:\n\n- 有些时候自动安装会有问题，可尝试手动安装`:LspInstall \u003clanguage server\u003e`查看一下报错信息.(按 Tab 会自动补全 language server)\n- 对于某种语言换用非默认 lanuage server，以 python 为例\n\n  1. 在 config.lua 中添加,\n\n     ```lua\n     vim.list_extend(lvim.lsp.automatic_configuration.skipped_servers，{ \"pyright\" }) -- 关闭默认的pyright\n     ```\n\n  2. 保存执行`:LvimCacheReset`重置原有 language server 配置缓存\n\n  3. 在~/.config/lvim/after/ftplugin/python.lua 中添加:(文件不存在则手动创建)\n\n     ```lua\n     require(\"lvim.lsp.manager\").setup(\"jedi_language_server\")\n     ```\n\n- 修改 language server 启动参数等，执行`:LspSettings \u003clanguage server\u003e`(Tab 补全)，这会以 json 格式编写配置，示例见(安装 jsonls 可有自动补全功能哦)\n\n### [Linter](https://github.com/caramelomartins/awesome-linters)\n\n静态分析器可以为你的代码提供额外的提醒警告，例如指出某些代码风格的问题，以及一些常见的 bug. 大多数语言服务提供的语法警告功能并不强大，也仅仅是语法级别的错误提示，所以才需要额外的静态解析器.\n\nLunarVim 默认均未启动 Linter 与 Formatter，创建`~/.config/lvim/after/ftplugin/\u003clang_type\u003e.lua`，并添加启动代码即可，示例可见[LunarVim](https://www.lunarvim.org/languages/#linting-formatting).\n\n你可以执行`:NulllsInfo`查看当前文件类型对应可用的 Linter 和 Formatter\n\n```lua\nlocal formatters = require \"lvim.lsp.null-ls.formatters\"\nformatters.setup {\n  { command = \"black\" },\n  {\n    command = \"prettier\",\n    args = { \"--print-width\"，\"100\" },\n    filetypes = { \"typescript\"，\"typescriptreact\" },\n  },\n}\n\nlocal linters = require \"lvim.lsp.null-ls.linters\"\nlinters.setup {\n  { command = \"flake8\" },\n  {\n    command = \"shellcheck\",\n    args = { \"--severity\"，\"warning\" },\n  },\n  {\n    command = \"codespell\",\n    filetypes = { \"javascript\"，\"python\" },\n  },\n}\n\nlocal code_actions = require \"lvim.lsp.null-ls.code_actions\"\ncode_actions.setup {\n  {\n    command = \"proselint\"\n  },\n}\n```\n\n### Formatter\n\n代码格式化工具，一些 Language Server 并未内置格式化功能，此时需要借助外部工具. 配置同上[Linter](#linter)\n\n### Syntax\n\n良好的语法高亮可以让我们的代码看起来更舒服，让我们更容易区分语句,函数,变量等.\n\n[nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter)为此而生，它会对代码进行语法解析，高亮更加精准.\n\n在 `lua/user/treesitter.lua` 中设置添加你的语言:\n\n```lua\n-- 默认配置\nlvim.builtin.treesitter.ensure_installed = {\n  \"bash\",\n  \"vim\",\n  \"lua\",\n  \"c\",\n  \"make\",\n  \"cpp\",\n  \"cmake\",\n  \"go\",\n  \"gomod\",\n  \"python\",\n  \"javascript\",\n  \"typescript\",\n  \"tsx\",\n  \"http\",\n  \"html\",\n  \"css\",\n  \"markdown\",\n  \"json\",\n  \"jsonc\",\n  \"yaml\",\n  \"toml\",\n  \"comment\",\n  \"regex\",\n  \"dockerfile\",\n}\n```\n\n## 快捷键\n\n快捷键几乎与[我的 VSCode 配置](https://github.com/mrbeardad/MyIDE/blob/master/vscode.md)相同，为了在终端中使用 ctrl+shift 开头的按键，以及区分 Tab 和 Ctrl+i，我重映射了我的终端按键。\n\n我的 Windows Terminal 部分配置\n\n```json\n  \"actions\": [\n    {\n      \"keys\": \"ctrl+shift+f\",\n      \"command\": {\n        \"action\": \"sendInput\",\n        \"input\": \"\\u001b[70;6u\"\n      }\n    },\n    {\n      \"keys\": \"ctrl+shift+h\",\n      \"command\": {\n        \"action\": \"sendInput\",\n        \"input\": \"\\u001b[72;6u\"\n      }\n    },\n    {\n      \"keys\": \"ctrl+alt+enter\",\n      \"command\": {\n        \"action\": \"sendInput\",\n        \"input\": \"\\u001b[13;7u\"\n      }\n    },\n    {\n      \"keys\": \"ctrl+i\",\n      \"command\": {\n        \"action\": \"sendInput\",\n        \"input\": \"\\u001bI\"\n      }\n    },\n    {\n      \"keys\": \"ctrl+shift+j\",\n      \"command\": {\n        \"action\": \"sendInput\",\n        \"input\": \"\\u001b[74;6u\"\n      }\n    },\n    {\n      \"keys\": \"ctrl+shift+k\",\n      \"command\": {\n        \"action\": \"sendInput\",\n        \"input\": \"\\u001b[75;6u\"\n      }\n    },\n    {\n      \"keys\": \"ctrl+shift+l\",\n      \"command\": {\n        \"action\": \"sendInput\",\n        \"input\": \"\\u001b[76;6u\"\n      }\n    },\n    {\n      \"keys\": \"ctrl+shift+s\",\n      \"command\": {\n        \"action\": \"sendInput\",\n        \"input\": \"\\u001b[83;6u\"\n      }\n    },\n    {\n      \"keys\": \"ctrl+shift+e\",\n      \"command\": {\n        \"action\": \"sendInput\",\n        \"input\": \"\\u001b[69;6u\"\n      }\n    },\n    {\n      \"keys\": \"ctrl+shift+o\",\n      \"command\": {\n        \"action\": \"sendInput\",\n        \"input\": \"\\u001b[79;6u\"\n      }\n    },\n    {\n      \"keys\": \"ctrl+shift+t\",\n      \"command\": {\n        \"action\": \"sendInput\",\n        \"input\": \"\\u001b[84;6u\"\n      }\n    },\n    {\n      \"keys\": \"ctrl+shift+m\",\n      \"command\": {\n        \"action\": \"sendInput\",\n        \"input\": \"\\u001b[77;6u\"\n      }\n    },\n    {\n      \"keys\": \"ctrl+shift+p\",\n      \"command\": {\n        \"action\": \"sendInput\",\n        \"input\": \"\\u001b[80;6u\"\n      }\n    }\n  ],\n```\n\n如果你也使用 tmux，需要添加以下配置：\n\n```sh\n# ----------------------------=== General ===--------------------------\nset -g default-terminal \"screen-256color\"\nif 'infocmp -x tmux-256color \u003e /dev/null 2\u003e\u00261' 'set -g default-terminal \"tmux-256color\"'\n# true color support\nset -ga terminal-overrides \",*256color:RGB\"\n# undercurl support\nset -ga terminal-overrides ',*:Smulx=\\E[4::%p1%dm'\n# underscore colours support\nset -ga terminal-overrides ',*:Setulc=\\E[58::2::%p1%{65536}%/%d::%p1%{256}%/%{255}%\u0026%d::%p1%{255}%\u0026%d%;m'\n# cursor style support\nset -ga terminal-overrides ',*:Ss=\\E[%p1%d q:Se=\\E[1 q'\n\nset -g extended-keys always  # enable extended keys in escape sequence, for example, ctrl+shift+letter\nset -g escape-time 10\nset -g focus-events on\nset -g mouse on\nset -g set-clipboard on\nset -g mode-keys vi\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkdir700%2Flvim","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmkdir700%2Flvim","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkdir700%2Flvim/lists"}