Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/LunarVim/bigfile.nvim
Make editing big files faster 🚀
https://github.com/LunarVim/bigfile.nvim
Last synced: about 2 months ago
JSON representation
Make editing big files faster 🚀
- Host: GitHub
- URL: https://github.com/LunarVim/bigfile.nvim
- Owner: LunarVim
- License: apache-2.0
- Created: 2022-11-10T07:49:07.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2023-11-06T14:09:51.000Z (11 months ago)
- Last Synced: 2024-05-05T15:33:14.798Z (5 months ago)
- Language: Lua
- Homepage:
- Size: 25.4 KB
- Stars: 247
- Watchers: 1
- Forks: 9
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- my-neovim-pluginlist - LunarVim/bigfile.nvim - commit/LunarVim/bigfile.nvim) ![](https://img.shields.io/github/commit-activity/y/LunarVim/bigfile.nvim) (Editing support / Large file)
README
# bigfile.nvim
This plugin automatically disables certain features if the opened file is big.
File size and features to disable are configurable.Features/integrations include: `LSP`, `treesitter`, `indent_blankline`, `illuminate.vim` `NoMatchParen`, `syntax off`, ... (full list at the end)
You can also add your own features.
# Setup
## Installation
```lua
-- packer example:
use {
"LunarVim/bigfile.nvim",
}
```The plugin ships with common default options. No further setup is required.
## Customization
```lua
-- default config
require("bigfile").setup {
filesize = 2, -- size of the file in MiB, the plugin round file sizes to the closest MiB
pattern = { "*" }, -- autocmd pattern or function see <### Overriding the detection of big files>
features = { -- features to disable
"indent_blankline",
"illuminate",
"lsp",
"treesitter",
"syntax",
"matchparen",
"vimopts",
"filetype",
},
}
```Full description of the default features is at the end of this file.
You can override the default configuration, or add your own custom features
```lua
-- all fields except `name` and `disable` are optional
local mymatchparen = {
name = "mymatchparen", -- name
opts = {
defer = false, -- set to true if `disable` should be called on `BufReadPost` and not `BufReadPre`
},
disable = function() -- called to disable the feature
vim.cmd "NoMatchParen"
end,
}require("bigfile").setup {
filesize = 1,
features = { "treesitter", mymatchparen }
}
```### Overriding the detection of big files
You can add your own logic for detecting big files by setting `pattern` in the
config to a function. If the function returns true file will be considered big,
otherwise `filesize` will be used as a fallbackexample:
```lua
require("bigfile").setup {
-- detect long python files
pattern = function(bufnr, filesize_mib)
-- you can't use `nvim_buf_line_count` because this runs on BufReadPre
local file_contents = vim.fn.readfile(vim.api.nvim_buf_get_name(bufnr))
local file_length = #file_contents
local filetype = vim.filetype.match({ buf = bufnr })
if file_length > 5000 and filetype == "python" then
return true
end
end
}
```# Caveats
- `matchparen` stays disabled, even after you close the big file, you can call `:DoMatchParen` manually to enable it
# Features/integrations
| name | function |
| ------------------ | ----------------------------------------------------------------------------------------------------------- |
| `lsp` | detaches the lsp client from buffer |
| `treesitter` | disables treesitter for the buffer |
| `illuminate` | disables `RRethy/vim-illuminate` for the buffer |
| `indent_blankline` | disables `lukas-reineke/indent-blankline.nvim` for the buffer |
| `syntax` | `:syntax off` for the buffer |
| `filetype` | `filetype = ""` for the buffer |
| `vimopts` | `swapfile = false` `foldmethod = "manual"` `undolevels = -1` `undoreload = 0` `list = false` for the buffer |
| `matchparen` | `:NoMatchParen` globally, currently this feature will stay disabled, even after you close the big file |