可以参考的第三方使用者的 源码信息。
1 GitHub - ravenxrz/dotfiles: My dotfiles 敲代码的脱发水kacm
2 GitHub - eggtoopain/Neovim-Configuration-Tutorial 技术蛋老师
3 GitHub - theniceboy/nvim: The Ultimate NeoVim Config for Colemak Users theCW
kana
4 https://github.com/yongtenglei/Neovim-QWERT if_fish
7 https://github.com/FledgeXu/NeovimZero2Hero 从平凡到非凡
6 https://github.com/jinzhongjia/neovim-config 云翼之影
最近有发现 几个使用 neovim 比较厉害的人。
1 首先是配置好虚拟机,开了一个新的虚拟机。
接下里安装中文输入法:
重启
再重启。
最终发现,没有中文输入法, 不挣扎了。不用fcitx框架了。
直接再界面傻瓜式安装ibus .
我又重新,建立了一个虚拟机,这回,直接安装 ibus 不用 fctx 了。
先 安装这个。
这样就对了。就是这两步
可以了。
设置访问 外网,nvim 安装插件可能会用到。
测试一下:
安装ssh.为了使用mobaxterm
对配置文件进行修改。
测试一下。
添加一个 Ubuntu 虚拟机中安装 vscode
问题: 我在虚拟机中安装了中文输入法,但是在vscode 中无法使用。
1 去官网 下载一个 deb 包。
2 到下载安装包的目录 使用 dpkg 命令进行安装。
但是出现如下错误。
这应该是 ubuntu 的版本与 我下载的vscode 的版本不一致导致的。
我决定重新安装一下 ubuntu 虚拟机。
2 安装nvim
使用apt 命令来安装。
文件下添加:
-- Hint: use `:h <option>` to figure out the meaning if needed
vim.opt.clipboard = 'unnamedplus' -- use system clipboard
vim.opt.completeopt = { 'menu', 'menuone', 'noselect' }
vim.opt.mouse = 'a' -- allow the mouse to be used in Nvim
-- Tab
vim.opt.tabstop = 4 -- number of visual spaces per TAB
vim.opt.softtabstop = 4 -- number of spacesin tab when editing
vim.opt.shiftwidth = 4 -- insert 4 spaces on a tab
vim.opt.expandtab = true -- tabs are spaces, mainly because of python
-- UI config
vim.opt.number = true -- show absolute number
vim.opt.relativenumber = true -- add numbers to each line on the left side
vim.opt.cursorline = true -- highlight cursor line underneath the cursor horizontally
vim.opt.splitbelow = true -- open new vertical split bottom
vim.opt.splitright = true -- open new horizontal splits right
-- vim.opt.termguicolors = true -- enabl 24-bit RGB color in the TUI
vim.opt.showmode = false -- we are experienced, wo don't need the "-- INSERT --" mode hint
-- Searching
vim.opt.incsearch = true -- search as characters are entered
vim.opt.hlsearch = false -- do not highlight matches
vim.opt.ignorecase = true -- ignore case in searches by default
vim.opt.smartcase = true -- but make it case sensitive if an uppercase is entered
添加:
require('options')
3
接下里是直接使用 网上的nvim 的配置的尝试。,目前,我这里是 0.4.3.
首先要更新 nvim , 删除 之前安装nvim
官网上下载 压缩包。
解压压缩包。解压在了这个目录下
创建一个软连接。
测试:
疑问: 不知道 配置的目录是不是 ~/.config/nvim 目录下。
更新流程完毕。
直接拷贝别人的配置进行测试。
首先 移除之前安装的 nvim 链接。
GitHub - ravenxrz/dotfiles: My dotfiles
在家目录.config 下 下载别人的配置
执行 ./install 进行安装
有报错
它的前提是必须要有 nvim .
所以提前 再次建立 nvim 的软连接。
事实证明无法使用,跟他的教程也不一样。
所以老老实实的从零去配置nvim ,不跟着它的教程走了。
在.config 目录下的结构。
keymaps.lua 是改建的信息。
options.lua 是基本的一些配置。
事实证明,我是用压缩包解压的方式,也是可以使用 ~/.config 来对nvim 进行配置的。
options.lua
local opt = vim .opt
--行号
opt.relativenumber = true
opt.number = true
--缩进
opt.tabstop = 4
opt.shiftwidth = 4
opt.expandtab = true
opt.autoindent = true
local opt = vim .opt
--行号
opt.relativenumber = true
opt.number = true
--缩进
opt.tabstop = 4
opt.shiftwidth = 4
opt.expandtab = true
opt.autoindent = true
--防止包裹
opt.wrap = false
--光标行
opt.cursorline = true
--鼠标
opt.mouse:append("a")
--系统剪切板
opt.clipboard:append("unnamedplus")
--默认新的分割窗口
--
opt.splitright = true
opt.splitbelow = true
--不区分大小写
--
opt.ignorecase = true
opt.smartcase = true
--外观
opt.termguicolors = true
opt.signcolumn = "yes"
--防止包裹
opt.wrap = false
--光标行
opt.cursorline = true
--鼠标
--opt.mouse:append("a")
--系统剪切板
opt.clipboard:append("unnamedplus")
--默认新的分割窗口
--
opt.splitright = true
opt.splitbelow = true
--不区分大小写
--
opt.ignorecase = true
opt.smartcase = true
--外观
opt.termguicolors = true
opt.signcolumn = "yes"
keymaps 的设置
--设置主键
vim.g.mapleader = " "
local keymap = vim.keymap
--设置分割窗口的快捷建 模式-要改成的键-之前的按键
keymap.set("n","<leader>sv","<C-w>v")
keymap.set("n","<leader>sh","<C-w>h")
此时我无法使用 ubuntu 系统剪切板到nvim , 但是vim 可以 ,所以使用vim 来粘贴PC中的东西。
在这里加上 关于neovim 的一些基本的是用方法。
首先是关于撤销的问题, u 是撤销, crtl+r 是在 撤销 撤销。这个其实我是可以改成U的。大写的U代表着对这一行所有的操作的撤销,所以不能这么改建。
对于跳转,如果是 大写的 W,B的话,会讲空格作为判断,如果是小写的 w,b 的话,会将标点符号作为判断标准。
nvim----> check health 可以检查 nvim 的 worning
绝对的跳转 , nG,向后跳, ngg , 向前跳
相对的跳转, ngj, 向下跳, ngk ,向前跳
在 config 中 vim.cmd("nohlseach") , 这句命令代表着,每次打开neovim 都会执行,这样,如果上次 使用了搜索高亮,那么下次再打开的时候,就不会有高亮了。
接下来设置 packer.
packer 的github 官网
我的操作
引用这个文件
再次进入 plugins-setup.lua 文件
可以看到这个画面
安装一个主题插件
https://github.com/folke/tokyonight.nvim
packer.sync
接着 去option.lua 设置基本的配置。
可以看到 颜色已经改变了。
开始安装状态栏
使用方法
开始进行配置
在init.lua 文件中引用
这是配置文件。
这里状态栏安装完之后,会出现乱码
这里的原因是字体不对,
解决方法:
1 首先安装字体。
网上的方法:
下载字体
wget https://github.com/ryanoasis/nerd-fonts/releases/download/v2.1.0/DroidSansMono.zip
解压到一个随便的目录
unzip DroidSansMono.zip -d ~/.fonts
将解压的字体,放到/usr/share/fonts 目录下
sudo cp ~/Downloads/*.ttf /usr/share/fonts
fc-cache -fv
查看支持的字体。
fc-list | grep "<name-of-font>"
疑问: 我下载的字体,有的可以支持,但是有的在支持列表里就没有
2 其次设置为指定的字体。
问题解决了。
开始安装nvim tree
GitHub - nvim-tree/nvim-tree.lua: A file explorer tree for neovim written in lua
安装成功
进行配置
我自己的配置。
配置 init.lua
改建
关于 nvim-tree 的所有的 使用方法 ,都在 官方的文档中。
-------------------------------------------------------------------------------------------------------------------------------
接下来设置 窗口管理器
GitHub - christoomey/vim-tmux-navigator: Seamless navigation between tmux panes and vim splits
测试一下。
接下来是语法高亮 ,treesiter
GitHub - nvim-treesitter/nvim-treesitter: Nvim Treesitter configurations and abstraction layer
官方配置。
我自己的配置。
配置init.lua
报错。
安装 gcc.
再次打开,下面再安装。
去掉help
再次打开,下面不报错了。
接下俩安装 括号不同颜色的插件, nvim-ts-ranbow
我的安装
进行配置
官方的配置。
我的配置。
结果:
接下来 安装 lsp 插件
mason.nvim
https://github.com/williamboman/mason.nvim
mason.lspconfig
https://github.com/williamboman/mason-lspconfig.nvim
nvim-lspcofig
https://github.com/neovim/nvim-lspconfig
需要安装这三个插件。
接下里配置 mason 插件
配置自动不全的插件。
nvim-cmp , 一般的lua 不全插件
https://github.com/hrsh7th/nvim-cmp
cmp-nvim-lsp , 没看明白啥意思
GitHub - hrsh7th/cmp-nvim-lsp: nvim-cmp source for neovim builtin LSP client
LuaSnip , 可以补全注释的。
https://github.com/L3MON4D3/LuaSnip
cmp_luasnip , 没看明白啥意思。
https://github.com/saadparwaiz1/cmp_luasnip
cmp_path , 补全路径的。
https://github.com/hrsh7th/cmp-path/
frendly-snippets , 这应该是不同语言的集合。
https://github.com/rafamadriz/friendly-snippets
安装一下。
有报错。
先注释一下配置。
不报错了。
再去安装一下。
改一下路径。
再安装一下,可以了。
接下来再去使能一下 配置文件。
现在 再使能 发现不会报错了。
接下来配置自动补全的配置。
上面所添加的所有的补全的插件应该都要 配置一遍
在 阿里云 debian 系统上升级 nvim 遇到的问题。
上传了 nvim 的压缩包之后, 显示
为了解决这个问题,下载 glibc2.9 版本,并且编译。
解决这个报错:
apt install gawk
apt install bison
cd build
../cofigure --prefix=/root/install
我重新复制一下
做测试
这里最好加上tmux
接下来就是从新设置nvim ,最好是打造成 开箱即用的那种。
首先是 基本的设置。
然后是改建的设置。
然后是 安装packer
对于packer 的安装,就是直接 复制 官网的配置就行。
6
45 local ensure_packer = function()
44 local fn = vim.fn
43 local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim'
42 if fn.empty(fn.glob(install_path)) > 0 then
41 fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path})
40 vim.cmd [[packadd packer.nvim]]
39 return true
38 end
37 return false
36 end
35
34 local packer_bootstrap = ensure_packer()
33
32
31
30 -- 从这里开始安装插件
29 return require('packer').startup(function(use)
28 --nvim tree
27 use {
26 'nvim-tree/nvim-tree.lua',
25 requires = {
24 'nvim-tree/nvim-web-devicons', -- optional
23 },
22 }
21
20 -- telescope
19 use {
18 'nvim-telescope/telescope.nvim', tag = '0.1.6',
17 -- or , branch = '0.1.x',
16 requires = { {'nvim-lua/plenary.nvim'} }
15 }
14
13
12
11
10 use 'wbthomason/packer.nvim'
9 -- My plugins here
8 -- use 'foo1/bar1.nvim'
7 -- use 'foo2/bar2.nvim'
6
5 -- Automatically set up your configuration after cloning packer.nvim
4 -- Put this at the end after all plugins
3 if packer_bootstrap then
2 require('packer').sync()
1 end
49 end)
---------------------------------------------------------------------------------------------------------------------------------如何在 nvim 中 ,实现 visula 的高亮。
-- 这样是不行的。
6 --vim.api.nvim_set_hl(0, 'Visual',{fg = '#ffffff',style = 'none',gui='bold' })
5 --必须这样设置
4 vim.api.nvim_set_hl(0, 'Visual', { fg = nil, bg = '#ff0000' })
效果:
还是参数设置的问题。
--------------------------------------------------------------------------------------------------------------------------
关于插件配置的模板
就以 bufferline 为例子。
c
返回的 是 一些环境变量+依赖+设置函数。
return {
1
2
3 -- 这是一些依赖的说明
4 "akinsho/bufferline.nvim",
5 event = { "BufReadPre", "BufNewFile" },
6 dependencies = { "nvim-tree/nvim-web-devicons" },
7
8
9
10 -- 一个函数
11 config = function()
12 local status, _ = pcall(require, "bufferline")
13 if not status then
14 return
15 end
16
17 -- 这是环境变量
18 vim.api.nvim_set_keymap("n", "gb", "<Cmd>BufferLinePick<CR>", { noremap = true, silent = true })
19 vim.opt.termguicolors = true
20
21
22
23 --对插件的配置
24 require("bufferline").setup({
25 options = {
26 number = "none",
27 --number_style = "superscript" | "subscript" | "" | { "none", "subscript" }, -- buffer_id at index 1, ordinal at index 2
28 --number_style = "subscript",
29 modified_icon = "✥",
30 buffer_close_icon = "",
31 close_icon = "
",
32 left_trunc_marker = "�",
33 right_trunc_marker = "�",
34 max_name_length = 14,
35 max_prefix_length = 13,
36 tab_size = 20,
37 show_buffer_close_icons = true,
38 show_buffer_icons = true,
39 show_tab_indicators = true,
40 --diagnostics = "coc",
41 diagnostics = "nvim_lsp",
42 always_show_bufferline = true,
43 separator_style = "thin",
44 offsets = {
45 {
46 filetype = "NvimTree",
47 text = "File Explorer",
48 text_align = "center",
49 padding = 1,
50 },
51 },
52 },
53 })
6
5 end,
4
3 }
2
--------------------------------------------------------------------------------------------------------------------------
关于bufferline 的配置
参考官网。
开始配置。
这是 bufferline.lua
return {
1
2
3 -- 这是一些依赖的说明
4 "akinsho/bufferline.nvim",
5 event = { "BufReadPre", "BufNewFile" },
6 dependencies = { "nvim-tree/nvim-web-devicons" },
7
8
9
10 -- 一个函数
11 config = function()
12 local status, _ = pcall(require, "bufferline")
13 if not status then
14 return
15 end
16
17 -- 这是环境变量
18 vim.api.nvim_set_keymap("n", "gb", "<Cmd>BufferLinePick<CR>", { noremap = true, silent = true })
19 vim.opt.termguicolors = true
20
21
22
23 --对插件的配置
24 require("bufferline").setup({
25 options = {
26 number = "none",
27 --number_style = "superscript" | "subscript" | "" | { "none", "subscript" }, -- buffer_id at index 1, ordinal at index 2
28 --number_style = "subscript",
29 modified_icon = "✥",
30 buffer_close_icon = "",
31 close_icon = "
",
32 left_trunc_marker = "�",
33 right_trunc_marker = "�",
34 max_name_length = 14,
35 max_prefix_length = 13,
36 tab_size = 20,
37 show_buffer_close_icons = true,
38 show_buffer_icons = true,
39 show_tab_indicators = true,
40 --diagnostics = "coc",
41 diagnostics = "nvim_lsp",
42 always_show_bufferline = true,
43 separator_style = "thin",
44 offsets = {
45 {
46 filetype = "NvimTree",
47 text = "File Explorer",
48 text_align = "center",
49 padding = 1,
50 },
51 },
52 },
53 })
6
5 end,
4
3 }
2
然后在 init.lua 中进行设置。
require("core.options")
1 require("core.keymaps")
2 require("plugins.plugins-setup")
3 require("plugins.nvim-tree")
4 require("plugins.telescope")
5 require("plugins.bufferline").config()
注意: 在 tmux 的其他的窗口中打开的 nvim 是没有 buffer 的。
只有在 一个窗口中,通过 nvim 打开的串口 才会有 buffer 。
问题: 这里 我在 某一个 buffer 里面的时候, 没有高亮的显示。
还有一个问题: 就是 当前的buffer 不会显示 标号,是一个乱码
--------------------------------------------------------------------------------------------------------------------------
关于自动注释的插件的配置。
这个插件不用配置。
空格+cc 注释, 空格+cu 反注释。
---------------------------------------------------------------------------------------------------------------------------------
关于lastplace 的安装。
安装
配置
20 return {
19
18
17
16
15
14 -- 一个函数
13 config = function()
12 local status, _ = pcall(require, "lastplace2")
11 if not status then
10 return
9 end
8
7 -- 这是环境变量
6
5
4
3 --对插件的配置
2
1 require'lastplace2'.setup {
22 lastplace_ignore_buftype = {"quickfix", "nofile", "help"},
1 lastplace_ignore_filetype = {"gitcommit", "gitrebase", "svn", "hgcommit"},
2 lastplace_open_folds = true
3 }
4
5
6 -- 这是之前的
7
8 end,
9
10 }
引用
require("core.options") 1 require("core.keymaps") 2 require("plugins.plugins-setup") 3 require("plugins.nvim-tree") 4 require("plugins.telescope") 5 require("plugins.bufferline").config() 6 require("plugins.lastplace2").config() ~
问题 : 我这边测试, 除了 lua 文件,其他的文件都是可以的。
-------------------------------------------------------------------------------------------------------------------------------
关于自动 格式化插件的安装
主要是 treesitter 插件。
安装:
配置:
return {
-- 一个函数
config = function()
local status, _ = pcall(require, "nvim-treesitter")
if not status then
return
end
-- 这是环境变量
--关于代码折叠
vim.wo.foldmethod = 'expr'
vim.wo.foldexpr = 'v:lua.vim.treesitter.foldexpr()'
--对treesitter插件的配置
--
require'nvim-treesitter.configs'.setup {
-- A list of parser names, or "all" (the listed parsers MUST always be installed)
ensure_installed = { "c", "lua", "vim", "vimdoc", "query", "markdown", "markdown_inline" },
-- Install parsers synchronously (only applied to `ensure_installed`)
sync_install = false,
-- Automatically install missing parsers when entering buffer
-- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally
auto_install = true,
-- List of parsers to ignore installing (or "all")
ignore_install = { "" },
---- If you need to change the installation directory of the parsers (see -> Advanced Setup)
-- parser_install_dir = "/some/path/to/store/parsers", -- Remember to run vim.opt.runtimepath:append("/some/path/to/store/parsers")!
highlight = {
enable = true,
-- NOTE: these are the names of the parsers and not the filetype. (for example if you want to
-- disable highlighting for the `tex` filetype, you need to include `latex` in this list as this is
-- the name of the parser)
-- list of language that will be disabled
disable = {},
-- Or use a function for more flexibility, e.g. to disable slow treesitter highlight for large files
disable = function(lang, buf)
local max_filesize = 100 * 1024 -- 100 KB
local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(buf))
if ok and stats and stats.size > max_filesize then
return true
end
end,
-- Setting this to true will run `:h syntax` and tree-sitter at the same time.
-- Set this to `true` if you depend on 'syntax' being enabled (like for indentation).
-- Using this option may slow down your editor, and you may see some duplicate highlights.
-- Instead of true it can also be a list of languages
additional_vim_regex_highlighting = false,
},
-- 关于自动缩进
indent = {
enable = true
},
--关于增量选择
incremental_selection = {
enable = true,
keymaps = {
init_selection = "gnn", -- set to `false` to disable one of the mappings
--node_incremental = "grn",
node_incremental = "<CR>",
scope_incremental = "grc",
--node_decremental = "grm",
node_decremental = "<BS>",
},
},
}
-- 这是之前的
end,
}
引用:
需要注意的点:
1 我的 高亮是没有效果的,高亮的不够。
2 代码的折叠式可以使用的。
事实证明是这样的,
这是我的改建。
关于代码 格式化也是 可以使用的,
首先选中 代码, 然后使用 = 号 就可以格式化。
--------------------------------------------------------------------------------------------------------------------------------
然后是关于主题的安装。
kanagawa
关于安装
关于配置。
return {
-- 一个函数
config = function()
local status, _ = pcall(require, "nvim-lastplace")
if not status then
return
end
-- 这是环境变量
--对插件的配置
require'nvim-lastplace'.setup {
lastplace_ignore_buftype = {"quickfix", "nofile", "help"},
lastplace_ignore_filetype = {"gitcommit", "gitrebase", "svn", "hgcommit"},
lastplace_open_folds = true
}
-- 这是之前的
end,
}
关于引用
发现: 安装上主题之后,我发现 treesitter 的语法高亮可以了。
------------------------------------------------------------------------------------------------------------------
目前遇到一个问题:
1 搜索的时候,有高亮,回车之后高亮消失。
2 visual 选中不正常,但是这个能够解决:
加上一句这个,所以kanagawa , 哪里的配置 导致了, visual 选中没有颜色。
------------------------------------------------------------------------------------------------------------------------
遇到一个问题: 在使用 vim 的时候 粘贴的时候 ,格式是乱的。
解决方法: :set paste 之后 在粘贴就可以了。
粘贴完之后, 在 :set nopaste 设置回去。
但是我并没有在 nvim 中这样设置, 我也不清楚,nvim 时候也会出现这样的情况,出现了再说。
具体原因不清楚。
在网上搜了一下大致的解释。
--------------------------------------------------------------------------------------------------------------------------
ndent-blankline.nvim, 可以在格式上加上竖线。
安装:
配置。
:
引用:
结果:
---------------------------------------------------------------------------------------------------------------------------------
关于格式化的插件。
其实格式化不需要插件的,在lsp 中就有格式化的。
安装好 lsp 之后, 打开一个文件,全选, 按 = 号, 就会自动格式化。
----------------------------------------------------------------------------------------------------------------------------
对于 illuminaete 的安装, 这个插件,可以 高亮 光标所在的 单词,相当于 搜索了。
安装:
配置:
由于官方的配置的原因,这里 没有配置文件,但是其实也是可以有的。
引用:
一些设置:
为了, 在光标下有颜色,我做了一些设置。
结果:
------------------------------------------------------------------------------------------------------------------------------
关于nerd fond 的配置。
下载
wget https://github.com/ryanoasis/nerd-fonts/releases/download/v3.2.1/FiraCode.zip
拷贝到固定的位置。
然后刷新
fc-cache -fv
重启
------------------------------------------------------------------------------------------------------------------------------
这里遇到一个报错: glibc_2.29
解决方法:
编译生成 libm-2.29 然后创建一个链接
网上的资料
结果:
---------------------------------------------------------------------------------------------------------
问题: nvim 在shell中 与在tmux 中颜色显示不一致,,主要表现是,在tmux 中,nvim 搜索没有高亮,并且没有主题。
解决方法:
在 .tmux.config 中加入:
set -g default-terminal "screen-256color"
并且在启动的时候
alias tmux="TERM=screen-256color-bce tmux"
结果:
-------------------------------------------------------------------------------------------------------------
关于语言服务器的概述。
mason 是用于 安装 各种 语言服务器的,比如 python ,就是 pyright , 代替的是手动的一个一个的安装。这里需要注意,即便是安装了语言服务器,也是需要你去安装环境的,比如,我已经安装了pyright, 那我我自己需要去安装 nodejs ,应为pyrihht 是用 javascript 写的,还需要一个 python.
mason.lspconfig . 用于自动的启动各个语言服务器,并且启动过程中,会对各个语言服务器的快捷键进行配置。代替的是 手动的 启动一个一个的语言服务器,并且对每个语言服务器进行手动的快捷键的配置。
nvim-lspconfig , 是用于 安装各种 语言服务器的配置的,它有各种语言服务器的通用配置。代替的是手动 一个一个对 语言服务器进行配置。
我自己的猜测: 这样是不能够对内核的源码进行追踪的。
这样的追踪要么就是文件内部的追踪,要么就是 追踪语言的内置的函数,比如printf 之类的函数。
--------------------------------------------------------------------------------------------
nvim-lspconfig
安装:
配置:
引用:
-----------------------------------------------------------------------------------------------------------------------------
mason.nvim
主要是用来帮助安装 lsp 服务器。
安装:
配置:
引用:
接下来是使用的测试。
疑问:在安装完 语言服务器之后,还需要服务器需要的环境,这句话我不是很理解。
-------------------------------------------------------------------------------------------------------------------------------
mason lspconfig
安装:
这次是一次安装的。
配置;
也打算做一个 综合的配置。
1 return {
1 ▎ config = function()
2 ▎ ▎ local servers = {
3 ▎ ▎ ▎ lua_ls = {
4 ▎ ▎ ▎ ▎ settings = {
5 ▎ ▎ ▎ ▎ ▎ Lua = {
6 ▎ ▎ ▎ ▎ ▎ ▎ workspace = { checkThirdParty = false },
7 ▎ ▎ ▎ ▎ ▎ ▎ telemetry = { enable = false },
8 ▎ ▎ ▎ ▎ ▎ },
9 ▎ ▎ ▎ ▎ },
10 ▎ ▎ ▎ },
11 ▎ ▎ ▎ pyright = {},
12 ▎ ▎ ▎ marksman = {},
13 ▎ ▎ ▎ clangd = {},
14 ▎ ▎ }
15 ▎ ▎ local on_attach = function(_, bufnr)
16 ▎ ▎ ▎ -- Enable completion triggered by <c-x><c-o>
17 ▎ ▎ ▎ local nmap = function(keys, func, desc)
18 ▎ ▎ ▎ ▎ if desc then
19 ▎ ▎ ▎ ▎ ▎ desc = 'LSP: ' .. desc
20 ▎ ▎ ▎ ▎ end
21 ▎ ▎ ▎ ▎
22 ▎ ▎ ▎ ▎ vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc })
23 ▎ ▎ ▎ end
24 ▎ ▎ ▎
25 ▎ ▎ ▎ nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
26 ▎ ▎ ▎ nmap('gd', require "telescope.builtin".lsp_definitions, '[G]oto [D]efinition')
27 ▎ ▎ ▎ nmap('K', "<cmd>Lspsaga hover_doc<CR>", 'Hover Documentation')
28 ▎ ▎ ▎ nmap('gi', require "telescope.builtin".lsp_implementations, '[G]oto [I]mplementation')
29 ▎ ▎ ▎ nmap('<C-k>', vim.lsp.buf.signature_help, 'Signature Documentation')
30 ▎ ▎ ▎ nmap('<leader>wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder')
31 ▎ ▎ ▎ nmap('<leader>wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder')
32 ▎ ▎ ▎ nmap('<leader>wl', function()
33 ▎ ▎ ▎ ▎ print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
34 ▎ ▎ ▎ end, '[W]orkspace [L]ist Folders')
35 ▎ ▎ ▎ nmap('<leader>D', vim.lsp.buf.type_definition, 'Type [D]efinition')
36 ▎ ▎ ▎ nmap('<leader>rn', "<cmd>Lspsaga rename ++project<cr>", '[R]e[n]ame')
37 ▎ ▎ ▎ nmap('<leader>ca', "<cmd>Lspsaga code_action<CR>", '[C]ode [A]ction')
38 ▎ ▎ ▎ nmap('<leader>da', require "telescope.builtin".diagnostics, '[D]i[A]gnostics')
39 ▎ ▎ ▎ nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
40 ▎ ▎ ▎ -- nmap('gr', vim.lsp.buf.references, '[G]oto [R]eferences')
41 ▎ ▎ ▎ nmap("<space>f", function()
42 ▎ ▎ ▎ ▎ vim.lsp.buf.format { async = true }
43 ▎ ▎ ▎ end, "[F]ormat code")
44 ▎ ▎ end
45 ▎ ▎ require("mason").setup()
46 ▎ ▎ require("mason-lspconfig").setup({
47 ▎ ▎ ▎ ensure_installed = vim.tbl_keys(servers),
48 ▎ ▎ })
49 ▎ ▎
50 ▎ ▎ for server, config in pairs(servers) do
51 ▎ ▎ ▎ require("lspconfig")[server].setup(
52 ▎ ▎ ▎ ▎ vim.tbl_deep_extend("keep",
53 ▎ ▎ ▎ ▎ ▎ {
54 ▎ ▎ ▎ ▎ ▎ ▎ on_attach = on_attach,
6 ▎ ▎ ▎ ▎ ▎ },
5 ▎ ▎ ▎ ▎ ▎ config
4 ▎ ▎ ▎ ▎ )
3 ▎ ▎ ▎ )
2 ▎ ▎ end
1 ▎ end
62 }
引用:
目前 lsp 基本的框架就安装完了。
--------------------------------------------------------------------------------------------
有一个重要的报错:
问题: 我下载 lsp 只能在 /.config 目录下,才能使用,别的目录都不能使用。
--------------------------------------------------------------------------------------------------------------------------
一个疑问: 在 视频中, 他在启动 pyright 的时候 ,启用了一个 python 的虚拟环境,python -m venv .env
不知道,这个创建虚拟环境的作用是什么, 是不是与编译器有关呢。
也许,我设置编译器的 原因,也就是这个 编译环境。
-----------------------------------------------------------------------------------------------------------------------------
安装neodev.nvim , 这个插件是用来识别 neovim 的内置api 的, 比如这样会报错。
安装:
配置;
引用:
注意要放在 lsp 之前。
结果:
-------------------------------------------------------------------------------------------------------------------------------
关于如何生成 compile_command.json.
我是这个做的。
便会在 makefile 的目录下产生这个文件。
但是 我在使用 bear 编译 imx6ul 的源码的时候遇到一个这个错误:
ERROR: ld.so: object '/usr/${LIB}/bear/libear.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
scripts/kconfig/conf --silentoldconfig Kconfig
ERROR: ld.so: object '/usr/${LIB}/bear/libear.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
CHK include/config/kernel.release
CHK include/generated/uapi/linux/version.h
CHK include/generated/utsrelease.h
make[1]: “include/generated/mach-types.h”已是最新。
CHK include/generated/bounds.h
CHK include/generated/asm-offsets.h
CALL scripts/checksyscalls.sh
ERROR: ld.so: object '/usr/${LIB}/bear/libear.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
ERROR: ld.so: object '/usr/${LIB}/bear/libear.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
CHK include/generated/compile.h
GZIP kernel/config_data.gz
CHK kernel/config_data.h
Kernel: arch/arm/boot/Image is ready
ERROR: ld.so: object '/usr/${LIB}/bear/libear.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
ERROR: ld.so: object '/usr/${LIB}/bear/libear.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
ERROR: ld.so: object '/usr/${LIB}/bear/libear.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
ERROR: ld.so: object '/usr/${LIB}/bear/libear.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
Kernel: arch/arm/boot/zImage is ready
网上的资料:
估计是这个原因:
下载32位 bear 的网址:
Debian -- Package Download Selection -- bear_2.3.13-1_all.deb
如果直接 dpkg -i xxxx.deb 的话,会有报错:
首先删除之前的安装:
然后在 手动安装测试一下:
手动安装也是报错的,所以 , 如果要使用的话,还得去编译源码,所以直接使用 别的 编辑器得了。
就使用 source insight 得了。
最终的解决:
上面使用source insight 只是权宜之计。
我下来编译了一下 bear ,据说是32 ,与64 位的关系。但是移植没有编译出来。
有可能是我 操作的不对。 我是按照官网操作的,但是依然是不可以。
GitHub - rizsotto/Bear: Bear is a tool that generates a compilation database for clang tooling.
后来在网上找到这个。
他使用的是一个脚本, gen_compile_commands.py
所以我试一下这个。
我首先在 Ubuntu虚拟机上进行测试。
我首先是安装了 clang-12, clangd-12compile_commands.json
apt install clang-12, clangd-12
但是没什么用, 我使用的 gen_compile_commands.py 这个文件是内置的。
然后 编译一遍 内核源码之后
生成了 compile_commands.json
并且可以使用 nvim 的跳转功能了。
所以可以在阿里云的 debain11 上进行测试了。
首先我是安装编译器,解压 imx6ul 的内核源码。
编译过程出现报错。但是不影响,估计是内核编译环境搭建的问题。
我主要也不是编译内核,而是 测试 nvim 的代码跳转。
我发现, debain11 没有默认带 gen_compile_commands.py ,并且安装了 clang , clangd 也没有。
那么我直接拷贝 Ubuntu的 gen_compile_commands.py 到debian 上。
然后 生成。
发现是 可以给 nvim 使用的。
目前问题先这样解决。
注意: 我发现一个使用 gen_comxxx 的问题:
就是不能使用相对路径,具体原因不清楚。
举例:
我这么生成是不行的。
必须要这么生成
将 gen_compile_commands.py 拷贝到当前的目录下
-----------------------------------------------------------------------------------------------------------------------------
目前 clangd 的 终于是可以了。
我的关键的配置。
经过我的测试, 是必须加在 clangd 的table里面,而不能是这样的。
也不能在工程目录下 写一个 .vim.lua 文件。来设置 clangd 具体原因还不清楚。
目前还有一些问题:
但是基本可以使用了。
可以使用 vim.lsp 的函数。
我发现 当一个函数有报错的时候,是不能够使用,lsp 的跳转的。
同时,telescope 也是可以使用的。,用于代码检测。
---------------------------------------------------------------------------------------------------------------------------------
在使用 clangd 的时候如何向回跳转呢?
--------------------------------------------------------------------------------------------------------------------
关于 nvim 的内置的命令
-----------------------------------------------------------------------------------------------------------------
我的一个疑问:
在clangd 中有一个 这样的报错。
但是我通过 , telescope 是可以搜索到这个函数的实现的。
难道是因为头文件的原因吗? 不是很理解。
-----------------------------------------------------------------------------------------------------------------------------
开始美化, 安装lualine .
安装:
配置:
引用:
结果:
问题: 有乱码,并且 我没有定制
这里的主要的问题是 没有安装字体,应该是。
------------------------------------------------------------------------------------------------------------------------------
关于nerd font 字体的安装
首先是查看系统上的字体文件的命令。
fc-list
一般字体都安装在哪些目录呢:
debian 系统如何设置 字体呢?
debian 有一个配置文件。
如何设置临时字体呢:
但是setfont 对字体有要求。
----------------------------------------------------------------------------------------------------------------------------
出现一个新问题: 普通的shell 与tmux 中的shell 颜色不一致。
这个问题上面有解决方法。
--------------------------------------------------------------------------------------------------------------------------------
关于nvim 的快速跳转, flash.nvim 的安装
安装:
配置:我选择的是 直接在keympa 里面进行配置。
13 keymap.set('n', 's', '<cmd>lua require("flash").jump()<CR>', { desc = 'Flash' })
~ ┃ 12 keymap.set('x', 's', '<cmd>lua require("flash").jump()<CR>', { desc = 'Flash' })
~ ┃ 11 keymap.set('o', 's', '<cmd>lua require("flash").jump()<CR>', { desc = 'Flash' })
~ ┃ 10 keymap.set('n', 'S', '<cmd>lua require("flash").treesitter()<CR>', { desc = 'Flash Treesitter' })
~ ┃ 9 keymap.set('x', 'S', '<cmd>lua require("flash").treesitter()<CR>', { desc = 'Flash Treesitter' })
~ ┃ 8 keymap.set('o', 'S', '<cmd>lua require("flash").treesitter()<CR>', { desc = 'Flash Treesitter' })
~ ┃ 7 keymap.set('o', 'r', '<cmd>lua require("flash").remote()<CR>', { desc = 'Remote Flash' })
~ ┃ 6 keymap.set('o', 'R', '<cmd>lua require("flash").treesitter_search()<CR>', { desc = 'Treesitter Search' })
~ ┃ 5 keymap.set('x', 'R', '<cmd>lua require("flash").treesitter_search()<CR>', { desc = 'Treesitter Search' })
~ ┃ 4 ▎
引用:
所以也就没有什么引用了。
我的疑问:
1 就是我在 按 s 进行跳转的时候会比较慢。
---------------------------------------------------------------------------------------------------------------------
在nvim 中如何进行 全词的匹配。
:\<int\> 这样是可以进行全此配置的, 搜索的单词 就是 int 不包括 interrupt
-------------------------------------------------------------------------------------------------------------------------------
接下来是关于自动补全的安装
nvim-cmp 这个插件是骨架。
安装:
配置:
这是基本的配置,其余的我都删了,慢慢的完善
28 return { 27 ▎ 26 ▎ -- 一个函数 25 ▎ config = function() 24 ▎ ▎ local status, _ = pcall(require, "lualine") 23 ▎ ▎ if not status then 22 ▎ ▎ ▎ return 21 ▎ ▎ end 20 ▎ ▎ 19 ▎ ▎ -- 这是环境变量 18 ▎ ▎ 17 ▎ ▎ 16 ▎ ▎ 15 ▎ ▎ --对插件的配置 14 ▎ ▎ 13 ▎ ▎ local cmp = require'cmp' 12 ▎ ▎ 11 ▎ ▎ cmp.setup({ 10 ▎ ▎ ▎ mapping = { 9 ▎ ▎ ▎ ▎ ['<C-b>'] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }), 8 ▎ ▎ ▎ ▎ ['<C-f>'] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }), 7 ▎ ▎ ▎ ▎ ['<C-Space>'] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }), 6 ▎ ▎ ▎ ▎ ['<C-y>'] = cmp.config.disable, -- Specify `cmp.config.disable` if you want to remove the default `<C-y>` mapping. 5 ▎ ▎ ▎ ▎ ['<C-e>'] = cmp.mapping({ 4 ▎ ▎ ▎ ▎ ▎ i = cmp.mapping.abort(), 3 ▎ ▎ ▎ ▎ ▎ c = cmp.mapping.close(), 2 ▎ ▎ ▎ ▎ }), 1 ▎ ▎ ▎ ▎ ['<CR>'] = cmp.mapping.confirm({ select = true }), 30 ▎ ▎ ▎ }, 1 ▎ ▎ }) 2 ▎ ▎ 3 ▎ ▎ 4 ▎ ▎ 5 ▎ ▎ 6 ▎ ▎ 7 ▎ ▎ 8 ▎ ▎ -- 这是之前的 9 ▎ ▎ 10 ▎ end, 11 ▎ 12 } 13
引用:
接下来是关于 路径补全的 插件。
cmp-path.
安装;
配置:
42
41 return {
40 ▎
39 ▎ -- 一个函数
38 ▎ config = function()
37 ▎ ▎ local status, _ = pcall(require, "lualine")
36 ▎ ▎ if not status then
35 ▎ ▎ ▎ return
34 ▎ ▎ end
33 ▎ ▎
32 ▎ ▎ -- 这是环境变量
31 ▎ ▎
30 ▎ ▎
29 ▎ ▎
28 ▎ ▎ --对插件的配置
27 ▎ ▎
26 ▎ ▎ local cmp = require'cmp'
25 ▎ ▎
24 ▎ ▎ cmp.setup({
23 ▎ ▎ ▎ mapping = {
22 ▎ ▎ ▎ ▎ ['<C-b>'] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }),
21 ▎ ▎ ▎ ▎ ['<C-f>'] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }),
20 -- ['<C-Space>'] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }),
19 ▎ ▎ ['<C-y>'] = cmp.config.disable, -- Specify `cmp.config.disable` if you want to remove the default `<C-y>` mapping.
18 ▎ ▎ ['<C-e>'] = cmp.mapping({
17 ▎ ▎ ▎ i = cmp.mapping.abort(),
16 ▎ ▎ ▎ c = cmp.mapping.close(),
15 ▎ ▎ }),
14 ▎ ▎ ['<CR>'] = cmp.mapping.confirm({ select = true }),
13 ▎ ▎ },
12 ▎ ▎ sources = cmp.config.sources({
11 ▎ ▎ ▎ { name = 'path' }, -- For snippy users.
10 ▎ ▎ }, {
9 ▎ ▎ -- { name = 'buffer' },
8 ▎ ▎ ▎ })
7 ▎ ▎
6 ▎ ▎
5 ▎ ▎
4 ▎ ▎ })
3 ▎ ▎
2 ▎ ▎
1 ▎ ▎
43 ▎ ▎ -- 这是之前的
1 ▎ ▎
2 ▎ end,
3 ▎
4 }
5
引用:
也就不用引用了。
结果:
当输入 / 的时候就会自动的提示。但是快捷键 还没有设置 tab 健。
--------------------------------------------------------------------------------------------------------------------------------
接下来是 对 各个语言的补全。
首先安装的是 cmp-nvim-lsp , 这其实一个 语言的源。
安装:
配置:
就是添加源, 并且设置 capacity .
引用:
不用引用。
之前一直 无法使用 nvim-lsp 的功能,主要是我在配置的时候,输入错误。
-------------------------------------------------------------------------------------------------------------------------------
关于 snip 的补全, 逻辑是 snip 引擎+ snip源
关于snip 引擎的安装。 L3MON4D3/LuaSnip
安装snip的源。 rafamadriz/friendly-snippets
还需要一个插件 cmp_luasnip 将 friendly-snippets 转换成 cmp的 snip 源
saadparwaiz1/cmp_luasnip
安装:
将这三个一起安装。
配置:
引用:
是不需要再引用的。
测试:
可以看到已经出现了 snip 。
接下来还要去改一下 ,snip 的mapping .
直接抄 nvim-cmp 的官网的wiki
测试一下;
-----------------------------------------------------------------------------------------------------------------------------
关于 buffer 的补全。
安装:
配置:
引用:
不用引用。
测试:
=---------------------------------------------------------------------------------------------------------------------------
对于 command line 的安装。
hrsh7th/cmp-cmdline
配置:
引用:
是不用引用的。
测试:
这里出现了报错。
目前我使用 up主的配置依然是这样的。
目前解决不了。
---------------------------------------------------------------------------------------------------------------------------------
到这里做一下,对于 安装 nvim 插件的总结了。
1 在packer 中进行安装
2 在配置文件里对 插件进行配置。
3 设置 init.lua 文件。
然后是安装目录树。
目录树的测试
添加文件+目录 ,都是 a 命令, 目录只需要在 后面加上 / 就可以了。
复制文件 c
剪切文件 x
粘贴文件 p
重命名文件 r
展开文件 是 tab
选中文件是 回车。
然后是安装telescope
直接安装
然后是 更改配置文件:
最后是 包含配置文件
断点
书签
搜索文件
搜索文件可以使用 命令 :Telescope find file
这里有一个疑问:
我自己的测试是, 如果我 按 esc 键 ,就进入了 telescope 的 normal 模式,这时 使用 j k 就可以移动了。
但是可以在 配置文件里 做改动。
这样就可以直接在 搜索时 , 使用插入模式 , 进行 在结果的 UI 里,进行移动了。
但是这里的移动只能是 一行一行的移动,而不能是 半页半页的移动。
设置 启动 telescope 搜索功能的快捷键
leader 健 是 neo vim 的 按键 ,不是 telescope 的。
当然也可以 使用命令的方式 启动 telescope
搜索文件:
首先 进入nvim , 然后 按住 主键+ ff , 便可进入 搜索文件模式。
在 telescope 里,再 按住 C+J/k , 便可以 在插入模式下, 上下浏览文件。
按回车,可以直接进入文件。
回退 是什么按键呢?
好像是无法回退, 想要关闭的话,大不了再从新打开一次。
这是当前的窗口与 要打开的文件的 窗口之间的排列方式。
如何制定某个文件夹的搜索/排除某个文件夹的搜索呢?
如何使用正则表达式进行搜索。
如何打书签 , 如何在文件内部,以及 在文档之间跳转
如何搜索文件内的符号,如何搜索项目内的符号,如何与 LSP 支持。
如何打开项目级别的目录。
搜索字符
搜索字符必须安装一下 ripgrep 命令。
apt install ripgrep
否则 无法使用 搜索字符的命令。
telescope 与LSP 做了兼容。
-------------------------------------------------------------------------------------------------------------------------------
nvim 中的固定的 语法。
init.lua : 入口
require: 导入模块
let g:foo = bar
set foo = bar
注意:let 与set 是 vim 的写法,不是 neovim
关于 let 与 set 的区别总结。
网上的截图:
总结: set 是在设置nvim 的 默认值, 而 let 是在设置一个自己的变量。
vim.keymap.set 函数
这是一个 键盘映射的函数,这是nvim 的lua API 提供的函数
vim.keymap.set('n', '<F14>', '<Cmd>Lspsaga open_floaterm<CR>', opts)
网上的资料如下:
关于 在nivm 中 导入一个模块。
一种方式是 require()
第二种是 这种方式。
return require('packer').startup(function(use)
第三种是 这种。
local stautus_ok, packer = pcall(requrire, "packer")
本质是一眼的。
关于 vim.cmd 函数
也就是说, 这个lua api 是 在neovim 中 调用vim 的命令的函数。
然后是关于vim.api 的解释
我可以把它理解成,也是一个api
网上找到了一个讲的比较好的帖子:
首先是关于lua 的基本的语法
然后是关于 vim.o, vim.g
然后是键位的映射函数。
------------------------------------------------------------------------------------------------------------------------
这是一个 markdown 插件。
glow.nvim
首先是安装:
GitHub - ellisonleao/glow.nvim: A markdown preview directly in your neovim.
然后是配置。
3 return {
2
1 -- 一个函数
7 ▎ config = function()
1 ▎ ▎ local status, _ = pcall(require, "glow")
2 ▎ ▎ if not status then
3 ▎ ▎ ▎ return
4 ▎ ▎ end
5
6 -- 这是环境变量
7
8
9
10
11
12
13 --对插件的配置
14 ▎
15 ▎ require("glow").setup({
16 ▎ ▎style = "dark",
17 ▎ ▎width = 120,
18 ▎ })
19
20
21 -- 这是之前的
22 ▎
23 ▎ end,
24 ▎
25 }
26
27
28
~
然后是 init 中打开。
但是我在 阿里云服务器上测试没有报错,但是也没有代开 预览框, 不知道为什么、
我用虚拟机测试了一下,会报这个错误。
最终我的解决方式是这么改的。
将这个换成 绝对路径就行了。
但是这里有一个 需要注意的地方: 就是 再SSH 中式没法 使用 glow 的, 我不知道 别的 markdown 插件是不是也是这样。
--------------------------------------------------------------------------------------------------------------------