9

vim ide

 10 months ago
source link: https://blog.kelu.org/tech/2023/06/06/vim-ide.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neovim.jpg

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

安装 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

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 自定义字体。

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

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

搜索”font“:

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

image-20230608午後51506925

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

image-20230608午後51630594

就大功告成了:

image-20230608午後52024117
image-20230608午後52050234

参考了 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 里安装:

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

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

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

安装NvChad

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

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

检查插件依赖

在终端输入 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 里的历史文件。

常用 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

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

image-20230609%E5%8D%88%E5%BE%8C61838277.jpg

根据官方 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
    k

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK