Skip to content

sternelee/bigfile.nvim

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

-- packer example:
use {
  "LunarVim/bigfile.nvim",
}

The plugin ships with common default options. No further setup is required.

Customization

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

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

example:

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

About

Make editing big files faster 🚀

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Lua 92.0%
  • Makefile 8.0%