nvim
wget https://github.com/neovim/neovim/releases/download/v0.9.5/nvim.appimage
chmod +x nvim.appimage
sudo mv nvim.appimage /usr/local/bin/nvim
sudo ln -sf /usr/local/bin/nvim /usr/bin/nvim
nvim --version | head -1
or
$ pkg i neovim -y
$ nvim -v
NVIM v0.11.0
Build type: Release
LuaJIT 2.1.1731601260
Run "nvim -V1 -v" for more info
git clone --depth 1 https://github.com/wbthomason/packer.nvim \
~/.local/share/nvim/site/pack/packer/start/packer.nvim
nvim ~/.config/nvim/init.lua
vim.cmd [[packadd packer.nvim]]
require('packer').startup(function(use) -- Packer 自身管理
use 'wbthomason/packer.nvim'
-- HTML 相关插件 use 'mattn/emmet-vim' -- Emmet 快速编写 HTML
use 'windwp/nvim-ts-autotag' -- 自动补全 HTML 标签 use 'alvan/vim-closetag' -- 自动关闭 HTML 标签
use 'AndrewRadev/tagalong.vim' -- 修改标签时自动修改闭合标签 use 'othree/html5.vim' -- HTML5 语法支持和缩进
-- 可选:LSP 支持 use 'neovim/nvim-lspconfig' -- LSP 配置 use 'williamboman/mason.nvim' -- LSP 安装管理器
use 'williamboman/mason-lspconfig.nvim'
-- 可选:自动补全
use 'hrsh7th/nvim-cmp' -- 补全引擎
use 'hrsh7th/cmp-nvim-lsp' -- LSP 补全源
use 'hrsh7th/cmp-buffer' -- 缓冲区补全源
use 'hrsh7th/cmp-path' -- 路径补全源
use 'hrsh7th/cmp-cmdline' -- 命令行补全源
end)
vim.g.mapleader = " " -- 全局 leader 设为空格
-- Emmet 配置
vim.g.user_emmet_mode = 'n' -- 只启用普通模式的快捷键
--vim.g.user_emmet_leader_key = '<C-y>'
vim.g.user_emmet_expandabbr_key = '<Tab>'
vim.g.user_emmet_settings = {
html = {
indent_blockelement = 1
}
}
-- 自动标签配置
require('nvim-ts-autotag').setup()
-- closetag 配置
vim.g.closetag_filetypes = 'html,xhtml,phtml,jsx,tsx'
vim.g.closetag_emptyTags_caseSensitive = 1
local lspconfig = require('lspconfig')
lspconfig.volar.setup({})
lspconfig.html.setup {
capabilities = require('cmp_nvim_lsp').default_capabilities(),
filetypes = { 'html', 'htmldjango' }
}
lspconfig.ts_ls.setup({})
local cmp = require('cmp')
cmp.setup {
sources = {
{ name = 'nvim_lsp' },
{ name = 'buffer' },
{ name = 'path' },
},
mapping = {
['<CR>'] = cmp.mapping.confirm({ select = true }),
['<Down>'] = cmp.mapping.select_next_item(),
['<Up>'] = cmp.mapping.select_prev_item(),
--['<Tab>'] = cmp.mapping.select_next_item(),
--['<S-Tab>'] = cmp.mapping.select_prev_item(),
}
}
-- 或者更简单的映射(仅显示可用的修复)
vim.keymap.set('n', '<leader>ca', vim.lsp.buf.code_action, { desc = '[C]ode [A]ction' })
vim.keymap.set('n', '<F2>', vim.lsp.buf.rename)
vim.keymap.set('n', '<F3>', vim.lsp.buf.format)
vim.keymap.set('n', 'gd', vim.lsp.buf.definition)
vim.keymap.set('n', 'gr', vim.lsp.buf.references)
vim.keymap.set('n', 'K', vim.lsp.buf.hover)
vim.keymap.set('n', 'ge', vim.diagnostic.open_float)
vim.keymap.set('n', 'gE', vim.diagnostic.setloclist)
vim.keymap.set('n', 'en', vim.diagnostic.goto_next)
vim.keymap.set('n', 'eb', vim.diagnostic.goto_prev)
vim.cmd([[
set exrc
set secure
syntax on
set ruler
set ai
set wildignore+=.*/,*/node_modules/*,*/dist/*,*/build/*,*/logs/* set nu rnu
set ts=2
set shiftwidth=1
"nnoremap gr gT
nnoremap fn :cn<CR>
nnoremap fb :cN<CR>
nnoremap <C-s> :wa<CR>
inoremap <C-s> <Esc>:wa<CR>
nnoremap <C-q> :q<CR>
inoremap <C-q> <Esc>:q<CR>
nnoremap <silent> <C-n> :set number! relativenumber!<CR>
nnoremap <silent> <C-p> :set paste!<CR>
nnoremap <silent> <C-h> :set hlsearch!<CR>
vnoremap <C-v> y:<C-u>vim /<C-r>"/g **/*
nnoremap <C-v> yiw:<C-u>vim /<C-r>"/g **/*
vnoremap <C-f> y/<C-r>"<CR>
nnoremap <C-f> yiw/<C-r>"<CR>
vnoremap <C-g> y:%s/<C-r>"/<C-r>"/gc
nnoremap <C-g> yiw:%s/<C-r>"/<C-r>"/gc
]])
:PackerSync
sudo dnf install -y nodejs
npm install -g typescript typescript-language-server @volar/vue-language-server vscode-langservers-extracted
nvim +"LspRestart" +q