相关文章推荐
潇洒的牙膏  ·  postgresql c ...·  1 年前    · 
傲视众生的领带  ·  JQuery ...·  1 年前    · 
魁梧的大熊猫  ·  如何使用fasterxml将kotlin数据 ...·  1 年前    · 
咆哮的馒头  ·  js散度 - OSCHINA - ...·  2 年前    · 
飘逸的大白菜  ·  java - ...·  2 年前    · 
Code  ›  你对 NeoVim 怎么看? -
https://www.zhihu.com/question/29652536/answer/2758267498
神勇威武的斑马
2 年前
你对 NeoVim 怎么看?
匿名用户
匿名用户

分享一个我用 Lua 编写的 Neovim 一体化配置框架。早用 lua 早日摆脱 vimscript。

特性

  • 用 Lua 管理 nvim 配置。所有配置项都可覆盖。
  • 充分使用 Neovim 功能:Native LSP、Float Window、Winbar。
  • 基于 vim-plug 或 packer.nvim 的插件框架,任你选择。
  • 帅气的界面和配色。暗黑模式。支持真彩色、平滑滚动、滚动条、Dashboard。你可以修改配色,详见 doc/colors.md 。
  • 支持配置 github 代理,在中国大陆可加快插件下载速度。
  • 集成了 120 多个 Vim/Nvim 插件。增强插件的使用体验,并且修复了一些插件的缺点。

插件列表

  • 插件管理器: vim-plug (默认) 或 packer
  • 面板: alpha.nvim
  • 大纲: aerial (默认) 或 majutsushi/tagbar
  • 文件浏览器: neo-tree (默认) 或 nerdtree 或 nvim-tree
  • 状态栏: lualine (默认) 或 airline
  • Tab 栏: tabby
  • Buffer 栏: barbar 或 bufferline (如果使用 Buffer 栏,你要禁用 Tab 栏插件)
  • 光标栏高亮: beacon (默认) 或 specs.nvim
  • 滚动条: nvim-scrollbar
  • 平滑滚动: neoscroll.nvim
  • 会话: persisted (默认) 或 possession 或 xolox/vim-session 或 rmagatti/auto-session
  • 模糊查找: telescope 与 ctrlsf
  • Diagnostics 窗口: trouble
  • 撤销: vim-mundo
  • 语法高亮: treesitter 与 nvim-ts-rainbow 与 nvim-treesitter-pairs
  • 单词高亮: vim-interestingwords
  • 注释代码: Comment.nvim (默认) 或 nerdcommenter
  • LSP: nvim-lspconfig 与 treesitter 与 null-ls 与 nlsp 与 goto-preview 与 lsp-toggle
  • DAP: nvim-dap
  • 格式化: lsp-format 与 editorconfig-vim
  • Formatter, Linter, LSP, DAP 管理器: mason 与 mason-installer
  • 补全: nvim-cmp
  • Snippets: nvim-snippy
  • Markdown: plasticboy/vim-markdown 与 markdown-preview 与 headlines.nvim 与 vim-MarkdownTOC
  • 括号配对: nvim-surround 与 nvim-autopairs 与 nvim-ts-autotag 与 vim-matchup
  • Git: gitsigns 与 lazygit 与 diffview.nvim
  • 缩进基准线: indent-blankline
  • 光标移动: hop.nvim 与 accelerated-jk
  • 窗口选择: nvim-window-picker (默认) 或 yorickpeterse/nvim-window 或 vim-choosewin
  • 窗口大小调整: simeji/winresizer 与 windows.nvim
  • Context: aerial (默认) 或 navic 与 nvim-treesitter-context
  • 文本对齐: vim-easy-align
  • 书签: vim-bookmarks
  • 标记: marks.nvim
  • 日历: mattn/calendar-vim
  • Curl: rest.nvim
  • Icons: devicons 与 icon-picker
  • UI 增强: dressing 和 noice
  • 启动加速: impatient.nvim
  • 跳出输入模式的快捷键: better-escape.nvim
  • Increment: increment-activator
  • Filetype: filetype.nvim
  • Latex: nabla
  • 通知: notify (默认) 或 notifier
  • 性能调优: vim-startuptime
  • Text-Objects: wildfire 与 nvim-treesitter-textobjects
  • 表格: vim-table-mode
  • 终端: neoterm
  • 测试: nvim-test
  • TODO 注释: todo-comments
  • 尾空格: whitespace
  • 复制粘贴: yanky
  • 禅模式: twilight 与 zen-mode
  • 笔记本: zk
  • 实时命令: live-command
  • 颜色着色: nvim-colorizer
  • 游戏

截图

Dashboard
主界面
提纲
Finder
快捷键
Diagnostic
代码补全
函数签名补全


依赖

  • NVIM v0.8 及以上版本
  • python3、pip3
  • nvim python provider
  • pip3 install --upgrade --user pynvim
  • pip2 install --upgrade --user pynvim (这是可选的)
  • Git 与 curl
  • C 编译器与 libstdc++。( treesitter 需要)
  • Nerd Font 字体 。推荐 DejaVuSansMonoForPowerline Nerd Font 。记得修改你的终端的字体设置。
  • ripgrep(rg)
  • 支持 Linux 和 MacOS,不支持 Windows

安装

你可使用 git clone 安装本项目。或在容器中运行 nvim。

git clone

PACK_DIR=${XDG_DATA_HOME:-$HOME/.local/share}/nvim/site/pack/user/start
mkdir -p "$PACK_DIR"
git clone --depth 1 --single-branch https://github.com/adoyle-h/one.nvim.git "$PACK_DIR"/one.nvim
# Set your nvim config directory
NVIM_HOME=${XDG_CONFIG_HOME:-$HOME/.config}/nvim
mkdir -p "$NVIM_HOME"
echo "require('one').setup {}" > "$NVIM_HOME"/init.lua

初始化 后,执行 nvim 启动。

容器

你可以在容器里运行它。这要求你的主机已安装 docker。

构建容器

执行 ./scripts/build-container 。 (建议中国地区用户加上 -p 参数使用代理,加快构建速度)。

苹果芯片的 Mac 用户注意 。当前 nvim 未提供 Arm 架构下的发行版。所以容器构建和运行都使用了 --platform=linux/amd64 选项。苹果芯片下运行容器会很卡。

使用容器

# 在主机上缓存 nvim 数据
docker volume create nvim-data
# 建议把这行 alias 加到 ~/.bashrc
alias nvim='docker run --rm -it --platform linux/amd64 -v "$HOME/.config/nvim:/root/.config/nvim" -v "nvim-data:/root/.local/share/nvim" -v "$PWD:/workspace" adoyle/one.nvim:v0.8.0'

初始化 后,执行 nvim 启动。

配置

所有配置项都是可选的。

require('one').setup {}

用户配置

你可以传入自定义配置来覆盖默认配置。

require('one').setup {
  config = {
    colors = { -- basic colors
      white = '#BEC0C4', -- frontground
      black = '#15181D', -- background
      cursorLine = '#252931',
    ['mason-installer'] = {
      ensureInstalled = {
        'lua-language-server',
        'luaformatter',
        'bash-language-server',
  -- Add your plugins or override plugin default options.
  -- More examples in ./lua/one/plugins.lua
  plugins = {
    -- { 'profiling', disable = false },
    -- { 'psliwka/vim-smoothie', disable = false },
}

你可参考 我的 init.lua 来编写你的配置。

你可以覆盖插件的默认选项。详见 插件 - 使用插件 。

默认配置

configFn(config)

有些插件配置需要用到对应的模块。例如 null-ls 的 sources 配置项。你必须定义在 configFn(config) 函数。 函数的返回值必须是一个 table,它会被合并到 config 变量。

require('one').setup {
  configFn = function(config)
    local builtins = require('null-ls').builtins
    local codeActions = builtins.code_actions
    local diagnostics = builtins.diagnostics
    local formatting = builtins.formatting
    -- Do not return config, only return the overridden parts
    return {
      nullLS = {
        sources = {
          codeActions.eslint_d,
          codeActions.shellcheck,
          diagnostics.eslint_d,
          formatting.eslint_d.with {
            prefer_local = 'node_modules/.bin',
          formatting.lua_format,
  end,
}

覆盖插件参数

通过 require('one').setup {plugins = {}} ,你可以覆盖任何 插件参数 。你可以覆盖配色和快捷键设置。

查看配置

你可以通过编写 lua 脚本访问 require('one.config').config 或 a.CM.config 获取配置信息.

同时,这里提供了两个命令来查看配置: :ShowConfig 查看最终合并的配置。 :ShowPlugins 查看加载的和未加载的插件。

插件管理器

选择你喜欢的插件管理器,目前提供 vim-plug (默认) 和 packer 。

require('one').setup {
  config = {
    pluginManager = { use = 'packer' }, -- 'vim-plug' or 'packer'
}

vim-plug 管理的插件目录和 packer 管理的是不一样的。当你改变了 config.pluginManager.use 的值,需要重装插件。详见 初始化 流程。

  • Packer 默认配置
  • Vim-Plug 默认配置

插件

所有插件都可以被关闭,覆盖默认配置项,或者替换成你喜欢的插件。自定义配置和扩展非常方便。

插件的定义和使用,详见 ./doc/plugin.md 。

你甚至可以设置 onlyPlugins = {} 来一键禁用所有插件(不禁用插件管理器)。详见 Debug - Disable other plugins 。

代理

require('one').setup {
  config = {
    proxy = {
      -- 如果你在中国大陆,推荐使用 'https://ghproxy.com'。否则,不要设置该配置项。
      github = 'https://ghproxy.com',
}

有些插件使用了 git submodule,代理无法起作用。建议你执行 git config --global http.https://github.com.proxy https://ghproxy.com 设置全局代理。

使用

LSP

本项目使用 nvim-lspconfig 和 null-ls 来配置 LSP,管理 LSP 与 Nvim 的连接。 使用 mason.nvim 来安装与管理 lsp,dap 和 null-ls 的第三方包。

格代化码式

本项目基于 LSP 来格式化代码。 使用 lsp-format 代替 nvim 内置的 vim.lsp.buf.format ,提供更灵活的自定义配置。详见 lsp-format 选项 。

Telescope 插件

本项目实现了很多有用的 Telescope 插件,详见 ad-telescope-extensions.nvim 和 ./lua/one/plugins/telescope/extensions.lua 。

可使用 <space>; 快捷键查询所有 Telescope 插件。

窗口选择器

按下 <C-w><C-w> 打开选择器浏览所有 Tab 和窗口。 按下 <CR> 跳转到对应的窗口或者 Tab。

浮动命令栏

该功能默认未开启,因为还不稳定。 你可以依照下面的代码启用。

require('one').setup {
  plugins = {
    { 'noice', disable = false },
}

它会隐藏命令栏。当 : , / , ? 按下会弹出窗口。

扩展你自己的插件、高亮、命令等配置

local my = {}
my.highlights = function(config)
  local c = config.colors
  return { CmpGhostText = { fg = c.grey4, bg = c.darkBlue } }
my.commands = {
  Hello = ':echo world'
require('one').setup {
  plugins = { my },
}

全局变量

你可以在运行时操作 one.nvim 的属性。

╭─────────────────────╮
    │   one.CM        CMD │
    │   one.FT        CMD │
    │   one.PM        CMD │
    │   one.cmp       CMD │
 
推荐文章
潇洒的牙膏  ·  postgresql c extension example-掘金
1 年前
傲视众生的领带  ·  JQuery Confirm确认框_道问苍天的博客-CSDN博客
1 年前
魁梧的大熊猫  ·  如何使用fasterxml将kotlin数据类转换为xml? - 问答 - 腾讯云开发者社区-腾讯云
1 年前
咆哮的馒头  ·  js散度 - OSCHINA - 中文开源技术交流社区
2 年前
飘逸的大白菜  ·  java - org.springframework.batch.item.file.FlatFileParseException: - Stack Overflow
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号