Neovim-from-scratch-Notes

neovim 中使用 require 加载文件时, 默认会在配置文件所在目录下的 lua 目录下找. 配置文件所在目录由环境变量 VIMCONFIG 来指定, 即默认查找 $VIMCONFIG/lua, 如:

1
require "test"

则会加载 $VIMCONFIG/lua/test.lua 文件.

文件的层次可以通过 . 区分, 如:

1
require "test.haha"

则会加载 $VIMCONFIG/lua/test/haha.lua 文件.

require 查找的路径实际上为变量 package.path 的值.

P2 基础选项配置-Setting options

组织 lua 目录下的文件时可以创建子目录.

注意, 如:

1
vim.opt.backup

与:

1
vim.opt['backup']

等价.

设置 vim 的选项 (option) 用:

1
vim.opt

开头.

如:

1
2
3
vim.opt.backup = false
vim.opt.cmdheight = 2
vim.opt['hlsearch'] = true

运行 vim 的命令用:

1
vim.cmd

如:

1
2
vim.cmd "set whichwrap+=<,>,[,],h,l"
vim.cmd [[set iskeyword+=-]]

P3 定制你的键盘映射-Custom Keymaps

键盘映射使用 vim.api.nvim_set_keymap 函数, 如:

1
2
3
4
5
6
-- 用更短的函数别名
local keymap = vim.api.nvim_set_keymap
keymap("模式", "设置的键位", "替换的键位", "其他选项")
-- 例如
local opts = { noremap = true, silent = true }
keymap("i", "jk", "<ESC>", opts)

上面就是把 jk 映射为 <ESC> 的写法.

模式包括:

  • n, normal
  • i, insert
  • v, visual
  • x, visual block
  • t, term
  • c, command

设置 leader:

1
2
vim.g.mapleader = " "
vim.g.maplocalleader = " "

P4 了解vim插件体系 - Plugin Deep Dive

packer.nvim 插件使用, 在用 nvim 打开一个文件是, 其就会开始下载插件.

site/pack/packer 目录下的两个目录:

  • opt 代表 optional
  • start 代表一打开 nvim 就运行

plugins/packer_compiled.lua 文件可能会加快插件的打包速度.

插件默认放在 start 目录下, 若要放在 opt 目录下, 需添加 opt = true, 如:

1
use { 'vim/plugins', opt = true }

还有其他可选关键字, 如 run 用来运行命令, branch 用来指定分支等.

有些插件除了用 packer 安装以外, 还需要 require().setup{}.

P5 主题配色以及如何配置- Colorschemes and how t

一个技巧, 在加载一个插件时检测其是否还存在, 这样在你移除后可以避免报错, 如:

1
2
3
4
5
6
local colorscheme = "tokyonight"

local status_ok, _ = pcall(vim.cmd, "colorscheme " .. colorscheme)
if not status_ok then
return
end

pcall 函数带两个参数:

  • 第一个, 函数名
  • 第二个, 函数的参数 (这是一个变长参数)

_ 相当于一个占位符.

P6 自动补全 - Completion Tutorial

使用插件为 nvim-cmp.

Super 键, 也就是 Win 键, 映射的时候使用如: <S-t>.

formatting 就是配置补全时旁边显示的东西.

source 好像是补全显示的顺序.

nvim-cmp 是可扩展的, 扩展用的插件可以在 github 上面找, 也就是 source. 安装好插件后将其添加到 source 下面.

P7 多语言语法支持- LSP Setup Tutorial

关于很多插件都有 require(name).setup() 解析, 应该是一种约定俗称的函数, 在返回的模块中有一个成员函数叫做 setup(), 其完成一些设置.

使用 Mason 下载 LSP 之后在配置文件中启用.

lspconfig 这个插件中可以找到各种语言的 language server 的配置方式.

可以给 LSP 传递一些参数配置. 设置的参数就可以在 nvim-lspconfig 这个插件中找.

gd 快捷键还可以跳转到光标下的路径的文件.

gr 用 quickfix 查找光标下的单词. (r 是 reference)

P8 查找(文件或字符等)插件Telescope - a highly extendable fuzzy finder

telescope 是一个 fuzzy finder.

使用示例, :Telescope find_files 用于查找文件. :Telescope live_grep 用于查找字符.

:Telescope planets 可以查看行星.

可以设置打开的 menu 的主题, 如 :Telescope find_files theme=ivy, 其会在底部打开 Telescope 而不是 float.

dropdown 主题会将预览放在上方. cursor 主题打开的窗口比较小.

在使用 Telescope 时, 可以进入 normal 模式, 这样就可以用 jk 来控制.

可以在 Telescope 中预览图片. 需要 Telescope-media-files.nvim 插件. 这是一个 neovim 插件, 同时也是 Telescope 的插件, 需要卸载 Telescope 的配置中.

P9 语法高亮插件 - Treesitter Syntax Highlighting

可以用 :TSDisableAll highlight 来关闭 Treesitter 插件的高亮作用.

Treesitter 也有很多插件, 这些插件的配置信息写在 Treesitter 的配置文件里, 如 p00f/nvim-ts-rainbow

playground 插件可以显示出语法树和高亮代码的联系.

可以制作自己的 colorscheme.

P10 符号配对插件 - Autopairs automatically close () [] {} ‘’ _

<M-e> 快捷键.

P11 注释插件 - Comments

gcc 和 visual 模式下的 gc

P12 git插件 - Gitsigns Powerful Git Plugin

可以查看很多内容.

P13 树形文件浏览器插件- NvimTree File Explorer

a 即 add 可以添加文件.

r 即 renane 可以修改文件名.

d 即 delete 可以删除文件.

P14 Buffer插件以及Buffer 和 Tab以及Windows之间的对比 - Bufferline Buffers

BufferLinePick 可以跳转.

buffer 就是加载到内存中的文件.

vim 的 hidden 选项可以让 buffer 留在内存中。

vim 可以创建 tab, window, buffer.

tab 有点像 collection of windows.

P15 格式化与Lint插件 - Null-LS Formatting, Linting

null ls 插件用来格式化代码. 使用 :lua vim.lsp.buf.formatting_sync() 来触发.

lua 的格式化依赖于 stylua 这个二进制文件.

添加一个语言的格式化将其添加到 null ls 的配置文件中.

支持的语言和 source 可以在其安装目录的 lua/null-ls/built-in 目录下找.

diagnostic 和 linter 差不多

NullLsInfo 可以查看信息.

lsp 内置的 Formatting 和 null ls 冲突, 查看 handler 文件.

P16 在Nvim中调用terminal插件(不许套娃)- Toggleterm Open terminal programs in Nvim


Neovim-from-scratch-Notes
http://example.com/2022/12/30/Neovim-from-scratch-Notes/
作者
Jie
发布于
2022年12月30日
许可协议