定制Neovim的一键编译运行快捷键
  ISMU2Qnc5Xz0 2023年11月02日 94 0



tags: Vim Tips Lua

写在前面

最近使用的编辑器开始向nvim转变, 下面配置一个编译运行C/C++/Python/Lua/sh/make/…程序的一键编译自动命令, 采用纯lua的API编写, 参考了stackoverflow的一个回答​1​.

命令框架

主要采用vim的​​autocmd​​​, 搭配​​FileType​​事件, 使得vim能根据扩展名判断使用哪个函数调用.

然后就是用设置buffer内键映射的方法, 配置命令, 快捷键以及默认模式.

Python示例

下面以Python为例, 这里我用了我自己的虚拟环境中的Python解释器, 设置快捷键为​​<F7>​​, 在普通模式中运行代码.

开头的命令是保存然后划分窗口打开终端, ​​%​​​表示当前文件的文件名, 最后的​​i​​表示可以直接编辑输出的内容(方便获取标准输入).

最后的​​silent​​​选项用来取消回显(不在命令行窗口显示执行的命令), ​​noremaop​​表示不进行递归映射.

vim.api.nvim_create_autocmd("FileType", {
pattern = "python",
callback = function()
vim.api.nvim_buf_set_keymap(
0,
"n",
"<F7>",
":w<CR>:split<CR>:te time /opt/homebrew/Caskroom/miniforge/base/envs/tf26/bin/python3 %<CR>i",
{ silent = true, noremap = true }
)
end,
})

对于静态编译型语言, 例如C语言, 我配置了如下的快捷键, 依然采用​​<F7>​​作为编译运行的快捷键,

vim.api.nvim_create_autocmd("FileType", {
pattern = "c",
callback = function()
-- -fsanitize=address -fsanitize=undefined -D_GLIBCXX_DEBUG
vim.api.nvim_buf_set_keymap(
0,
"n",
"<F7>",
"<ESC>:w<CR>:split<CR>:te gcc-12 -std=c11 -Wshadow -Wall -o %:t:r.out % -g && time ./%:t:r.out<CR>i",
{ silent = true, noremap = true }
)
vim.api.nvim_buf_set_keymap(
0,
"n",
"<F8>",
"<ESC>:w<CR>:split<CR>:te clang -std=c11 -Wshadow -Wall -o %:t:r.out % -g -fsanitize=address -fsanitize=undefined -D_GLIBCXX_DEBUG && time ./%:t:r.out<CR>i",
{ silent = true, noremap = true }
)
end,
})

这里面我设置了输出文件为​​xxx.out​​​, 便于​​gitignore​​​识别. 这是通过​​%:t:r​​​实现的, 这个命令用来截取文件名, 但是不包含扩展名以及​​.​​.

并且由于我电脑上有两个cc编译器, 这里就设置了两种:​​gcc​​​和​​clang​​​, ​​clang​​​还配置了Google的内存检查工具​​asan​​.

其他类型的静态语言或者脚本都可以类似配置, 这里我给出了自己完整的配置代码:

​dotfile/run.lua at main · Apocaly-pse/dotfile (github.com)​​.

将上述代码保存为​​run.lua​​​, 并且将其导入​​init.lua​​​中, 只需要添加一句:​​require(core.run)​​即可.

参考


  1. ​How do i make a keymap to compile and run files in init.lua on neovim? - Stack Overflow​​​; ​​↩︎​


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  zwkHF6kqOgW1   2023年11月02日   75   0   0 python
  rRtXVg6Hk601   2023年11月02日   54   0   0 python
  zwkHF6kqOgW1   2023年11月02日   41   0   0 python