telescope.nvim 和 telescope-fzf-native.nvim 插件安装之前置条件
趁着国庆假期,把默认 Neovim 的配置从原来的单个 init.lua 配置文件,重构为系统化的多个配置文件。同时也熟悉一下如何一步一步从零使用 Lazyvim 管理插件。
问题出在 telescope-fzf-native.nvim 这个插件安装之后,每次启动 Neovim 都会出现以下报错:
Failed to run `config` for telescope.nvim
...a/lazy/telescope.nvim/lua/telescope/_extensions/init.lua:10: 'fzf' extension doesn't exist or isn't installed: ...nvim-data/lazy/telescope-fzf-native.nvim/lua/fzf_lib.lua:11: cannot load module 'C:/Users/Alowr/AppData/Local/nvim-data/lazy/telescope-fzf-native.nvim/lua/../build/libfzf.dll': 找不到指定的模块。^M # stacktrace: - telescope.nvim\lua\telescope\_extensions\init.lua:10 _in_ **load_extension** - telescope.nvim\lua\telescope\_extensions\init.lua:62 _in_ **load_extension** - lua/alowree/plugins/telescope.lua:40 _in_ **config** - lua/alowree/lazy.lua:14 - init.lua:2
我的电脑平行安装了多个 Neovim 版本,我发现每个配置在运行时都会因为这个插件产生同样的报错。于是为了解决这个报错,尝试了以下几种方法。
安装编译软件
进入目录 C:\Users\Alowr\AppData\Local\nvim-data\lazy\telescope-fzf-native.nvim
,有个 README.md 文件,里面说:
This requires:
- CMake, and the Microsoft C++ Build Tools on Windows
- CMake, make and GCC or Clang on Linux and MacOS
由于使用的电脑是 Windows 系统,于是按照上述指引中的第一条分别安装指定的两个软件:
- CMake
- Microsoft C++ Build Tools
安装之后,重启 Neovim 同样的报错仍然存在,并捕捉到以下关键信息:
make: *** [Makefile:23: build/libfzf.dll] Error 1
此时,在 Markdown 文件编辑过程中,<leader>ff
无法调出查找功能。
使用 zig 替换 gcc
进入目录 C:\Users\Alowr\AppData\Local\nvim-data\lazy\telescope-fzf-native.nvim
,有个 Makefile 文件,打开,根据报错信息提示,可以发现问题代码在第 23 行。
于是尝试注释掉第 4 行,添加第 5 行,更换 gcc
为 zig cc
命令,并将 zig.exe 安装路径添加至环境变量。
CFLAGS += -Wall -Werror -fpic -std=gnu99
ifeq ($(OS),Windows_NT)
# CC = gcc
CC = zig cc
TARGET := libfzf.dll
ifeq (,$(findstring MSYS,$(MSYSTEM)))
# On Windows, but NOT msys
MKD = cmd /C mkdir
RM = cmd /C rmdir /Q /S
else
MKD = mkdir -p
RM = rm -rf
endif
else
MKD = mkdir -p
RM = rm -rf
TARGET := libfzf.so
endif
all: build/$(TARGET)
build/$(TARGET): src/fzf.c src/fzf.h
$(MKD) build
$(CC) -O3 $(CFLAGS) -shared src/fzf.c -o build/$(TARGET)
build/test: build/$(TARGET) test/test.c
$(CC) -Og -ggdb3 $(CFLAGS) test/test.c -o build/test -I./src -L./build -lfzf -lexaminer
.PHONY: lint format clangdhappy clean test ntest
lint:
luacheck lua
format:
clang-format --style=file --dry-run -Werror src/fzf.c src/fzf.h test/test.c
test: build/test
@LD_LIBRARY_PATH=${PWD}/build:${PWD}/examiner/build:${LD_LIBRARY_PATH} ./build/test
ntest:
nvim --headless --noplugin -u test/minrc.vim -c "PlenaryBustedDirectory test/ { minimal_init = './test/minrc.vim' }"
clangdhappy:
compiledb make
clean:
$(RM) build
重启 Neovim 报错仍然存在。这说明,这个 Makefile 中的脚本在经过上述修改之后,仍然未能运行成功。但是根据报错提示信息中行号的变化,我们可以肯定报错原因就是 build 命令未能运行成功所致。
手动编译生成
进入目录 C:\Users\Alowr\AppData\Local\nvim-data\lazy\telescope-fzf-native.nvim
,在当前目录打开 PowerShell 并运行以下命令:
```ps
zig cc -O3 -Wall -Werror -fpic -std=gnu99 -shared src/fzf.c -o build/libfzf.dll
```
这时当前目录会生成一个 build 子目录,包含一些文件。
重启 Neovim 发现这个插件导致的报错不再出现,<leader>ff
已经可以正常使用。
小结
由于本人不使用 C 语言,上述涉及到的 CMake,GCC,Clang 等一系列工具相互之间的替代关系也不甚明了,只是想安静地使用 Neovim 及其相关插件,便不再深究。
- 由于解决这个问题似乎根本没有使用到 CMake 和 Microsoft C++ Build Tools 这两个软件,尤其是后者占用空间接近 7G,选择删除
- 此次暂时手动解决,默认版本后续是否存在其他问题尚未可知,可以其他配置版本中再小心比较和对照
问题再探
查看官方文档 nvim-telescope/telescope-fzf-native.nvim: FZF sorter for telescope written in c
Make (Linux, MacOS, Windows with MinGW)
This requires `gcc` or `clang` and `make`
由于 make
已经事先安装,此时只需安装 gcc 即可。
- 下载 MinGW-w64 压缩包 Releases · niXman/mingw-builds-binaries (github.com)
- 解压并将整个文件目录
mingw64
移动至D:Program Files\
目录下,再将D:\Program Files\mingw64\bin
添加至环境变量 - 重启电脑,打开 PowerShell 并运行命令
gcc -v
,如果可以正确显示版本信息,表示安装成功 - 删除原有插件
telescope-fzf-native.nvim
,重启 Neovim 会自动重新安装,安装完毕会正常创建 build 脚本
完美解决。