Neovim
概述
Quarto Neovim 插件旨在不重复造轮子。 现有的 Neovim 生态系统中的插件被利用来提供完整的体验。 quarto-nvim 提供的一些功能以及 kickstarter 配置 中发现的插件增强的功能包括:
- Quarto 文档的预览。
- 对 Markdown 和嵌入语言的语法高亮。
- 嵌入语言的自动补全(例如 Python、R、Julia 等)。
- 运行单元格和选中行的命令和快捷键。
- 参考文献、文件路径、LaTeX 数学符号、表情符号的自动补全。
- 可选的拼写检查和自动补全。
- 代码片段。
- 将代码块导出为独立脚本。
更多截图
安装
quarto 插件和 kickstarter 配置的安装说明可以在各自仓库的 readme 文件中找到:
渲染和预览
要渲染和预览,请按 :
进入命令模式并输入 QuartoPreview 命令(如果按 tab 键,会有自动补全)。 在 kickstarter 配置中,有更多以 space q(空格键后跟 q,在普通模式下)开头的快捷方式。
在 Neovim 中运行 QuartoPreview
命令后,每次保存缓冲区时预览都会自动更新。
运行代码单元格
无需完全渲染文档即可迭代代码单元格。通过提供的配置,我们可以使用领导者键(<space>
)后跟c
(代表代码),然后是p
(代表Python)或i
(代表IPython)来打开我们选择的终端。
如果在按键之间稍作等待,屏幕底部会弹出一个小窗口,告知您现有的键绑定:
我们可以使用ctrl
加上vim方向键在代码和终端之间导航,并通过进入此终端缓冲区的插入模式向Python REPL输入命令。
要从quarto向Python REPL发送代码,我们导航到一个代码块并按下<space><cr>
(空格键后跟回车键)。负责将代码发送到各个地方的插件vim-slime会提示我们选择将代码发送到哪个终端,并预先填写我们最近创建的终端。
如果您想像在RStudio中一样使用ctrl+Enter发送代码,您需要告诉终端模拟器发送正确的键码。例如,在kitty终端中,配置如下所示:
map ctrl+shift+enter no_op
map shift+enter send_text all \x1b[13;2u
map ctrl+enter send_text all \x1b[13;5u
这是kickstarter配置所测试的内容。
以下是所有可用于执行单元格的命令和键盘快捷键:
Quarto 命令 | 键盘快捷键 |
---|---|
创建新终端 | space c x 其中 x 是 python、r、ipython、julia 或 bash 的首字母 |
选择终端 | space c c |
显示终端 ID | space c s |
运行当前单元格 | space Enter |
运行当前单元格 | ctrl Enter(插入或普通模式)1 |
运行选中的行 | Enter(可视模式) |
请注意,你可以使用 Alt+I 和 Alt+Shift+I 键盘快捷键快速插入新的代码单元格,第一个是 R 代码块,第二个是 Python 代码块。 根据你最常用的语言,可以自由地从 kickstarter 配置中更改此设置。
上下文帮助
在代码块中,你会获得相应语言的自动补全。 使用 Tab 和 Shift+Tab 遍历建议。
补全列表中的海獭意味着补全插件 cmp 从 otter.nvim 插件获取了补全建议,该插件通过将代码部分写入另一个(海獭)文档来在后台跟踪你的 Quarto 文档中的代码。
代码片段
代码片段是模板,使输入重复的代码模式(例如代码块、提示框、div 等)更容易。 你会在自动补全列表中找到它们,并可以通过按 Enter 触发它们。 有时它们包含多个光标可以跳转到的位置。 使用 ctrl+n 跳转到下一个位置。
例如,我们可能想要创建一个两列布局,所以我们输入 col2
并接受建议以获得
::: {layout-ncol=2}
:::
如果你发现其他有用的片段,欢迎提交拉取请求以扩展 kickstarter 配置中包含的片段列表。
文档导航
Vim 以其快速导航文档的能力而闻名。 在这里,我们只看一下 quarto-nvim 提供的一些附加功能。 有关完整选项范围,请参阅 vim/neovim 的文档以及 kickstarter 配置中包含的插件的文档。
- 按 space l o 切换部分概览
- 使用 [c 导航到下一个代码块或使用 ]c 导航到上一个代码块
- 使用 dio/cio/yio 删除/更改/剪切代码块
- 使用 dao/cao/yao 删除/更改/剪切带有分隔符的整个代码块
查看 Kickstarter 配置文件以获取更多灵感。
扩展 Quarto:在 Neovim 中进行 Lua 开发
由于 Lua 已经是用于配置 Neovim 的语言,并且 Kickstarter 配置安装了 Lua 语言服务器,因此将为 Quarto 扩展开发 启用代码补全和诊断功能。