NeoVim配置文件基本的

2024-05-11 17:52
文章标签 基本 配置文件 neovim

本文主要是介绍NeoVim配置文件基本的,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

init.lua 文件

require('options') 
require('keymaps')
require('plugins')
require('colorscheme')
require('lsp')-- 插件
require("config.lualine")
require("config.nvim-tree")
require("config.treesitter")

~\lua\plugins.lua 文件

local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) thenvim.fn.system({"git","clone","--filter=blob:none","https://github.com/folke/lazy.nvim.git","--branch=stable", -- latest stable releaselazypath,})
end
vim.opt.rtp:prepend(lazypath)require("lazy").setup({-- LSP manager"williamboman/mason.nvim","williamboman/mason-lspconfig.nvim","neovim/nvim-lspconfig",-- Vscode-like pictograms{"onsails/lspkind.nvim",event = { "VimEnter" },},-- Auto-completion engine{"hrsh7th/nvim-cmp",dependencies = {"lspkind.nvim","hrsh7th/cmp-nvim-lsp", -- lsp auto-completion"hrsh7th/cmp-buffer", -- buffer auto-completion"hrsh7th/cmp-path", -- path auto-completion"hrsh7th/cmp-cmdline", -- cmdline auto-completion},config = function()require("config.nvim-cmp")end,},-- Code snippet engine{"L3MON4D3/LuaSnip",version = "v2.*",},"navarasu/onedark.nvim","nvim-lualine/lualine.nvim",  -- 状态栏"nvim-tree/nvim-tree.lua",  -- 文档树"nvim-tree/nvim-web-devicons", -- 文档树图标"nvim-treesitter/nvim-treesitter", -- 语法高亮
})

~\lua\options.lua 文件

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

~\lua\lsp.lua 文件

-- Note: The order matters: mason -> mason-lspconfig -> lspconfig
require("mason").setup({ui = {icons = {package_installed = "✓",package_pending = "➜",package_uninstalled = "✗",},},
})require("mason-lspconfig").setup({-- A list of servers to automatically install if they're not already installedensure_installed = { "lua_ls", "clangd" },
})-- Set different settings for different languages' LSP
-- LSP list: https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md
-- How to use setup({}): https://github.com/neovim/nvim-lspconfig/wiki/Understanding-setup-%7B%7D
--     - the settings table is sent to the LSP
--     - on_attach: a lua callback function to run after LSP attaches to a given buffer
local lspconfig = require("lspconfig")-- Customized on_attach function
-- See `:help vim.diagnostic.*` for documentation on any of the below functions
local opts = { noremap = true, silent = true }
vim.keymap.set("n", "<space>e", vim.diagnostic.open_float, opts)
vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, opts)
vim.keymap.set("n", "]d", vim.diagnostic.goto_next, opts)
vim.keymap.set("n", "<space>q", vim.diagnostic.setloclist, opts)-- Use an on_attach function to only map the following keys
-- after the language server attaches to the current buffer
local on_attach = function(client, bufnr)-- Enable completion triggered by <c-x><c-o>vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc")-- See `:help vim.lsp.*` for documentation on any of the below functionslocal bufopts = { noremap = true, silent = true, buffer = bufnr }vim.keymap.set("n", "gD", vim.lsp.buf.declaration, bufopts)vim.keymap.set("n", "gd", vim.lsp.buf.definition, bufopts)vim.keymap.set("n", "K", vim.lsp.buf.hover, bufopts)vim.keymap.set("n", "gi", vim.lsp.buf.implementation, bufopts)vim.keymap.set("n", "<C-k>", vim.lsp.buf.signature_help, bufopts)vim.keymap.set("n", "<space>wa", vim.lsp.buf.add_workspace_folder, bufopts)vim.keymap.set("n", "<space>wr", vim.lsp.buf.remove_workspace_folder, bufopts)vim.keymap.set("n", "<space>wl", function()print(vim.inspect(vim.lsp.buf.list_workspace_folders()))end, bufopts)vim.keymap.set("n", "<space>D", vim.lsp.buf.type_definition, bufopts)vim.keymap.set("n", "<space>rn", vim.lsp.buf.rename, bufopts)vim.keymap.set("n", "<space>ca", vim.lsp.buf.code_action, bufopts)vim.keymap.set("n", "gr", vim.lsp.buf.references, bufopts)vim.keymap.set("n", "<space>f", function()vim.lsp.buf.format({async = true,-- Only request null-ls for formattingfilter = function(client)return client.name == "null-ls"end,})end, bufopts)
end-- How to add a LSP for a specific language?
-- 1. Use `:Mason` to install the corresponding LSP.
-- 2. Add configuration below.
lspconfig.gopls.setup({on_attach = on_attach,
})lspconfig.lua_ls.setup({on_attach = on_attach,settings = {Lua = {runtime = {-- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim)version = "LuaJIT",},diagnostics = {-- Get the language server to recognize the `vim` globalglobals = { "vim" },},workspace = {-- Make the server aware of Neovim runtime fileslibrary = vim.api.nvim_get_runtime_file("", true),},-- Do not send telemetry data containing a randomized but unique identifiertelemetry = {enable = false,},},},
})-- source: https://rust-analyzer.github.io/manual.html#nvim-lsp
lspconfig.clangd.setup({on_attach = on_attach,
})lspconfig.ocamllsp.setup({on_attach = on_attach,
})

~\lua\keymaps.lua 文件

-- define common options
local opts = {noremap = true, -- non-recursivesilent = true, -- do not show message
}-----------------
-- Normal mode --
------------------- Hint: see `:h vim.map.set()`
-- Better window navigation
vim.keymap.set("n", "<C-h>", "<C-w>h", opts)
vim.keymap.set("n", "<C-j>", "<C-w>j", opts)
vim.keymap.set("n", "<C-k>", "<C-w>k", opts)
vim.keymap.set("n", "<C-l>", "<C-w>l", opts)-- Resize with arrows
-- delta: 2 lines
vim.keymap.set("n", "<C-Up>", ":resize -2<CR>", opts)
vim.keymap.set("n", "<C-Down>", ":resize +2<CR>", opts)
vim.keymap.set("n", "<C-Left>", ":vertical resize -2<CR>", opts)
vim.keymap.set("n", "<C-Right>", ":vertical resize +2<CR>", opts)-- for nvim-tree
-- default leader key: \
vim.keymap.set("n", "<leader>e", ":NvimTreeToggle<CR>", opts)-----------------
-- Visual mode --
------------------- Hint: start visual mode with the same area as the previous area and the same mode
vim.keymap.set("v", "<", "<gv", opts)
vim.keymap.set("v", ">", ">gv", opts)-- 插入模式
vim.keymap.set("i", "jk", "<ESC>")-- 可视模式
vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv")
vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv")

~\lua\colorscheme.lua 文件

-- define your colorscheme here
local colorscheme = 'onedark'local is_ok, _ = pcall(vim.cmd, "colorscheme " .. colorscheme)
if not is_ok thenvim.notify('colorscheme ' .. colorscheme .. ' not found!')return
end

~\lua\conifg\lualine.lua 文件

require('lualine').setup({options = {theme = 'onedark'}
})

~\lua\conifg\nvim-cmp.lua 文件

local has_words_before = function()unpack = unpack or table.unpacklocal line, col = unpack(vim.api.nvim_win_get_cursor(0))return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
endlocal luasnip = require("luasnip")
local cmp = require("cmp")cmp.setup({snippet = {-- REQUIRED - you must specify a snippet engineexpand = function(args)require('luasnip').lsp_expand(args.body) -- For `luasnip` users.end,},mapping = cmp.mapping.preset.insert({-- Use <C-b/f> to scroll the docs['<C-b>'] = cmp.mapping.scroll_docs( -4),['<C-f>'] = cmp.mapping.scroll_docs(4),-- Use <C-k/j> to switch in items['<C-k>'] = cmp.mapping.select_prev_item(),['<C-j>'] = cmp.mapping.select_next_item(),-- Use <CR>(Enter) to confirm selection-- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.['<CR>'] = cmp.mapping.confirm({ select = true }),-- A super tab-- sourc: https://github.com/hrsh7th/nvim-cmp/wiki/Example-mappings#luasnip["<Tab>"] = cmp.mapping(function(fallback)-- Hint: if the completion menu is visible select next oneif cmp.visible() thencmp.select_next_item()elseif has_words_before() thencmp.complete()elsefallback()endend, { "i", "s" }), -- i - insert mode; s - select mode["<S-Tab>"] = cmp.mapping(function(fallback)if cmp.visible() thencmp.select_prev_item()elseif luasnip.jumpable( -1) thenluasnip.jump( -1)elsefallback()endend, { "i", "s" }),}),-- Let's configure the item's appearance-- source: https://github.com/hrsh7th/nvim-cmp/wiki/Menu-Appearanceformatting = {-- Set order from left to right-- kind: single letter indicating the type of completion-- abbr: abbreviation of "word"; when not empty it is used in the menu instead of "word"-- menu: extra text for the popup menu, displayed after "word" or "abbr"fields = { 'abbr', 'menu' },-- customize the appearance of the completion menuformat = function(entry, vim_item)vim_item.menu = ({nvim_lsp = '[Lsp]',luasnip = '[Luasnip]',buffer = '[File]',path = '[Path]',})[entry.source.name]return vim_itemend,},-- Set source precedencesources = cmp.config.sources({{ name = 'nvim_lsp' },    -- For nvim-lsp{ name = 'luasnip' },     -- For luasnip user{ name = 'buffer' },      -- For buffer word completion{ name = 'path' },        -- For path completion})
})

~\lua\conifg\nvim-tree.lua 文件

-- 默认不开启nvim-tree
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1require("nvim-tree").setup()

~\lua\conifg\treesitter.lua 文件

require'nvim-treesitter.configs'.setup {-- 添加不同语言ensure_installed = { "vim", "vimdoc", "c", "cpp", "javascript", "json", "lua", "typescript", "tsx", "css", "markdown", "markdown_inline" }, -- one of "all" or a list of languageshighlight = { enable = true },indent = { enable = true },-- 不同括号颜色区分rainbow = {enable = true,extended_mode = true,max_file_lines = nil,}
}

这篇关于NeoVim配置文件基本的的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/980244

相关文章

Python Faker库基本用法详解

《PythonFaker库基本用法详解》Faker是一个非常强大的库,适用于生成各种类型的伪随机数据,可以帮助开发者在测试、数据生成、或其他需要随机数据的场景中提高效率,本文给大家介绍PythonF... 目录安装基本用法主要功能示例代码语言和地区生成多条假数据自定义字段小结Faker 是一个 python

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

SpringBoot3使用Jasypt实现加密配置文件

《SpringBoot3使用Jasypt实现加密配置文件》这篇文章主要为大家详细介绍了SpringBoot3如何使用Jasypt实现加密配置文件功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... 目录一. 使用步骤1. 添加依赖2.配置加密密码3. 加密敏感信息4. 将加密信息存储到配置文件中5

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

SpringBoot中配置文件pom.xml的使用详解

《SpringBoot中配置文件pom.xml的使用详解》SpringBoot的pom.xml文件是Maven项目的核心配置文件,用于定义项目的依赖、插件、构建配置等信息,下面小编就来和大家详细介绍一... 目录1. 基本结构2. 关键部分详解2.1 <modelVersion>2.2 项目坐标2.3 <p

Python中配置文件的全面解析与使用

《Python中配置文件的全面解析与使用》在Python开发中,配置文件扮演着举足轻重的角色,它们允许开发者在不修改代码的情况下调整应用程序的行为,下面我们就来看看常见Python配置文件格式的使用吧... 目录一、INI配置文件二、YAML配置文件三、jsON配置文件四、TOML配置文件五、XML配置文件

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav