Awesome
nvim-treesitter-context
Lightweight alternative to context.vim
Note: This plugin requires necessary language parsers in order to work. Non default language parsers can be installed with nvim-treesitter.
Requirements
Neovim >= v0.9.0
Note: if you need support for Neovim 0.6.x please use the tag compat/0.6
.
Screenshot
Supported Languages
Note: support for specific languages is strictly community maintained and can break from time to time as parsers are updated.
<details> <summary>Supported (click to expand)</summary-
ada
-
apex
-
bash
-
c
-
c_sharp
-
capnp
-
clojure
-
cmake
-
cpp
-
css
-
cuda
-
cue
-
d
-
dart
-
devicetree
-
diff
-
elixir
-
elm
-
fennel
-
fish
-
fortran
-
gdscript
-
glimmer
-
go
-
graphql
-
groovy
-
haskell
-
html
-
ini
-
janet_simple
-
java
-
javascript
-
json
-
jsonnet
-
julia
-
kdl
-
latex
-
liquidsoap
-
lua
-
make
-
markdown
-
matlab
-
nim
-
nix
-
norg
-
nu
-
objdump
-
ocaml
-
ocaml_interface
-
odin
-
org
-
php
-
php_only
-
prisma
-
proto
-
python
-
r
-
ruby
-
rust
-
scala
-
scss
-
smali
-
solidity
-
svelte
-
swift
-
tact
-
tcl
-
teal
-
templ
-
terraform
-
toml
-
tsx
-
typescript
-
typoscript
-
usd
-
verilog
-
vhdl
-
vim
-
vue
-
xml
-
yaml
-
yang
-
zig
-
agda
-
angular
-
arduino
-
asm
-
astro
-
authzed
-
awk
-
bass
-
beancount
-
bibtex
-
bicep
-
bitbake
-
blueprint
-
bp
-
cairo
-
chatito
-
circom
-
comment
-
commonlisp
-
cooklang
-
corn
-
cpon
-
csv
-
cylc
-
desktop
-
dhall
-
disassembly
-
djot
-
dockerfile
-
dot
-
doxygen
-
dtd
-
earthfile
-
ebnf
-
editorconfig
-
eds
-
eex
-
elsa
-
elvish
-
embedded_template
-
erlang
-
facility
-
faust
-
fidl
-
firrtl
-
foam
-
forth
-
fsh
-
fsharp
-
func
-
fusion
-
gap
-
gaptst
-
gdshader
-
git_config
-
git_rebase
-
gitattributes
-
gitcommit
-
gitignore
-
gleam
-
glimmer_javascript
-
glimmer_typescript
-
glsl
-
gn
-
gnuplot
-
goctl
-
godot_resource
-
gomod
-
gosum
-
gotmpl
-
gowork
-
gpg
-
gren
-
gstlaunch
-
hack
-
hare
-
haskell_persistent
-
hcl
-
heex
-
helm
-
hjson
-
hlsl
-
hlsplaylist
-
hocon
-
hoon
-
htmldjango
-
http
-
hurl
-
hyprlang
-
idl
-
inko
-
ispc
-
jq
-
jsdoc
-
json5
-
jsonc
-
just
-
kconfig
-
kotlin
-
koto
-
kusto
-
lalrpop
-
ledger
-
leo
-
linkerscript
-
liquid
-
llvm
-
luadoc
-
luap
-
luau
-
m68k
-
markdown_inline
-
menhir
-
mermaid
-
meson
-
mlir
-
muttrc
-
nasm
-
nginx
-
nickel
-
nim_format_string
-
ninja
-
nqc
-
objc
-
ocamllex
-
pascal
-
passwd
-
pem
-
perl
-
phpdoc
-
pioasm
-
po
-
pod
-
poe_filter
-
pony
-
powershell
-
printf
-
problog
-
prolog
-
promql
-
properties
-
prql
-
psv
-
pug
-
puppet
-
purescript
-
pymanifest
-
ql
-
qmldir
-
qmljs
-
query
-
racket
-
ralph
-
rasi
-
rbs
-
re2c
-
readline
-
regex
-
rego
-
requirements
-
rescript
-
rnoweb
-
robot
-
robots
-
roc
-
ron
-
rst
-
runescript
-
scfg
-
scheme
-
sflog
-
slang
-
slint
-
smithy
-
snakemake
-
soql
-
sosl
-
sourcepawn
-
sparql
-
sql
-
squirrel
-
ssh_config
-
starlark
-
strace
-
styled
-
supercollider
-
superhtml
-
surface
-
sway
-
sxhkdrc
-
systemtap
-
t32
-
tablegen
-
textproto
-
thrift
-
tiger
-
tlaplus
-
tmux
-
todotxt
-
tsv
-
turtle
-
twig
-
typespec
-
typst
-
udev
-
ungrammar
-
unison
-
uxntal
-
v
-
vala
-
vento
-
vhs
-
vimdoc
-
vrl
-
wgsl
-
wgsl_bevy
-
wing
-
wit
-
xcompose
-
xresources
-
yuck
-
zathurarc
-
ziggy
-
ziggy_schema
Configuration
(Default values are shown below)
Note: calling setup()
is optional.
require'treesitter-context'.setup{
enable = true, -- Enable this plugin (Can be enabled/disabled later via commands)
multiwindow = false, -- Enable multiwindow support.
max_lines = 0, -- How many lines the window should span. Values <= 0 mean no limit.
min_window_height = 0, -- Minimum editor window height to enable context. Values <= 0 mean no limit.
line_numbers = true,
multiline_threshold = 20, -- Maximum number of lines to show for a single context
trim_scope = 'outer', -- Which context lines to discard if `max_lines` is exceeded. Choices: 'inner', 'outer'
mode = 'cursor', -- Line used to calculate context. Choices: 'cursor', 'topline'
-- Separator between context and content. Should be a single character string, like '-'.
-- When separator is set, the context will only show up when there are at least 2 lines above cursorline.
separator = nil,
zindex = 20, -- The Z-index of the context window
on_attach = nil, -- (fun(buf: integer): boolean) return false to disable attaching
}
Commands
TSContextEnable
, TSContextDisable
and TSContextToggle
.
Appearance
Use the highlight group TreesitterContext
to change the colors of the
context. Per default it links to NormalFloat
.
Use the highlight group TreesitterContextLineNumber
to change the colors of the
context line numbers if line_numbers
is set. Per default it links to LineNr
.
Use the highlight group TreesitterContextSeparator
to change the colors of the
separator if separator
is set. By default it links to FloatBorder
.
Use the highlight groups TreesitterContextBottom
and/or
TreesitterContextLineNumberBottom
to change the highlight of the last line of
the context window. By default it links to NONE
.
However, you can use this to create a border by applying an underline highlight, e.g,
for an underline across the screen:
hi TreesitterContextBottom gui=underline guisp=Grey
hi TreesitterContextLineNumberBottom gui=underline guisp=Grey
Or an underline below the line numbers only:
hi TreesitterContextLineNumberBottom gui=underline guisp=Grey
Jumping to context (upwards)
vim.keymap.set("n", "[c", function()
require("treesitter-context").go_to_context(vim.v.count1)
end, { silent = true })
Adding support for other languages
See CONTRIBUTING.md
Overriding the builtin for a given language
Read CONTRIBUTING.md first.
You can provide you own language files by adding them to the
runtimepath
(:help runtimepath
).
For example, creating ~/.config/nvim/queries/java/context.scm
will take
precedence over the queries/java/context.scm
included in nvim-treesitter-context
as long as ~/.config/nvim
appears earlier in runtimepath
.
You can check the value of runtimepath
with :set rtp
.