☕ no-neck-pain.nvim
一个简单的插件,用于将当前聚焦的缓冲区居中显示在屏幕中间。
⚡️ 特性
在聚焦缓冲区的两侧创建大小相等的空缓冲区,作为窗口的填充。
- 即插即用,无需配置
- 与您的工作流程无缝衔接
- 支持多标签页
- 高度可定制的体验
- 支持分割/垂直分割窗口
- 内置草稿板功能
- 主题化侧边缓冲区
- 与neo-tree.nvim、nvim-tree.lua、undotree、tmux等完全集成!
- 保持您的工作流程不变
- 支持Neovim >= 0.6
想要看看实际效果?请查看展示部分
📋 安装
包管理器 | 代码片段 |
---|---|
| |
| |
|
🏗 v1.0.0 重大变更
查看发布说明了解完整的重大变更列表。
☄ 快速开始
无需配置/设置步骤!放松下来,直接调用:NoNeckPain
即可。
⚙ 配置
注意: 需要一些定制体验的灵感吗?看看展示部分
点击展开完整的选项列表及其默认值
注意: 在Neovim中也可以通过以下方式查看这些选项:
:h NoNeckPain.options
查看全局插件选项。:h NoNeckPain.bufferOptions
查看侧边缓冲区选项。
require("no-neck-pain").setup({
-- 打印有用的日志,包括触发的事件和执行操作的原因。
--- @type boolean
debug = false,
-- 居中显示的聚焦窗口的宽度。当终端宽度小于`width`选项时,不会创建侧边缓冲区。
--- @type integer|"textwidth"|"colorcolumn"
width = 100,
-- 表示侧边缓冲区的最小宽度值。
-- 当经常切换窗口大小时,此选项可能会很有用,例如:
-- 在全屏模式下,宽度为210,你定义的NNP `width`为100,这会创建宽度为50的侧边缓冲区。如果你将终端调整为半屏大小,每个侧边缓冲区的宽度将变为5,因此可能不再有用,反而会给你的工作流程带来"噪音"。
--- @type integer
minSideBufferWidth = 10,
-- 如果列表中最后一个有效缓冲区被关闭,则禁用插件。
--- @type boolean
disableOnLastBuffer = false,
-- 当为`true`时,禁用插件会关闭除最初聚焦的窗口之外的所有其他窗口。
--- @type boolean
killAllBuffersOnDisable = false,
-- 添加自动命令(@see `:h autocmd`),旨在自动启用插件。
--- @type table
autocmds = {
-- 当为`true`时,在你启动Neovim时启用插件。
-- 如果主窗口是侧边树(例如NvimTree)或仪表板,命令会延迟执行,直到找到有效窗口。
-- 一旦成功运行,该命令就会被清除。
--- @type boolean
enableOnVimEnter = false,
-- 当为`true`时,在你进入新标签页时启用插件。
-- 注意:如果你回到现有标签页,它不会触发,以防止与用户的决定产生不必要的干扰。
--- @type boolean
enableOnTabEnter = false,
-- 当为`true`时,在颜色方案改变后重新加载插件配置。
--- @type boolean
reloadOnColorSchemeChange = false,
-- 当为`true`时,进入no-neck-pain侧边缓冲区将自动跳过并进入下一个可用的缓冲区。
--- @type boolean
skipEnteringNoNeckPainBuffer = false,
},
-- 创建映射,方便你与暴露的命令交互。
--- @type table
mappings = {
-- 当为`true`时,创建所有未设置为`false`的映射。
--- @type boolean
enabled = false,
-- 设置Neovim的全局映射,允许你切换插件。
-- 当为`false`时,不创建映射。
--- @type string
toggle = "<Leader>np",
-- 设置Neovim的全局映射,允许你切换左侧缓冲区。
-- 当为`false`时,不创建映射。
--- @type string
toggleLeftSide = "<Leader>nql",
-- 设置Neovim的全局映射,允许你切换右侧缓冲区。
-- 当为`false`时,不创建映射。
--- @type string
toggleRightSide = "<Leader>nqr",
-- 设置Neovim的全局映射,允许你增加主窗口的宽度(+5)。
-- 当为`false`时,不创建映射。
--- @type string | { mapping: string, value: number }
widthUp = "<Leader>n=",
-- 设置Neovim的全局映射,允许你减少主窗口的宽度(-5)。
-- 当为`false`时,不创建映射。
--- @type string | { mapping: string, value: number }
widthDown = "<Leader>n-",
-- 设置Neovim的全局映射,允许你切换草稿板功能。
-- 当为`false`时,不创建映射。
--- @type string
scratchPad = "<Leader>ns",
},
--- 适用于两侧缓冲区的通用选项。
--- 查看 |NoNeckPain.bufferOptions| 了解`左侧`和/或`右侧`缓冲区的特定选项。
--- @type table
buffers = {
-- 当为`true`时,侧边缓冲区将分别命名为`no-neck-pain-left`和`no-neck-pain-right`。
--- @type boolean
setNames = false,
-- 将侧边缓冲区用作记事本,它们像任何Neovim缓冲区一样工作,并自动在给定的`位置`保存其内容。
-- 注意:退出未保存的草稿板缓冲区不会阻塞,内容仍会被保存。
--- 参见 |NoNeckPain.bufferOptionsScratchPad|
scratchPad = NoNeckPain.bufferOptionsScratchPad,
-- 应用于两侧缓冲区的颜色,对于缓冲区特定的选项,请参见 |NoNeckPain.bufferOptions|
--- 参见 |NoNeckPain.bufferOptionsColors|
colors = NoNeckPain.bufferOptionsColors,
-- Vim缓冲区作用域选项:这里接受任何`vim.bo`选项。
--- @see NoNeckPain.bufferOptionsBo `:h NoNeckPain.bufferOptionsBo`
bo = NoNeckPain.bufferOptionsBo,
-- Vim窗口作用域选项:这里接受任何`vim.wo`选项。
--- @see NoNeckPain.bufferOptionsWo `:h NoNeckPain.bufferOptionsWo`
wo = NoNeckPain.bufferOptionsWo,
--- 应用于`左侧`缓冲区的选项,这里定义的选项会覆盖`buffers`中的选项。
--- @see NoNeckPain.bufferOptions `:h NoNeckPain.bufferOptions`
left = NoNeckPain.bufferOptions,
--- 应用于`右侧`缓冲区的选项,这里定义的选项会覆盖`buffers`中的选项。
--- @see NoNeckPain.bufferOptions `:h NoNeckPain.bufferOptions`
right = NoNeckPain.bufferOptions,
},
-- 支持的集成,可能与`no-neck-pain.nvim`的行为冲突。
--- @type table
integrations = {
-- 默认情况下,如果NvimTree是打开的,我们会在启用插件时关闭它并重新打开,
-- 这可以防止侧边缓冲区位置错误。
-- @link https://github.com/nvim-tree/nvim-tree.lua
--- @type table
NvimTree = {
-- 树的位置。
--- @type "left"|"right"
position = "left",
-- 当为`true`时,如果在启用插件之前树是打开的,我们会重新打开它。
--- @type boolean
reopen = true,
},
-- 默认情况下,如果NeoTree是打开的,我们会在启用插件时关闭它并重新打开,
-- 这可以防止侧边缓冲区位置错误。
-- @link https://github.com/nvim-neo-tree/neo-tree.nvim
NeoTree = {
-- 树的位置。
--- @type "left"|"right"
position = "left",
-- 当为`true`时,如果在启用插件之前树是打开的,我们会重新打开它。
reopen = true,
},
-- @link https://github.com/mbbill/undotree
undotree = {
-- 树的位置。
--- @type "left"|"right"
position = "left",
},
-- @link https://github.com/nvim-neotest/neotest
neotest = {
-- 树的位置。
--- @type "right"
position = "right",
-- 当为`true`时,如果在启用插件之前树是打开的,我们会重新打开它。
reopen = true,
},
-- @link https://github.com/nvim-treesitter/playground
TSPlayground = {
-- 树的位置。
--- @type "right"|"left"
position = "right",
-- 当为`true`时,如果在启用插件之前树是打开的,我们会重新打开它。
reopen = true,
},
-- @link https://github.com/rcarriga/nvim-dap-ui
NvimDAPUI = {
-- 树的位置。
--- @type "none"
position = "none",
-- 当为`true`时,如果在启用插件之前树是打开的,我们会重新打开它。
reopen = true,
},
-- @link https://github.com/hedyhli/outline.nvim
outline = {
-- 树的位置。
--- @type "left"|"right"
position = "right",
-- 当为`true`时,如果在启用插件之前树是打开的,我们会重新打开它。
reopen = true,
},
},
})
NoNeckPain.bufferOptions = {
-- 当为`false`时,不会创建缓冲区。
--- @type boolean
enabled = true,
--- @see NoNeckPain.bufferOptionsColors `:h NoNeckPain.bufferOptionsColors`
colors = NoNeckPain.bufferOptionsColors,
--- @see NoNeckPain.bufferOptionsBo `:h NoNeckPain.bufferOptionsBo`
bo = NoNeckPain.bufferOptionsBo,
--- @see NoNeckPain.bufferOptionsWo `:h NoNeckPain.bufferOptionsWo`
wo = NoNeckPain.bufferOptionsWo,
--- @see NoNeckPain.bufferOptionsScratchPad `:h NoNeckPain.bufferOptionsScratchPad`
scratchPad = NoNeckPain.bufferOptionsScratchPad,
}
NoNeckPain.bufferOptionsWo = {
--- @type boolean
cursorline = false,
--- @type boolean
cursorcolumn = false,
--- @type string
colorcolumn = "0",
--- @type boolean
number = false,
--- @type boolean
relativenumber = false,
--- @type boolean
foldenable = false,
--- @type boolean
list = false,
--- @type boolean
wrap = true,
--- @type boolean
linebreak = true,
}
NoNeckPain.bufferOptionsBo = {
--- @type string
filetype = "no-neck-pain",
--- @type string
buftype = "nofile",
--- @type string
bufhidden = "hide",
--- @type boolean
buflisted = false,
--- @type boolean
swapfile = false,
}
--- NoNeckPain的便笺缓冲区选项。
---
--- 将侧边缓冲区用作记事本,它们像任何Neovim缓冲区一样工作,并自动在指定的`location`保存其内容。
--- 注意:退出未保存的便笺缓冲区不会阻塞,内容仍会被保存。
---
---@type table
---默认值:
---@eval return MiniDoc.afterlines_to_code(MiniDoc.current.eval_section)
NoNeckPain.bufferOptionsScratchPad = {
-- 当为`true`时,自动为侧边缓冲区设置以下选项:
-- - `autowriteall`
-- - `autoread`
--- @type boolean
enabled = false,
-- 保存便笺内容并加载到缓冲区的文件路径。
--- @type string?
--- @example: `~/notes.norg`
pathToFile = "",
}
NoNeckPain.bufferOptionsColors = {
-- 十六进制颜色代码,用于覆盖缓冲区的当前背景色。(例如 #24273A)
-- 默认支持透明背景。
--- @type string?
background = nil,
-- 增亮(正值)或调暗(负值)侧边缓冲区的背景色。接受的值范围为[-1..1]。
--- @type integer
blend = 0,
-- 十六进制颜色代码,用于覆盖缓冲区的当前文本颜色。(例如 #7480c2)
--- @type string?
text = nil,
}
## 🧰 命令
| 命令 | 描述 |
|-------------|----------------------------|
|`:NoNeckPain`| 切换插件状态,在启用和禁用之间切换。 |
|`:NoNeckPainResize INT`| 使用给定的`INT`值更新配置`width`并调整no-neck-pain窗口大小。 |
|`:NoNeckPainToggleLeftSide`| 切换左侧缓冲区(打开/关闭)。 |
|`:NoNeckPainToggleRightSide`| 切换右侧缓冲区(打开/关闭)。 |
|`:NoNeckPainWidthUp`| 将配置`width`增加5并调整no-neck-pain窗口大小。 |
|`:NoNeckPainWidthDown`| 将配置`width`减少5并调整no-neck-pain窗口大小。 |
## ⌨ 贡献
我们随时欢迎PR和问题。提出问题时请务必提供尽可能多的上下文。
查看[Makefile](./Makefile)以了解可用的命令
> 你需要安装[Bob](https://github.com/MordechaiHadad/bob),这是一个有用的nvim版本管理器,以便为每个支持的版本运行测试套件。
## 🗞 Wiki
你可以在[Wiki](https://github.com/shortcuts/no-neck-pain.nvim/wiki)上找到插件的指南和展示
## 🎭 动机
尽管有其他(很棒的!)替代方案提供了禅意、无干扰的中心模式,但它们通常会做一些可能改变你工作流程的假设,或者至少需要一些配置来满足你的需求。
`no-neck-pain.nvim`旨在提供一种无缝、非主观的缓冲区居中体验,同时具有超强的可定制性。