简介¶
在本书中,您将找到使用 Neovim 和 NvChad 来创建功能齐全的 集成开发环境 (IDE) 的方法。
我说“方法”,因为有很多可能性。作者在这里专注于使用这些工具来编写 markdown,但如果 markdown 不是您的重点,请不要担心,只需继续阅读即可。如果您不熟悉这些工具(NvChad 或 Neovim),那么本书将为您提供这两个工具的介绍,如果您逐步完成这些文档,您很快就会意识到您可以设置此环境来帮助您完成任何编程或脚本编写需求。
想要一个 IDE 来帮助编写 Ansible 剧本?您可以得到它!想要一个用于 Golang 的 IDE?那也可以。只是想要一个编写 BASH 脚本的良好界面?它也可用。
通过使用 语言服务器协议 和 代码检查器,您可以设置一个专门为您定制的环境。最棒的是,一旦您设置了环境,就可以通过使用 lazy.nvim 和 Mason(都在这里介绍)快速更新它,以便在有新变化时进行更新。
由于 Neovim 是 Vim 的分支,因此整体界面对于 *vim* 用户来说会很熟悉。如果您不是 *vim* 用户,您可以使用本书快速学习命令的语法。这里涵盖了很多信息,但很容易遵循,一旦您完成了内容,您就将拥有足够的知识来使用这些工具为 *您的*需求构建自己的 IDE。
作者的意图是 **不** 将本书分解成章节。原因是这意味着必须遵循的顺序,而且大多数情况下,这不是必需的。您 *需要* 从此页面开始,阅读并遵循“其他软件”、“安装 Neovim”和“安装 NvChad”部分,但从那里开始,您可以选择如何继续。
使用 Neovim 作为 IDE¶
Neovim 的基本安装为开发提供了一个出色的编辑器,但它还不能称为 IDE;所有更高级的 IDE 功能,即使已经预设,也尚未激活。为此,我们需要将必要的配置传递给 Neovim,而这就是 NvChad 来帮助我们的地方。这使我们能够仅通过一个命令就能立即拥有一个基本配置!
配置是用 Lua 编写的,Lua 是一种非常快的编程语言,它允许 NvChad 具有非常快的命令和按键执行时间。这也是通过用于插件的 延迟加载 技术实现的,该技术只在需要时加载插件。
事实证明,界面非常干净和舒适。
正如 NvChad 的开发者所强调的那样,该项目仅旨在作为构建您自己的个人 IDE 的基础。后续的定制是通过使用插件完成的。
主要功能¶
- 旨在快速。从编程语言的选择到加载组件的技术,一切都旨在最大限度地缩短执行时间。
- 美观的界面。尽管是一个 *cli* 应用程序,但界面在图形上看起来现代而美观,而且所有组件都完美地契合 UI。
- 极度可配置。由于从基础应用程序 (NeoVim) 获得的模块化,编辑器可以完美地适应您的需求。但是,请记住,当我们谈论定制时,我们指的是功能,而不是界面的外观。
- 自动更新机制。 编辑器配备了一种机制(通过使用 *git*),允许您使用简单的
:NvChadUpdate
命令进行更新。 - 由 Lua 驱动。 NvChad 的配置完全用 *lua* 编写,这使其能够无缝地集成到 Neovim 的配置中,并利用其所基于的编辑器的全部潜力。
- 众多内置主题。 该配置已经包含了许多主题供您使用,始终牢记我们谈论的是一个 *cli* 应用程序,主题可以通过
<leader> + th
键进行选择。
参考资料¶
Lua¶
什么是 Lua?¶
Lua 是一种强大、轻量级的脚本语言,支持多种编程方法。 “Lua” 这个名字来自葡萄牙语,意思是“月亮”。
Lua 由里贝托·伊埃鲁萨林斯基、路易斯·恩里克·德·菲格雷多和瓦尔德马尔·塞勒斯在里约热内卢天主教大学开发。他们开发它的必要性是因为直到 1992 年巴西对硬件和软件的进口实行严格的管制,出于纯粹的必要性,这三位程序员开发了自己的脚本语言,称为 Lua。
由于 Lua 主要专注于脚本,它很少用作独立的编程语言。相反,它最常被用作可以集成(嵌入)到其他程序中的脚本语言。
Lua 用于开发视频游戏和游戏引擎(Roblox、Warframe..),作为许多网络程序(Nmap、ModSecurity..)中的编程语言,以及作为工业程序中的编程语言。Lua 还用作开发人员可以集成到他们的程序中的库,以通过仅作为宿主应用程序的组成部分来启用脚本功能。
Lua 的工作原理¶
Lua 主要包含两个组件
- Lua 解释器
- Lua 虚拟机 (VM)
Lua 不像其他语言(例如 Python)那样通过 Lua 文件直接解释。相反,它使用 Lua 解释器将 Lua 文件编译成字节码。Lua 解释器高度可移植,能够在多种设备上运行。
主要特点¶
- 速度:Lua 被认为是在解释型脚本语言中速度最快的编程语言之一;与大多数其他编程语言相比,它可以更快地执行非常性能密集的任务。
- 大小:与其他编程语言相比,Lua 的体积非常小。这种小巧的体积非常适合将 Lua 集成到多个平台,从嵌入式设备到游戏引擎。
- 可移植性和集成:Lua 的可移植性几乎是无限的。任何支持标准 C 编译器的平台都可以毫无问题地运行 Lua。Lua 不需要复杂的重写即可与其他编程语言兼容。
- 简洁性:Lua 的设计简洁,但功能强大。Lua 的主要功能之一是元机制,它允许开发人员实现自己的功能。语法简单易懂,任何人都可以学习 Lua 并将其应用于自己的程序中。
- 许可证:Lua 是免费的开源软件,根据 MIT 许可证发布。这允许任何人将它用于任何目的,而无需支付任何许可证费用或版税。
Neovim¶
Neovim 在其 专用页面 上进行了详细介绍,因此我们只关注主要功能,它们是
- 性能:非常快。
- 可定制性:丰富的插件和主题生态系统。
- 语法高亮:与 Treesitter 和 LSP 集成(需要一些额外的配置)。
- 跨平台:Linux、Windows 和 macOS
- 许可证:Mit:一个简短且简单的宽松许可证,其条件仅要求保留版权和许可证声明。
LSP¶
什么是 Language Server Protocol?
语言服务器是一个标准化的语言库,它使用自己的过程(协议)来提供对诸如自动完成、转到定义或鼠标悬停定义等功能的支持。
语言服务器协议 (LSP) 背后的理念是标准化工具和服务器之间的通信协议,以便单个语言服务器可以在多个开发工具中重复使用。这样,开发人员只需将这些库集成到他们的编辑器中,并引用现有的语言基础设施,而无需自定义他们的代码来包含它们。
tree-sitter¶
Tree-sitter 主要包含两个组件:解析器生成器 和 增量解析库。它可以构建源文件的语法树,并在每次更改时有效地更新它。
解析器是一个组件,它将数据分解成更小的元素,以方便其转换为另一种语言,或者像我们这种情况一样,然后传递给解析库。一旦源文件被分解,解析库就会解析代码并将其转换为语法树,允许以更智能的方式操作代码的结构。这使得可以改进(并加速)
- 语法高亮
- 代码导航
- 重构
- 文本对象和移动
LSP 和 tree-sitter 的互补性。
虽然看起来这两个服务(LSP 和 tree-sitter)是多余的,但它们实际上是互补的,因为 LSP 在项目级别工作,而 tree-sitter 仅在打开的源文件中工作。
现在我们已经解释了用于创建 IDE 的技术,我们可以继续介绍配置 NvChad 所需的 附加软件。
作者:弗朗哥·科鲁西
贡献者:史蒂文·斯宾塞、安娜·日尔诺娃