vscode 选择 python 的虚拟环境

快捷键cmd+p,输入:

> interp

选择python解释器就可以了。

image-20230702105659367

image-20230702105550779

另外,如何确认本机有多少个 虚拟环境:

conda env list
conda activate myenv
conda list
conda install package_name(包名):安装包

conda create -n pandas python=3.11

Mac 运行 chatglm2-6b

我是在 Mac studio M2 Max上运行的。这篇文章记录运行的过程。以下是我的一些版本信息:

  • MacOS 13.4
  • 共享内存:96G
  • conda 23.5.0
  • Python 3.11.4
  • pip 23.1.2

231009更新:

我把本地的模型全部删除了,更新了一版代码,用默认的THUDM/chatglm2-6b,在cli和web2下是OK的,web前端页面输出不全,不知道什么情况。

image-20231009155735974

比较好奇,它在哪里load的模型?我本地已经全部删除了全部模型,并且我也断网了。🤷

然后发现它的模型又由8个变成7个了,然后mps显卡又能用了。

image-20231009172403777

测试过好几次,只要对话稍微多一点,内存直接要撑爆了。

image-20231009163527028

真的有点伤心。

230818更新:

发现模型由7个变成了8个,老环境无法启动了,重新下载了新的模型,也把代码更新了。主要参考 Github 上这个文档里关于“Mac部署”和“本地加载”模型两个内容,修改使用mps即可:

model = AutoModel.from_pretrained("/Users/kelu/Documents/huggingface/chatglm-6b", trust_remote_code=True).half().to('mps')

但我没有办法正常对话:

image-20230818145248697

使用web_demo2.py 也是同样的问题:

streamlit run web_demo2.py

image-20230818145529072

迫不得已换成了cpu的版本,cpu能跑。

model = AutoModel.from_pretrained("/Users/kelu/Documents/huggingface/chatglm-6b", trust_remote_code=True).float()

担心pytorch版本问题可以用这串命令简单打印:

import torch
import transformers

print(f"PyTorch version: {torch.__version__}")
print(f"transformers version: {transformers.__version__}")

# Check PyTorch has access to MPS (Metal Performance Shader, Apple's GPU architecture)
print(f"Is MPS (Metal Performance Shader) built? {torch.backends.mps.is_built()}")
print(f"Is MPS available? {torch.backends.mps.is_available()}")

# Set the device      
device = "mps" if torch.backends.mps.is_available() else "cpu"
print(f"Using device: {device}")


# Create data and send it to the device
x = torch.rand(size=(3, 4)).to(device)
x

我的版本是 2.0.1。。当然也试过 nightly的版本:

image-20230818161032118

使用 gpu 都是和上边一样的报错。cpu能跑就不管它了。

一、环境准备

如果你还不熟悉python使用,可以参考我之前关于conda相关的文章,切换到虚拟环境进行操作。

conda create -n chatglm2_env python=3.11
conda activate chatglm2_env

image-20231009110714802

退出环境:

conda deactivate

在GitHub上下载源码。https://github.com/THUDM/ChatGLM2-6B

git clone https://github.com/THUDM/ChatGLM2-6B
cd ChatGLM2-6B

使用国内源(清华)安装依赖,否则速度很慢。(毕竟也是清华合作开源的项目)

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

image-20230702073622684

二、下载模型

https://cloud.tsinghua.edu.cn/d/674208019e314311ab5c/

也可以去 huggingface.co上下载模型。

brew install git-lfs

image-20230702074106842

安装。

image-20230702074138924

pip install gradio -i https://pypi.tuna.tsinghua.edu.cn/simple

可以在代码里指定下载好的模型地址。我是运行 python web_demo.py后等待开始下载,然后直接替换缓存。

我的默认的下载路径是这个:

~/.cache/huggingface/hub/models--THUDM--chatglm2-6b/snapshots/c57e892806dfe383cd5caf09719628788fe96379

image-20230702093408246

把下载好的文件直接替换这几个bin文件:

image-20230702133231166

也可以修改代码中的代码,诸如:

tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm2-6b", trust_remote_code=True).cuda()

THUDM/chatglm2-6b的替换,例如我的替换为:

"/Users/kelu/Documents/huggingface/chatglm-6b"

三、运行demo

vscode 选择解释器

cmd + p
> interpreter

image-20231009150158738

1. webdemo

python web_demo.py

image-20230702102520122

image-20230702101903189

可以注意到有warning:

/modeling_chatglm.py:1173: UserWarning: MPS: no support for int64 min/max ops, casting it to int32 (Triggered internally at /Users/runner/work/_temp/anaconda/conda-bld/pytorch_1682343668887/work/aten/src/ATen/native/mps/operations/ReduceOps.mm:1271.)
  if unfinished_sequences.max() == 0 or stopping_criteria(input_ids, scores):

运行demo2:

 pip install streamlit streamlit-chat -i https://pypi.tuna.tsinghua.edu.cn/simple

image-20230702105953743

streamlit run web_demo2.py

image-20230702110501103

2. 命令行demo

image-20230702111002384

3. api

image-20230702111601859

curl -X POST "http://127.0.0.1:8000" \
     -H 'Content-Type: application/json' \
     -d '{"prompt": "你和chatgpt哪个更好?", "history": []}'

image-20230702111734556

image-20230702111758665

四、一些遇到的问题:

  1. 只要开了系统代理就会报这个错。

     requests.exceptions.SSLError: HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /THUDM/chatglm2-6b/resolve/main/tokenizer_config.json (Caused by SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1002)')))
    

    查看了很多信息也无法解决。我把代理关掉之后又有:

         assert os.path.isfile(model_path), model_path
                ^^^^^^^^^^^^^^^^^^^^^^^^^^
       File "<frozen genericpath>", line 30, in isfile
     TypeError: stat: path should be string, bytes, os.PathLike or integer, not NoneType
    

    这个报错是缺少模型文件。

    所以不开代理就不会自动下载文件找不到模型,开了代理就下载不了模型。

    最后的解决办法竟然是开全局代理。如果是开规则模式的话,则要把 huggingface.co 加入进去。

  2. 运行报错:

       File "/Users/kelu/Workspace/Miniforge3/envs/pytorch_env/lib/python3.11/site-packages/torch/cuda/__init__.py", line 239, in _lazy_init
         raise AssertionError("Torch not compiled with CUDA enabled")
     AssertionError: Torch not compiled with CUDA enabled
    

    还是要仔细看 官方文档介绍,Mac部署需要修改模型的载入方法:

     model = AutoModel.from_pretrained("your local path", trust_remote_code=True).to('mps')
    

使用新版本的 jekyll,加快编译速度

我的 blog 一直使用 jekyll 3.8.6 来 build blog,这么多年下来攒了上千篇文章,编译速度一直令人发指,最近更是达到了惊人的 2000s。

最近在网上闲逛了 jekyll 编译速度的这个问题,似乎已经解决了,使用了最新的版本编译,速度缩短到了 20s,令我震惊。

image-20230620午後10458304

docker-compose.yml 注意修改的内容为 command 的内容即可:

bundle exec jekyll serve

image-20230620午後10803051


虚拟机 Parallels 安装备忘

本篇文章里我先卸载了老版本 Parallels,再安装特定版本 Parallels。参考 alsyundawy/Parallels

  1. 卸载老版本。

    删除 app 应用后,删除相关配置文件:

    rm -rf ~/Library/Parallels
    rm -rf /Library/Preferences/Parallels
    

    Screenshot 2

    Screenshot

  2. 下载

    https://download.parallels.com/desktop/v18/18.1.1-53328/ParallelsDesktop-18.1.1-53328.dmg
    

    我做了一个备份,不过 1M 小水管的速度会很慢。

  3. 安装

    要求升级,直接关闭窗口即可,会询问是否直接安装

    Screenshot 3

    直接关闭 x,然后选择使用当前版本安装。

    Screenshot 1

  4. 一些其他配置

    退出账号并关闭 Parallels Desktop。参考文末的参考资料下载。我也做了个备份

    pkill -9 prl_disp_service
    
    sudo cp -f prl_disp_service "/Applications/Parallels Desktop.app/Contents/MacOS/Parallels Service.app/Contents/MacOS/prl_disp_service"
    sudo chown root:wheel "/Applications/Parallels Desktop.app/Contents/MacOS/Parallels Service.app/Contents/MacOS/prl_disp_service"
    sudo chmod 755 "/Applications/Parallels Desktop.app/Contents/MacOS/Parallels Service.app/Contents/MacOS/prl_disp_service"
    
    sudo cp -f licenses.json "/Library/Preferences/Parallels/licenses.json"
    sudo chown root:wheel "/Library/Preferences/Parallels/licenses.json"
    sudo chmod 444 "/Library/Preferences/Parallels/licenses.json"
    sudo chflags uchg "/Library/Preferences/Parallels/licenses.json"
    sudo chflags schg "/Library/Preferences/Parallels/licenses.json"
    
    sudo codesign -f -s - --timestamp=none --all-architectures --entitlements ParallelsService.entitlements "/Applications/Parallels Desktop.app/Contents/MacOS/Parallels Service.app/Contents/MacOS/prl_disp_service"
    
  5. 修改host

  6. 问题:

    1. 无法联网

      重新安装 Parallels Tools。

      image-20230616午後35749215

      Screenshot 6

      重启系统,就好了。

    2. 修改系统 host 的命令备忘。

      # 加锁
      sudo chflags schg /etc/hosts
      sudo chflags uchg /etc/hosts
             
      # 解锁
      sudo chflags nouchg /etc/hosts
      sudo chflags noschg /etc/hosts
      

参考资料


ipad 下的终端工具 iSH

iOS 上我一直在用 prompt 作为 ssh 登录的工具。但直到我最近使用 Neovim 时候,才意识到它的问题——页面会定时的出现一个 q 字符。非常影响使用体验。

上网搜索了一番,发现了这个不错的命令行工具:https://github.com/ish-app/ish 官网:https://ish.app

根据官方的介绍,iSH是一个x86模拟器,在iOS设备上本地运行Linux shell环境。

image-20230614午後43018693

这篇文章简单记录它安装 ssh 工具的经过,作为一个终端,竟然没有自带 ssh 工具,这是我始料未及的。

  1. 下载。

    https://apps.apple.com/us/app/ish-shell/id1436902243

  2. 先查一下操作系统信息:

    cat /etc/issue
    cat /etc/os-release
    

    IMG_5D6D89A97ABC-1

    可以看到运行的是 alpine 系统,alpine 是一个非常精简的 linux 系统。

  3. 在 alpine 上安装 openssh

    alpine 的源管理工具是 apk,可以使用 apk 进行软件安装:

    apk update
    apk search openssh
    apk add openssh
    

    IMG_2B0E88FFB193-1

  4. 完成。

    非常完美。

    IMG_6534

  5. 字体安装

    可以参考这篇文章操作:neovim 安装使用备忘


neovim 安装使用备忘

记录配置 neovim 的过程。我已经是 vim 老鸟了,所以 vim 的相关内容就略去了。

ps: 由于 NvChad已经升级了,现在按照本篇的方法已经无法安装了(报 lazy clone 失败 ),参考我最新的文章《使用容器启动 Neovim 并自启动 Neovim 和 NvimTree》。不过这篇文章中对于字体的描述还是挺有用的,还可以看。

image-20241223午後50116120

零、neovim 介绍

Neovim 是 Vim 的一个分支,它的目标是改进 Vim 的代码库,使得 API 更容易实现,并改善用户体验和插件实现。Neovim 与 Vim 的主要区别有以下几点:

  • Neovim 支持使用 Lua 语言进行扩展和配置,这使得 Neovim 的性能更高,配置更简洁,插件更丰富。
  • Neovim 支持内置终端,可以在编辑器中运行 shell 命令或其他程序,而不需要切换到外部终端。
  • Neovim 支持异步任务,可以在后台执行一些耗时的操作,比如代码检查、格式化、补全等,而不会阻塞编辑器的响应。
  • Neovim 支持多进程架构,可以与其他程序进行通信和协作,比如使用 LSP(语言服务器协议)和 DAP(调试适配协议)来增强编程功能。
  • Neovim 支持新的用户界面协议,可以让第三方开发者创建不同风格的 GUI(图形用户界面)或 TUI(终端用户界面)。

一般来说,Neovim 的配置文件是保存在 ~/.config/nvim/init.vim 或者 ~/.config/nvim/init.lua 中。

一、安装 neovim

apt install neovim

查看版本

nvim --version

image-20230608午前92200356

版本太老了,卸载掉。

sudo apt remove neovim
sudo apt remove neovim-runtime

更新为最新版本。 目前最新版本是0.9。下载安装包

wget https://github.com/neovim/neovim/releases/download/stable/nvim-linux64.tar.gz
tar zxvf nvim-linux64.tar.gz
./nvim-linux64/bin/nvim

image-20230608午前95003642

以下是默认配置。

image-20230608午前95041438

我把安装位置调整一下,再做个软链到系统路径:

mv nvim-linux64 /var/local
ln -s /var/local/nvim-linux64/bin/nvim /usr/local/bin/nvim

image-20230608午前95838484

二、安装 NvChad

NvChad screenshot

NvChad 是一个基于 Neovim 的配置,它使用lua语言编写,旨在提供一个具有非常漂亮的UI和极快的启动时间(大约0.02秒~0.07秒)的基础配置。如官网的上图所示。

我们可以根据自己的喜好修改默认的设置,也可以删除一些自己不喜欢的配置,可以在自定义配置(lua/custom目录)中调整整个默认配置,并且这个目录是 git 忽略的,所以我们可以保持与NvChad最新的配置(main分支)同步。

2.1 Nerd Font 字体(可先跳过)

注:这一部分可以先跳过,待后续完全安装好了再处理

安装好之后如果没装字体,都会有一个疑问,为什么文件名的前面都有一个“?方框”?就是没装字体啦。

Nerd Font 字体:https://github.com/ryanoasis/nerd-fonts/releases/latest

Nerd Fonts 是一个针对开发人员的字体修补项目,其中包含高数量的字形。该项目补丁包括 Hack、Source Code Pro 等 50 多种修补字体,以及包括 Fira Code、JetBrains Mono 和 Meslo 等三种 Nerd Fonts 的 Termius 自定义字体。

字体安装只与你本地设备有关,我们是在哪个平台的设备展示内容(使用终端),就在那个平台下安装字体。

2.1.1 linux下
wget https://github.com/ryanoasis/nerd-fonts/releases/download/v3.0.2/SourceCodePro.zip
unzip SourceCodePro.zip -d /usr/share/fonts/SourceCodePro

确认字体放好了:

image-20230608午前111528812

2.1.2 Mac 下

搜索”font“:

image-20230608午後51537344

把下好的字体文件拖进去:

image-20230608午後51506925

再在 item2 里配置使用这个字体:

image-20230608午後51630594

就大功告成了:

image-20230608午後52024117

image-20230608午後52050234

2.1.3 iOS 下

参考了 reddit 的这个回答:https://www.reddit.com/r/ish/comments/nuzvir/how_to_install_nerd_fonts/

  1. 下载 Fontcase

    IMG_6539

  2. 下载字体

    https://github.com/ryanoasis/nerd-fonts/releases/download/v3.0.2/SourceCodePro.zip
    

    扔到一个路径下。

  3. Fonts import & install

    IMG_6528

  4. install 后下载字体

    IMG_6529

  5. 需要在系统里安装,在路径 General > VPN & Device Management 里安装:

    IMG_6530

  6. 在具体的 app 里就可以使用导入的字体了。例如我在 iSH 里可以设置这个字体了:

    IMG_6531

2.2 ripgrep

ripgrep 是一个基于行的搜索工具,它可以递归地在当前目录中搜索与正则表达式模式匹配的内容。后续使用 telescope 插件时需要它。

默认情况下,ripgrep会尊重 gitignore 规则并自动跳过隐藏文件/目录和二进制文件。它支持Windows、macOS和Linux,并提供二进制下载。该工具类似于其他流行的搜索工具,例如 The Silver Searcher、ack 和 grep。它可以替代许多其他搜索工具,因为它包含了它们的大部分功能并且通常更快。

它的使用方法可以参考 https://github.com/BurntSushi/ripgrep/blob/master/GUIDE.md#basics

我在 Debian 下下载deb 包安装:

curl -LO https://github.com/BurntSushi/ripgrep/releases/download/13.0.0/ripgrep_13.0.0_amd64.deb
sudo dpkg -i ripgrep_13.0.0_amd64.deb

2.3 sharkdp/fd

fd是一个用于在文件系统中查找条目的程序,是find的一个简单,快速和用户友好的替代品。使用 telescope 需要它。

我在 Debian 下下载deb 包安装:

curl -LO https://github.com/sharkdp/fd/releases/download/v8.7.0/fd_8.7.0_amd64.deb
sudo dpkg -i fd_8.7.0_amd64.deb

2.4 安装NvChad

我不想用默认的neovim配置,直接把配置文件做个备份,安装 NvChad

cd ~/.config
mv nvim nvim_bak
git clone https://github.com/NvChad/NvChad ~/.config/nvim --depth 1 && nvim

2.5 检查插件依赖

在终端输入 nvim 打开 neovim 。直接键盘输入 :checkhealth ,然后按下回车执行来检查依赖是否齐全:

image-20230608午前101933265

Ps: 这个自动提示真的太好用辣

image-20230608午前102024652

发现问题还是挺多的。

image-20230608午前102422773

按照提示修复相关的问题。

三、Neovim 目录结构

image-20230608午前114025825

四、NvChad 快捷键/键盘映射

https://nvchad.com/docs/config/mappings

  • 默认映射在core.mappings中定义。

    vi /root/.config/nvim/lua/core/mappings.lua
    
  • 在 nvim 中可以使用NvCheatsheetTelescope keymaps来列出所有映射。

image-20230609午後41810233

不知道是什么原因,无论我怎么修改,快捷键就是没办法生效。

我查看了 tmux.conf vimrc bashrc zshrc 等相关的文件,目前还没法解决。

只能使用 Neovim 默认的组合快捷键 Ctrl+w 了,再加上其他按键。先这么用着虽然不太方便,以后再研究:

  • +hijk 就是左上下右的窗口激活
  • +w 返回上个窗口
  • +n/s 就是桌面横向分割
  • +v 就是桌面纵向分割
  • +o 就是关闭所有其他窗口
  • +r 左右窗口调换

image-20230609午後71841205

除此之外,还有(我不确定这些是谁的快捷键,但是在 neovim 中可以使用)

  • Ctrl+O/T,在当前窗口向后开在 buff 里的历史文件。
  • Ctrl+I,在当前窗口向前在 buff 里的历史文件。
  • Shift+”,

五、常用 command 命令

在 command 模式下的命令

  • help 帮助
  • NvimTreeToggle,打开/关闭文件树
  • checkHealth
  • Lazy 查看 Lazy 管理的插件和插件加载情况
  • Telescope find_files 查询文件名 Telescope live_grep 查询内容
  • nvdash Neovim 的首页,可以进行更换主题,打开文件等操作

六、管理插件

lazy 插件管理

NvChad 使用 lazy.nvim 进行插件管理. 当一个插件被加载的时候, 它所依赖的插件也会自动加载。

在 nvim 界面内的 command 模式下输入 Lazy 即可进入管理界面,展示插件的加载状态, 安装和更新插件, 分析插件加载耗时等.

image-20230608午後10658703

Telescope 模糊搜索

telescope.nvim 由 Lua 实现, 支持扩展, 功能十分强大. 它几乎支持一切可以列在列表中的东西, 例如:

  • 文件内容模糊搜索
  • Tag 符号搜索
  • LSP 定义/引用搜索
  • 诊断信息预览
  • Treesitter 符号搜索
  • Git 提交记录搜索
  • Git 文件变动预览

可以检查是否安装好:

image-20230609午後61319808

后来我补完了 fd 的安装。

另外由于我的快捷键实在没调试成功,暂时先用命令进入:

:Telescope find_files

界面如下,搜索的速度跟飞一样

根据官方 github ,一共有几个命令:

" Find files using Telescope command-line sugar.
nnoremap <leader>ff <cmd>Telescope find_files<cr>
nnoremap <leader>fg <cmd>Telescope live_grep<cr>
nnoremap <leader>fb <cmd>Telescope buffers<cr>
nnoremap <leader>fh <cmd>Telescope help_tags<cr>

同时 Telescope 还管理了其他几个插件 :

  • plenary.nvim:
    • plenary.nvim 是一个通用的 Neovim Lua 工具库,提供了一系列功能和实用函数,帮助简化插件的开发过程。
    • 它包含了许多常用的功能,如异步任务管理、时间处理、表格操作、文件系统操作等。插件开发者可以使用这些功能来构建更高级和复杂的插件。
    • plenary.nvim 是许多 Neovim 插件的依赖库,包括 telescope.nvim。
  • extensions:
    • extensions 是 telescope.nvim 的插件扩展机制,用于为 telescope.nvim 添加额外的功能和集成。
    • extensions 可以为 telescope.nvim 提供与其他插件和工具的集成,扩展其搜索范围和功能。例如,有一些专门的 extensions 用于与 Git、LSP、文件预览等集成。
    • extensions 使用 plenary.nvim 提供的工具和功能,以实现与 telescope.nvim 的无缝集成。

NvimTreeToggle 文件树

用于在 Neovim 中切换显示和隐藏文件浏览器(File Explorer)窗口。与另外两个插件一起配合完成工作。

  1. nvim-tree.lua:
    • nvim-tree.lua 是一个用 Lua 语言编写的文件浏览器插件,它能够在 Neovim 中显示和管理文件和目录结构。
    • 该插件提供了丰富的功能,如文件和目录的打开、创建、删除、复制、重命名等操作,同时支持图标化的文件显示。
  2. nvim-web-devicons:
    • nvim-web-devicons 是一个 Neovim 插件和工具库,用于为文件和目录添加图标显示。
    • 该工具库提供了一系列图标,用于根据文件类型、扩展名等信息在文件浏览器中显示相应的图标。

nvim-treesitter 语法高亮、代码导航

nvim-treesitter 提供强大的语法解析和代码分析功能,使你能够更高效地编写和理解代码。它使用 Tree-sitter 引擎,这是一种高效且可扩展的语法解析器,能够对各种编程语言进行快速而准确的语法分析。

nvim-treesitter 的功能包括:

  1. 语法高亮:通过基于语法树的准确分析,提供更准确和更丰富的语法高亮显示。
  2. 自动缩进:根据语法树的结构,自动调整代码的缩进,使代码更加清晰和可读。
  3. 智能缩写:根据语法树的理解,智能地扩展和补全代码的缩写。
  4. 智能选择和操作:根据语法树的知识,提供更智能的选择和操作功能,如选择函数、类、条件语句等。
  5. 代码导航:根据语法树的结构,提供跳转到定义、查找引用、代码浏览等功能,以方便代码导航和理解。
  6. 代码重构:基于语法树的信息,提供代码重构功能,如重命名变量、提取函数等。
  7. 错误和警告提示:根据语法树的分析,提供更准确的错误和警告提示,帮助你发现和修复代码中的问题。

我在 check的时候报了两个warning:

image-20230608午後30757726

nvim-cmp 框架

nvim-cmp 是一个用于 Neovim 的代码补全框架,旨在提供灵活、高度可配置和可扩展的代码补全功能。它的设计理念是为了满足不同用户的需求,并与其他插件和补全源进行集成。

下面是 nvim-cmp 框架的一些关键特点和功能:

  1. 多源支持:nvim-cmp 支持多种不同的补全源(completion source),如缓冲区补全、LSP 补全、路径补全等。这些源可以根据用户的配置和需求进行选择和定制。
  2. 强大的配置选项:nvim-cmp 提供了丰富的配置选项,可以通过 Lua 代码进行定制。用户可以根据自己的偏好和需求来配置补全的行为、外观和交互方式,从而实现个性化的补全体验。
  3. 异步处理:nvim-cmp 使用异步处理的方式来提高补全的响应速度和效率。它可以在后台进行补全源的数据获取和处理,避免阻塞用户的编辑操作。
  4. 插件集成:nvim-cmp 可以与其他插件进行集成,如语法检查插件、代码片段插件等。这使得补全可以更好地与其他功能和工具结合使用,提供更全面和强大的开发环境。
  5. 基于事件的触发器:nvim-cmp 提供了灵活的触发器机制,可以根据用户定义的规则和条件来触发补全功能。这使得补全可以在用户希望的时候自动触发,提供更无缝的开发体验。
  6. 智能排序和过滤:nvim-cmp 提供了智能的排序和过滤机制,可以根据上下文和用户输入来对补全候选项进行排序和过滤,确保最相关和最有用的选项优先显示。

在 NvChad 中它集成了下面这些插件:

  1. luaSnip:

    • 插件功能:luaSnip 是一个用于 Neovim 的代码片段插件,它允许你定义和使用代码片段,提高代码编写的效率。此外,使用luaSnip还可以帮助避免手写代码时出错的可能性。

    friendly-snippets:

    • 插件功能:friendly-snippets 是一个包含了大量常见编程语言的友好代码片段集合。它与 luaSnip 插件兼容,可以作为 luaSnip 的片段库使用,提供丰富的代码片段供选择。
  2. cmp-buffer:

    • 插件功能:cmp-buffer 是 nvim-cmp 的一个源插件,用于提供缓冲区(buffer)的补全候选项。它可以在当前打开的缓冲区中进行补全,提供相应的候选项供选择。
  3. cmp-nvim-lsp:

    • 插件功能:cmp-nvim-lsp 是 nvim-cmp 的一个源插件,用于与 Neovim 的内置 LSP 客户端进行集成。它可以获取 LSP 提供的补全信息,包括函数、变量、类型等,提供相关的补全候选项。
  4. cmp-nvim-lua:

    • 插件功能:cmp-nvim-lua 是 nvim-cmp 的一个源插件,用于提供 Lua 语言的补全支持。它可以识别 Lua 代码中的函数、变量等信息,并提供相关的补全选项。
  5. cmp-path:

    • 插件功能:cmp-path 是 nvim-cmp 的一个源插件,用于提供文件路径的补全功能。它可以根据当前路径自动补全文件和文件夹的路径,方便快速访问文件系统中的内容。
  6. cmp_luasnip:

    • 插件功能:cmp_luasnip 是 nvim-cmp 的一个插件,用于与 luaSnip 插件进行集成。它可以将 luaSnip 的代码片段作为补全选项,与其他补全源一起提供补全功能。
  7. nvim-autopairs:

    • 插件功能:nvim-autopairs 是一个自动补全括号、引号等字符的插件,它可以根据光标位置自动插入和匹配这些字符,提高编写代码的效率。它与 nvim-cmp 配合使用,可以在补全时自动处理括号的闭合。

其他插件

  1. gitsigns.nvim:
    • gitsigns.nvim 是一个 Git 状态提示插件,用于在 Neovim 中显示 Git 仓库中修改的部分,并提供相关的操作和功能,如跳转到修改的位置、提交代码等。
  2. indent-blankline.nvim:
    • indent-blankline.nvim 是一个缩进线插件,用于在 Neovim 中显示缩进的可视化效果,帮助用户更清晰地看到代码的缩进层级。
  3. nvim-colorizer.lua:
    • nvim-colorizer.lua 是一个颜色预览插件,它可以在 Neovim 中将代码中的颜色值以真实的颜色显示,帮助用户更直观地理解和调整颜色。
  4. nvim-lspconfig:
    • nvim-lspconfig 是一个用于配置 Neovim 内置 LSP 客户端的插件。它提供了一系列预定义的配置选项,使得用户可以轻松地配置和启用不同的语言服务器。
  5. ui:
    • ui 涉及到 Neovim 的用户界面美化和定制化。这可能包括颜色方案、状态栏、标签栏等方面的插件和配置,用于改善用户界面的外观和体验。
  6. which-key.nvim:
    • which-key.nvim 是一个按键提示和快捷键帮助插件,用于在 Neovim 中显示当前按键的操作提示,帮助用户更好地了解和使用快捷键。
  7. Comment.nvim:
    • Comment.nvim 是一个注释插件,它提供了快速注释和取消注释的功能,简化了对代码进行注释的操作。
  8. mason.nvim:
    • mason.nvim 是一个 HTML 和 CSS 的快速插入插件,它可以帮助用户更快速和方便地插入常用的 HTML 和 CSS 代码片段。
  9. nvterm:
    • nvterm 是一个 Neovim 的终端仿真器,它将终端功能嵌入到 Neovim 中,使得用户可以在 Neovim 中直接执行命令和操作终端。

lsp

这部分内容以后再完善。

暂时不用的插件

以后可能也会用,先放在这了。

启动页: alpha-nvim.

重命名: renamer.nvim.

Terminal: toggleterm.nvim.

提供格式化、诊断: null-ls.nvim.

管理 tabs、buffers: bufferline.nvim.

七、报错解决

  1. 遇到一个报错 Error executing vim.schedule lua callback: /root/.config/nvim/lua/core/utils.lua:80: attempt to index a nil value

    image-20230608午後05828970

    和 gpt 进行了探讨,

    image-20230608午後44051179

    改了源码 vi .config/nvim/lua/core/utils.lu 第 80 行,插入了这句:

    mappings[section] = mappings[section] or {}
    

    最终如下:

    image-20230608午後10143234

    就好了。

    自动补全

    image-20230608午後41100143

参考资料