我的nvim的init.lua配置

nvim的配置文件路径在~/.config/nvim路径下:

一、目录如下:

  • coc-settings.json文件是配置代码片段路径的文件
  • init.lua配置文件的启动脚本
  • lua/config.lua 全局配置文件
  • lua/keymaps.lua 快捷键映射键文件
  • lua/plugins.lua 插件的安装和配置文件
  • packer_compiled.lua 安装packer产生的配置文件,该文件中会存在packer安装插件

二、配置

coc-settings.json文件

{
  "snippets.ultisnips.pythonPrompt": false,
  "snippets.ultisnips.directories": [
    "~/.config/coc/ultisnips",
    "~/.local/share/nvim/site/pack/packer/start/vim-snippets.git/UltiSnips"
  ]
}

init.lua

require "plugins"
require "config"
require "keymaps"

config.lua

--搜索相关
vim.opt.number = true -- 显示行号
vim.opt.showcmd = true -- 在底部显示当前命令
vim.opt.wildmenu = true -- 启用命令行补全菜单
vim.opt.wildmode = "longest:full,full" -- 优化补全行为
vim.opt.incsearch = true -- 启用增量搜索
vim.opt.hlsearch = true -- 高亮显示搜索结果
vim.opt.incsearch = true -- 增量搜索(输入时实时匹配)
vim.opt.ignorecase = true -- 搜索时忽略大小写
vim.opt.smartcase = true -- 如果搜索模式包含大写字母,则区分大小写
vim.opt.showmatch = true -- 高亮显示匹配的括号

--界面相关
vim.opt.laststatus=2 -- 总是显示状态栏
vim.opt.showmode = true -- 显示当前模式(如 INSERT、NORMAL)
vim.opt.ruler = true -- 显示光标位置(行号、列号)
vim.opt.scrolloff=5 -- 光标距离顶部/底部的最小行数
--vim.opt.guifont= "Consolas:h12" -- 设置 GUI 字体(仅适用于 GUI 版本的 Neovim)
vim.opt.guifont = "FiraCode Nerd Font:h12"

--缩进相关
vim.opt.autoindent = true -- 自动缩进
vim.opt.smartindent = true -- 智能缩进
vim.opt.cindent = true -- C 语言风格的缩进
vim.opt.tabstop=4 -- Tab 键的宽度为 4 个空格
vim.opt.softtabstop=4 -- 编辑时 Tab 键的宽度为 4 个空格
vim.opt.shiftwidth=4 -- 自动缩进时的宽度为 4 个空格
vim.opt.expandtab = true -- 将 Tab 转换为空格

--编码相关
vim.opt.encoding="utf-8"  -- 默认编码为 UTF-8
vim.opt.fileencoding="utf-8" -- 文件保存时的编码为 UTF-8
vim.opt.fileencodings="ucs-bom,utf-8,cp936,latin1,gb18030,gbk,gb2312,chinese" -- 文件编码探测顺序
vim.opt.fileformats="unix,dos" -- 文件换行符格式(Unix 和 DOS)

--其他配置
vim.opt.linebreak = true -- 在单词边界换行
vim.opt.wrap = true -- 自动换行
vim.opt.mouse="" --禁用鼠标支持
vim.opt.compatible = false -- 禁用 Vi 兼容模式
vim.opt.backspace = "indent,eol,start" -- 允许退格键删除缩进、换行符和插入模式前的字符
vim.opt.endofline = false -- 不自动添加换行符
vim.opt.list = true -- 显示不可见字符(如 Tab、空格)
--vim.opt.listchars = {tab = '¦\\'}
vim.opt.syntax = "on" -- 启用语法高亮
vim.opt.timeoutlen=130 -- 快捷键超时时间(毫秒)
vim.cmd('filetype plugin on') -- 启用文件类型检测和插件

vim.opt.list = true -- 启用显示不可见字符
vim.opt.listchars = {
  tab = '│ ', -- 用 │ 表示 Tab
  trail = '·', -- 用 · 表示行尾空格
  extends = '›', -- 用 › 表示超出屏幕的文本
  precedes = '‹', -- 用 ‹ 表示超出屏幕的文本
  nbsp = '␣', -- 用 ␣ 表示非断行空格
}

vim.opt.cursorline = true -- 启用光标所在行高亮
vim.opt.cursorcolumn = true -- 启用光标所在列高亮
vim.opt.termguicolors = true --启用真彩色

keymaps.lua

--前进和后退的快捷键
vim.keymap.set({"n", "v"}, 'fh', '^', {noremap=true, silent=true})
vim.keymap.set({"n", "v"}, 'fl', '$', {noremap=true, silent=true})

--返回normal模式
vim.keymap.set({"i", "v"}, 'fj', '<ESC>', {noremap=true, silent=true})

--查看系统函数
vim.keymap.set('n', '?', '<s-k>', {noremap=true, silent=true})

--写入和保存
vim.keymap.set('n', 'W', ':w!<CR>', {noremap=true, silent=true})
vim.keymap.set('n', 'Q', ':q!<CR>', {noremap=true, silent=true})

--输入命令
vim.keymap.set('n', '<space>', ':', {noremap=true})
vim.keymap.set('n', '<12>', ':TagbarToggle<CR>', {noremap=true, silent=true})

--分屏的设置快捷键
vim.keymap.set('n', 'sl', ':set splitright<CR>:vsplit<CR>', {noremap=true, silent=true})
vim.keymap.set('n', 'sh', ':set nosplitright<CR>:vsplit<CR>', {noremap=true, silent=true})
vim.keymap.set('n', 'sk', ':set nosplitbelow<CR>:split<CR>', {noremap=true, silent=true})
vim.keymap.set('n', 'sj', ':set splitbelow<CR>:split<CR>', {noremap=true, silent=true})

--移动分屏的设置快捷键
vim.keymap.set('n', '<s-l>', '<c-w>l', {noremap=true, silent=true})
vim.keymap.set('n', '<s-h>', '<c-w>h', {noremap=true, silent=true})
vim.keymap.set('n', '<s-k>', '<c-w>k', {noremap=true, silent=true})
vim.keymap.set('n', '<s-j>', '<c-w>j', {noremap=true, silent=true})

--设置函数前进和后退的快捷键
vim.keymap.set('n', '<s-o>', '<c-o>', {noremap=true, silent=true})
vim.keymap.set('n', '<s-i>', '<c-i>', {noremap=true, silent=true})

--调整尺寸的快捷键
vim.keymap.set({"n", "v"}, '<up>', ':res +5<CR>', {noremap=true, silent=true})
vim.keymap.set({"n", "v"}, '<down>', ':res -5<CR>', {noremap=true, silent=true})
vim.keymap.set({"n", "v"}, '<left>', ':vertical resize-5<CR>', {noremap=true, silent=true})
vim.keymap.set({"n", "v"}, '<right>', ':vertical resize+5<CR>', {noremap=true, silent=true})

--ctags插件
vim.keymap.set({"n"}, ';', 'g<c-]>', {noremap=true, silent=true})

plugins.lua

vim.cmd [[packadd packer.nvim]]

return require('packer').startup(function(use)
    use {'https://gitee.com/oyaay/nvim-web-devicons.git'}
    use {'https://gitee.com/cangmj/lualine.nvim.git',requires = { 'oyaay/nvim-web-devicons', opt = true }}
    use { 'https://gitee.com/cc906979421/vim-gutentags.git'}
    use { 'https://gitee.com/trunkMode/nerdtree.git'}
    use { 'https://gitee.com/HXXH2022/ale.git'}
    use { 'https://gitee.com/cc906979421/coc.nvim.git', branch='release'}
    use { 'https://gitee.com/zgpio/nvim-treesitter.git', 
        run = ':TSUpdate'
    }
    use { 'https://gitee.com/hwyang/vim-snippets.git'}
    use { 'https://gitee.com/yaozhijin/tagbar.git'}
    use { 'https://gitee.com/neopack/tokyonight.nvim.git'}
    use { 'https://gitee.com/dglxlcl/vim-signify.git'}
    use { 'https://gitee.com/ProVim/vim-easymotion.git' }
    use { 'https://gitee.com/mirrors_jiangmiao/auto-pairs.git'}
    use { 'https://gitee.com/rockmanlc/molokai.git'}
    use {
        'https://gitee.com/cc906979421/telescope.nvim', tag = '0.1.8',
        requires = { {'https://gitee.com/oyaay/plenary.nvim.git'} }
    }
    -- Packer can manage itself
    use 'yunduozhai/packer.nvim'

    --***************************--
    --      lualine.nvim         --
    --***************************--
    require('lualine').setup {
        options = {
            theme = 'tokyonight',  -- 设置主题
            icons_enabled = true,  -- 启用图标
            component_separators = { left = '', right = '' },
            section_separators = { left = '', right = '' },
        },
        sections = {
            lualine_a = {'mode'},
            lualine_b = {'branch', 'diff', 'diagnostics'},
            lualine_c = {'filename'},
            lualine_x = {'encoding', 'fileformat', 'filetype'},
            lualine_y = {'progress'},
            lualine_z = {'location'}
        }
    }
    --***************************--
    --       nerdtree           --
    --***************************--
    -- 打开/关闭 NERDTree 的快捷键
    vim.api.nvim_set_keymap('n', '<F12>', ':NERDTreeToggle<CR>', { noremap = true, silent = true })
    --***************************--
    --       gutentags           --
    --***************************--
    -- 配置 vim-gutentags
    vim.g.gutentags_enabled = true  -- 启用 gutentags
    vim.g.gutentags_ctags_executable = 'ctags'  -- 指定 ctags 可执行文件
    vim.g.gutentags_cache_dir = vim.fn.expand('~/.cache/nvim/tags')  -- 设置缓存目录
    vim.g.gutentags_project_root = { '.git', '.svn', '.root' }  -- 项目根目录标记
    vim.g.gutentags_generate_on_new = true  -- 新建文件时生成 tags
    vim.g.gutentags_generate_on_missing = true  -- 缺少 tags 时生成
    vim.g.gutentags_generate_on_write = true  -- 保存文件时更新 tags

    --***************************--
    --       indentline          --
    --***************************--

    --***************************--
    --        coc.nvim           --
    --***************************--
    vim.opt.backup = false
    vim.opt.writebackup = false
    vim.opt.signcolumn = "yes"
    local keyset = vim.keymap.set
    function _G.check_back_space()
        local col = vim.fn.col('.') - 1
        return col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') ~= nil
    end
    local opts = {silent = true, noremap = true, expr = true, replace_keycodes = false}
    keyset("i", "<c-j>", 'coc#pum#visible() ? coc#pum#next(1) : v:lua.check_back_space() ? "<TAB>" : coc#refresh()', opts)
    keyset("i", "<c-k>", [[coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"]], opts)
    keyset("i", "<cr>", [[coc#pum#visible() ? coc#pum#confirm() : "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"]], opts)
    -- 自动安装 coc 插件
    vim.g.coc_global_extensions = {
        'coc-json',
        'coc-tsserver',
        'coc-clangd',
        'coc-go',
        'coc-html',
        'coc-snippets',
        'coc-highlight',
        'coc-spell-checker',
        'coc-marketplace'
    }

    --***************************--
    --        vim-snippets       --
    --***************************--
    -- 设置全局变量
    vim.g.coc_snippet_next = '<C-l>'  -- 使用 Ctrl+j 跳转到下一个占位符
    vim.g.coc_snippet_prev = '<C-h>'  -- 使用 Ctrl+k 跳转到上一个占位符

    --***************************--
    --        treesitter         --
    --***************************--
    require('nvim-treesitter.configs').setup {
        -- 启用语法高亮
        highlight = {
            enable = true,
            additional_vim_regex_highlighting = false,
        },

        -- 启用代码缩进
        indent = {
            enable = true,
        },

        -- 启用增量选择
        incremental_selection = {
            enable = true,
            keymaps = {
                init_selection = 'gnn',  -- 进入增量选择模式
                node_incremental = 'grn',  -- 扩展选择范围
                scope_incremental = 'grc',  -- 扩展选择范围到整个作用域
                node_decremental = 'grm',  -- 缩小选择范围
            },
        },

        -- 启用代码折叠
        fold = {
            enable = false,
        },

        -- 启用自动安装语法解析器
        ensure_installed = {
            'bash', 'c', 'cpp', 'css', 'go', 'html', 'java', 'javascript', 'json',
            'lua', 'python', 'rust', 'typescript', 'vim', 'yaml', 'markdown',
        },

        textobjects = {
            enable = true,
        },
    }
    --***************************--
    --      tokyonight           --
    --***************************--
    --require('tokyonight').setup({
    --   style = 'night',  -- 可选值:'night', 'storm', 'day', 'moon'
    --})
    --vim.cmd('colorscheme tokyonight')
    --***************************--
     --      molokai           --
    --***************************--                       
    -- 启用背景透明                                             
    vim.g.molokai_original = 1
    vim.g.rehash256 = 1
                                                                      
    -- 设置主题                                                     
    vim.cmd('colorscheme molokai')

    --***************************--
    --      easymotion.nvim      --
    --***************************--
    -- 配置 easymotion
    vim.g.EasyMotion_do_mapping = 0 -- 禁用默认快捷键
    vim.g.EasyMotion_smartcase = 1  -- 启用智能大小写
    vim.g.EasyMotion_startofline = 0 -- 跳转时保持光标位置
    -- 设置快捷键
    vim.api.nvim_set_keymap('n', 's', '<Plug>(easymotion-overwin-f2)', { noremap = true, silent = true })

    --***************************--
    --        telescope          --
    --***************************--
    local builtin = require('telescope.builtin')
    vim.keymap.set('n', '<s-p>', builtin.find_files, { desc = 'Telescope find files' })
    vim.keymap.set('n', '<c-f>', builtin.live_grep, { desc = 'Telescope live grep' })
    vim.keymap.set('n', '<s-b>', builtin.buffers, { desc = 'Telescope buffers' })
    vim.keymap.set('n', '<s-f>', builtin.current_buffer_fuzzy_find, { desc = 'Telescope current_buffer_fuzzy_find' })
    vim.keymap.set('n', '<s-m>', builtin.marks, { desc = 'Telescope marks' })

    --telescope--获取当前光标下的单词并进行搜索,依赖telescope的live grep功能
    local builtin = require('telescope.builtin')
    local function search_selected_text()
        local selected_text = vim.fn.expand('<cword>')

        if selected_text == "" then
            print("No text selected")
            return
        end

        builtin.live_grep({ default_text = selected_text })
    end
    vim.api.nvim_create_user_command('SearchSelectedText', search_selected_text, {})
    vim.api.nvim_set_keymap('n', '<c-k>', ':SearchSelectedText<CR>', { noremap = true, silent = true })

    --***************************--
    --        tagbar         --
    --***************************--
    -- 打开/关闭 Tagbar 的快捷键
    vim.api.nvim_set_keymap('n', '<F9>', ':TagbarToggle<CR>', { noremap = true, silent = true })
    -- 设置 Tagbar 宽度
    vim.g.tagbar_width = 30
    -- 自动聚焦到 Tagbar
    vim.g.tagbar_autofocus = 1
    --***************************--
    --          signify          --
    --***************************--
    -- 启用 signify
    vim.g.signify_enable = 1

    -- 设置 signify 的符号
    vim.g.signify_sign_add = "✚"
    vim.g.signify_sign_change = "➜"
    vim.g.signify_sign_delete = "✖"
    vim.g.signify_sign_delete_first_line = "‾"
    vim.g.signify_sign_change_delete = "~_"

    -- 设置 signify 的更新延迟(单位:毫秒)
    vim.g.signify_update_on_bufenter = 1
    vim.g.signify_update_on_focusgained = 1

    -- 设置 signify 的优先级(避免与其他插件冲突)
    vim.g.signify_priority = 5

    -- 设置 signify 的 Git 支持
    vim.g.signify_vcs_list = { "git" }
    -- 显示更改的详细信息
    vim.api.nvim_set_keymap("n", "<F10>", ":SignifyDiff<CR>", { noremap = true, silent = true })


end)

三、路径

coc.nvim插件安装其他插件的路径(例如:coc-go, coc-clangd 等等):~/.config/coc

其他插件的下载路径:~/.local/share/nvim

相关推荐
橘哥哥2 分钟前
前端通过后端返回的数据流下载文件
开发语言·前端·javascript
Atlim11 分钟前
maven多模块项目编译一直报Failure to find com.xxx.xxx:xxx-xxx-xxx:pom:1.0-SNAPSHOT in问题
java·开发语言·maven
军训猫猫头19 分钟前
23.行号没有了怎么办 滚动条没有了怎么办 C#例子
开发语言·c#
黑客老李34 分钟前
BaseCTF scxml 详解
开发语言·网络·数据库·python·sql·安全
编程|诗人36 分钟前
Ruby语言的数据库编程
开发语言·后端·golang
SyntaxSage37 分钟前
Ruby语言的学习路线
开发语言·后端·golang
云端 架构师37 分钟前
Ruby语言的并发编程
开发语言·后端·golang
DevOpsDojo38 分钟前
Ruby语言的字符串处理
开发语言·后端·golang
Code花园1 小时前
Scala语言的循环实现
开发语言·后端·golang
wjs20241 小时前
AngularJS HTML DOM
开发语言