定制Neovim的一键编译运行快捷键
tags: Vim Tips Lua
写在前面
最近使用的编辑器开始向nvim转变, 下面配置一个编译运行C/C++/Python/Lua/sh/make/…程序的一键编译自动命令, 采用纯lua的API编写, 参考了stackoverflow的一个回答1.
命令框架
主要采用vim的autocmd, 搭配FileType事件, 使得vim能根据扩展名判断使用哪个函数调用.
然后就是用设置buffer内键映射的方法, 配置命令, 快捷键以及默认模式.
Python示例
下面以Python为例, 这里我用了我自己的虚拟环境中的Python解释器, 设置快捷键为, 在普通模式中运行代码.
开头的命令是保存然后划分窗口打开终端, %表示当前文件的文件名, 最后的i表示可以直接编辑输出的内容(方便获取标准输入).
最后的silent选项用来取消回显(不在命令行窗口显示执行的命令), noremaop表示不进行递归映射.
vim.api.nvim_create_autocmd("FileType", {pattern = "python",callback = function()vim.api.nvim_buf_set_keymap(0,"n","" ,":w:split:te time /opt/homebrew/Caskroom/miniforge/base/envs/tf26/bin/python3 %i" ,{ silent = true, noremap = true })end,})
对于静态编译型语言, 例如C语言, 我配置了如下的快捷键, 依然采用作为编译运行的快捷键,
vim.api.nvim_create_autocmd("FileType", {pattern = "c",callback = function()-- -fsanitize=address -fsanitize=undefined -D_GLIBCXX_DEBUGvim.api.nvim_buf_set_keymap(0,"n","" ,":w:split:te gcc-12 -std=c11 -Wshadow -Wall -o %:t:r.out % -g && time ./%:t:r.outi" ,{ silent = true, noremap = true })vim.api.nvim_buf_set_keymap(0,"n","" ,":w:split:te clang -std=c11 -Wshadow -Wall -o %:t:r.out % -g -fsanitize=address -fsanitize=undefined -D_GLIBCXX_DEBUG && time ./%:t:r.outi" ,{ 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)即可.
参考
How do i make a keymap to compile and run files in init.lua on neovim? - Stack Overflow; ↩︎
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
