Giter Club home page Giter Club logo

nvim-treesitter-context's Introduction

nvim-treesitter-context

Lightweight alternative to context.vim

Requirements

Neovim >= v0.9.0

Note: if you need support for Neovim 0.6.x please use the tag compat/0.6.

Screenshot

theme

Supported Languages

click to expand
  • apex
  • bash
  • c
  • c_sharp
  • capnp
  • clojure
  • cmake
  • cpp
  • css
  • cuda
  • cue
  • d
  • dart
  • elixir
  • fennel
  • fish
  • fortran
  • gdscript
  • glimmer
  • go
  • graphql
  • groovy
  • haskell
  • html_tags
  • ini
  • janet (using the "janet_simple" grammar)
  • java
  • javascript
  • json
  • jsonnet
  • julia
  • latex
  • liquidsoap
  • lua
  • markdown
  • matlab
  • nim
  • nix
  • norg
  • objdump
  • ocaml_interface
  • ocaml
  • odin
  • php
  • php_only
  • prisma
  • python
  • r
  • ruby (and rspec)
  • rust
  • scala
  • scss
  • smali
  • solidity
  • svelte
  • swift
  • tact
  • tcl
  • teal
  • templ
  • terraform
  • toml
  • tsx
  • typescript
  • typoscript
  • usd
  • verilog
  • vim
  • vue
  • xml
  • yaml
  • yang
  • zig
  • ada
  • agda
  • arduino
  • astro
  • beancount
  • bibtex
  • bicep
  • blueprint
  • chatito
  • clojure
  • commonlisp
  • cooklang
  • cpon
  • devicetree
  • dhall
  • dockerfile
  • dot
  • ebnf
  • ecma
  • eex
  • elm
  • elsa
  • elvish
  • embedded_template
  • erlang
  • fennel
  • foam
  • fsh
  • func
  • fusion
  • gdscript
  • git_rebase
  • gleam
  • glsl
  • godot_resource
  • gomod
  • gosum
  • gowork
  • hack
  • hcl
  • heex
  • hjson
  • hlsl
  • hocon
  • html
  • htmldjango
  • http
  • jq
  • jsdoc
  • json5
  • jsonc
  • jsx
  • kdl
  • kotlin
  • lalrpop
  • ledger
  • llvm
  • m68k
  • markdown_inline
  • menhir
  • mermaid
  • meson
  • nickel
  • ocamllex
  • pascal
  • perl
  • phpdoc
  • pioasm
  • po
  • poe_filter
  • proto
  • prql
  • pug
  • ql
  • qmldir
  • qmljs
  • query
  • racket
  • rasi
  • rego
  • rnoweb
  • ron
  • rst
  • scheme
  • slint
  • smithy
  • sparql
  • sql
  • starlark
  • supercollider
  • surface
  • sxhkdrc
  • t32
  • thrift
  • tiger
  • tlaplus
  • todotxt
  • turtle
  • twig
  • ungrammar
  • v
  • vala
  • vhs
  • wgsl
  • wgsl_bevy
  • yuck
  • 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)
      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

    nvim-treesitter-context's People

    Contributors

    alexmozaidze avatar amaanq avatar amopel avatar avi-d-coder avatar benjaminbrownlee avatar brokenbyte avatar colinkennedy avatar danielkonge avatar fbearoff avatar folliehiyuki avatar frankebel avatar harryvederci avatar kwaszczuk avatar lewis6991 avatar lf- avatar lhkipp avatar luukvbaal avatar madlep avatar nahso avatar oberblastmeister avatar przepompownia avatar romgrk avatar rwblokzijl avatar saecki avatar samueloph avatar seandewar avatar stevearc avatar syphar avatar topaxi avatar uchars avatar

    Stargazers

     avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

    Watchers

     avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

    nvim-treesitter-context's Issues

    Show context of top line of window instead of cursor

    While using this plugin, it occurred to me that it's actually rather counter intuitive that the context can appear and disappear depending on the cursor location.

    Imagine the first two lines below are context.

    func A() { // first virtual line of context
      if x { // second virtual line of context
        // there's more code in the `if x` block above not shown in the window
        // this is the end of the `if x` block
      }
    
      if y {
        // more code
      }
    }
    

    It doesn't really matter to me where the cursor is when I'm reading this code, I just want to see that the code at the top of the window belongs to the if x block, which belongs to func A block. The context I'm looking for is only a function of what is and isn't visible on the screen.

    As is, if I move my cursor to the if y block, the if x context would disappear.

    Could we add an option to just use the topmost visible line of the buffer instead of the cursor position?

    Error when opening auto-completion menu from nvim-compe

    When I cycle through autosuggestion popup, using nvim-compe, treesitter-context gives me this error:

    Error executing vim.schedule lua callback: Vim(lua):E5108: Error executing lua ...start/nvim-treesitter-context/lua/treesitter-context.lua:341: Vim:E814: Cannot close window, only autocmd window would remai

    image

    preserve context when on comments

    When cursor is on comments, context window disappears. This is strange as coming from context.nvim.

    For example if cursor is on the commeted line, function name disappears, but go one line up or down will show context.

    def a():
    
    
    
        print(1)
        # print(1)
        pass

    Incompatible with vim-which-key

    Bug happens when using this plugin along with vim-which-key and with vim.g.which_key_use_floating_win = 1.
    2021-04-03 01-41-54
    After invoking which-key inside a context that is being displayed and exiting it, my screen seems to be vertically split with only one line at the top being active. In this line I can move up and down but not left and right and can't edit text. If I invoke which-key again this error is displayed:
    Error detected while processing function which_key#start[49]..which_key#window#show[9]..<SNR>53_show_old_win[2]..<SNR>53_open_split_win[2]..<SNR>53_split_or_new:

    Add ability to add custom tree-sitter types

    I think it would be a good improvement to add the ability to add custom TYPE_PATTERNS that match as a context item. For example, I am using tree-sitter-vhdl, and this plugin doesn't register some of the tags that I would like as context items. Specifically process_statement, architecture_body, and entity_declaration since they aren't normal ones. I manually edited the treesitter-context.lua file to add these to TYPE_PATTERNS

    local TYPE_PATTERNS = {
      -- These catch most generic groups, eg "function_declaration" or "function_block"
      'class',
      'function',
      'method',
      'for',
      'while',
      'if',
      'switch',
      'case',
      -- There are more specific
      'impl_item', -- Rust
      'process_statement',
      'architecture_body',
      'entity_declaration',
    }

    and this worked.

    I think something should be added to the TS config invocation, like the following

    require('nvim-treesitter.configs').setup {
      context = {
        enable = true,
        extra_patterns = {
          'process_statement', 
          'architecture_body',
          'entity_declaration',
        }
      }
    }

    Save Untitled buffer on quit

    I use this comand :
    :confirm qa<CR>
    To exit nvim, but with TSContext vim is now always asking about saving changes to 'Untitled'.
    I tried to add :
    :TSContextDisable<cr> | :confirm qa<CR>
    But it still will ask about saving untitled... Is there way to kill TSContext buffer so that I do not have to confirm saving it on q ?
    btw when I run :buffers - I do not see this untitled buffer...

    Error while loading module using Packer

    Found this startup loading error while loading treesitter-context module:

    packer.nvim: Error running config for nvim-treesitter-context: [string "..."]:0: loop or previous error loading module 'treesitter-context'
    

    I'm using this following configuration on Packer

       use {
          "romgrk/nvim-treesitter-context",
           config = function()
               local ctx = require "treesitter-context"
    
               ctx.setup({
                 patterns = { -- Match patterns for TS nodes. These get wrapped to match at word boundaries.
                     -- For all filetypes
                     -- Note that setting an entry here replaces all other patterns for this entry.
                     -- By setting the 'default' entry below, you can control which nodes you want to
                     -- appear in the context window.
                     default = {
                         'class',
                         'function',
                         'method',
                         'for', -- These won't appear in the context
                         'while',
                         'if',
                         'switch',
                         'case',
                     },
                     -- Example for a specific filetype.
                     -- If a pattern is missing, *open a PR* so everyone can benefit.
                     --   rust = {
                     --       'impl_item',
                     --   },
                 },
               })
    
          end,
          event = "BufWinEnter",
       }
    

    Run PackerInstall then PackerCompile after opening nvim, I found that error on startup.

    It seems like module treesitter-context is not loaded properly. Am I missed something?

    Error detected while processing WinScrolled Autocommands for "*":

    Error detected while processing WinScrolled Autocommands for "*":
    E5108: Error executing lua ...start/nvim-treesitter-context/lua/treesitter-context.lua:182:
    'width' key must be a positive Integer

    Neovim Version -

    NVIM v0.5.0
    

    System -

    macOS Big Sur
    v 11.4
    

    I have a tmux session with 2 splits and neovim with two splits(with tmux zoomed in the neovim pane). As soon as I switch tmux pane, the zoomed-in pane is unzoomed and this error pops up in neovim.
    Is there any way we to avoid this issue?

    NvimTSContextError

    Not enough context on some weird function declarations

    This will show context as int, which is the first line of the function declaration but not what we want.

        int
    build_stl_str_hl(
        win_T	*wp,
        char_u	*out,		// buffer to write into != NameBuff
        size_t	outlen,		// length of out[]
        char_u	*fmt,
        int		use_sandbox UNUSED, // "fmt" was set insecurely, use sandbox
        int		fillchar,
        int		maxwidth,
        struct stl_hlrec *hltab,	// return: HL attributes (can be NULL)
        struct stl_hlrec *tabtab)	// return: tab page nrs (can be NULL)
    {
        /* ... */ 
    }

    Cursor is hidden behing context window

    I use zt to scroll the current line to the top. A normal use case is to check a code block inside a long function.

    However the top line will be overlapped by context line and this is annoying. Suggest remap zt to move the scroll the current line to the 2nd top line.

    Use locals query group from nvim-treesitter instead of hardcoded regex for better context

    nvim-treesitter already provides locals queries which this plugin can use to provide better context for different languages instead of using hardcoded regex. For example, in this plugin only class, function, and method are matches. In rust we might need context for structs, enums, and match statements which are provided by the locals queries in nvim-treesitter. Other languages would also work because there is already a locals query for each language. This is some sample code to replace the get_context function:

    function tbl_reverse(tbl)
      for i=1, math.floor(#tbl / 2) do
        tbl[i], tbl[#tbl - i + 1] = tbl[#tbl - i + 1], tbl[i]
      end
    end
    
    function M.get_parent_matches()
      local contains = vim.tbl_contains
    
      local matches = queries.get_capture_matches(0, '@scope.node', 'locals')
      local curr_node = ts_utils.get_node_at_cursor()
      local parent_matches = {}
      while true do
        if contains(matches, curr_node) then
          table.insert(parent_matches, curr_node)
        end
        curr_node = curr_node:parent()
        if curr_node == nil then
          break
        end
      end
    
      tbl_reverse(parent_matches)
    
      return parent_matches
    end

    Because this could return multiple lines we might need to enable multiple line context as right now there can only be context for one line.

    The window bugs out when it is scrolled horizontally in Insert mode

    When the window's width doesn't cover all the text of the file horizontally (set nowrap), the window really bugs out when you are on Insert mode and the window is scrolled horizontally. Here is a demo:

    This only happens when the plugin is installed.

    2021-03-31_01-30-32.mp4

    which terminal is that?

    what is the terminal used in the screenrecording? (is it finally a gtk terminal with ligatures 👀 ?)

    Show `protected:`, `public:` and `private:` as context for c++

    This might require/want having a different list of nodes to use as context for each language (with the current patterns as the common default)

    Maybe a more general mechanism would also be to let the user customized which nodes count as context nodes

    Sometimes context is shown even that `enable = false`

    I temporarily disabled the plugin, but still see the context in C files.

    My config is

    require'treesitter-context'.setup{
        enable = false,
        throttle = true,
        max_lines = 0,
        patterns = {
            -- For all filetypes
            -- Note that setting an entry here replaces all other patterns for this entry.
            -- By setting the 'default' entry below, you can control which nodes you want to
            -- appear in the context window.
            default = {
                'class',
                'function',
                'method',
                -- 'for', -- These won't appear in the context
                -- 'while',
                -- 'if',
                -- 'switch',
                -- 'case',
            },
            -- Example for a specific filetype.
            -- If a pattern is missing, *open a PR* so everyone can benefit.
            --   rust = {
            --       'impl_item',
            --   },
        },
    }

    After digging into the code I found that this is because M.setup() is called from within treesitter-context.lua unconditionally (for initializing config if I get it right), but this leads to unconditional call to M.enable() -> M.throttled_update_context() which is only good for toggling the plugin in run-time.

    Here is a small patch that works well for me.

    diff --git a/lua/treesitter-context.lua b/lua/treesitter-context.lua
    index c64228e..3949c5c 100644
    --- a/lua/treesitter-context.lua
    +++ b/lua/treesitter-context.lua
    @@ -496,7 +496,7 @@ function M.open()
       end
     end
     
    -function M.enable()
    +function M.enable(update)
       local throttle = config.throttle and 'throttled_' or ''
       nvim_augroup('treesitter_context', {
         {'WinScrolled', '*',                   'silent lua require("treesitter-context").' .. throttle .. 'update_context()'},
    @@ -510,7 +510,10 @@ function M.enable()
         {'User',        'SessionSavePost',     'silent lua require("treesitter-context").open()'},
       })
     
    -  M.throttled_update_context()
    +  if update then
    +    M.throttled_update_context()
    +  end
    +
       enabled = true
     end
     
    @@ -525,7 +528,7 @@ function M.toggleEnabled()
         if enabled then
             M.disable()
         else
    -        M.enable()
    +        M.enable(true)
         end
     end
     
    @@ -551,7 +554,7 @@ end
     
     M.setup()
     
    -api.nvim_command('command! TSContextEnable  lua require("treesitter-context").enable()')
    +api.nvim_command('command! TSContextEnable  lua require("treesitter-context").enable(true)')
     api.nvim_command('command! TSContextDisable lua require("treesitter-context").disable()')
     api.nvim_command('command! TSContextToggle  lua require("treesitter-context").toggleEnabled()')
     api.nvim_command('highlight default link TreesitterContext NormalFloat')

    So the idea is running M.throttle_update_context() from M.enable() only on user commands :TsContext... and not running this from M.setup(). Notice that the default M.setup() shall not be broken by this change as M.throttle_update_context() will be called on BufEnter.

    Closest node not added to context at correct time

    Peek 2021-10-31 21-32

    In the gif, I hit j 3 times before the last node is added to the context. I expect it would be added after the first j. It looks like the context update does not account for farther nodes obscuring some visible lines.

    CursorMoved Autocommands errors after clearing out buffers

    After deleting all other buffers except current I get this error:

    Error detected while processing CursorMoved Autocommands for "*":
    E5108: Error executing lua ...start/nvim-treesitter-context/lua/treesitter-context.lua:210: Vim(lua):E5108: Error executing lua ...start/nvim-treesitter-con
    text/lua/treesitter-context.lua:181: Invalid buffer id: 2
    

    Is the CursorMoved Autocommand meant to be running since I have treesiter + latest nigtly neovim installed?

    Add ability to configure context text from nodes

    Currently, there is no reliable way to display multi-line nodes for Scala (and other languages). This issue is similar to #65, but the solution implemented in #71 is inadequate here.

    In Scala, function definitions can 1) have multiple argument lists and 2) an optional return type. i.e. these are all valid:

    def func(a: String, 
      b: String) = {a}
    
    def func(a: String, 
      b: String): String = {a}
    
    def func(a: String)
      (b: String) = {a}

    This means that the node which would signal the end of the context could be either 1) the last parameters node or 2) the return_type node if it exists.

    So, we can't just add a node to last_types to solve this. Moreover, some users may prefer to only see the first parameter list and return type or other custom display logic. Python (optional return types), Haskell (multiple parameter lists), and other languages suffer from the same issues.

    It would be nice to be able to provide my own implementation for get_text_for_node via config

    Latest neovim nightly fails to load treesitter-context

    Loading the treesitter-context package in the latest nightly causes this error

    image

    Latest neovim 0.5

    NVIM v0.5.0-dev+1152-gf5daf55c1
    Build type: RelWithDebInfo
    LuaJIT 2.1.0-beta3
    Compilation: /usr/bin/cc -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -O2 -g -Og -g -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wmissing-prototypes -Wvla -fstack-protector-strong -fno-common -fdiagnostics-color=always -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -DMIN_LOG_LEVEL=3 -I/home/runner/work/neovim/neovim/build/config -I/home/runner/work/neovim/neovim/src -I/home/runner/work/neovim/neovim/.deps/usr/include -I/usr/include -I/home/runner/work/neovim/neovim/build/src/nvim/auto -I/home/runner/work/neovim/neovim/build/include
    Compiled by runner@fv-az204-819```
    

    Feature request: Set winvar so that users can detect treesitter-context windows

    I hope treesitter-context can use setwinvar to set a winvar like "treesitter_context_key: tree_sitter_context_val" so that users can use it to filter windows.

    I personally have this function in my init.vim, and I wish it to work with treesitter-context:

    fun! s:IsOnlyWindow()
        return len(filter(getwininfo(), '!has_key(v:val.variables, "scrollview_key")')) == 1
    endfun

    No highlight for tsx file

    Firstly thank you for making the treesitter version context plugin, I am using it for daily development. It really helps.

    Today I used it in tsx file, however the treesitter_context window was not highlighted. I confirm I have tsx parser installed and it works normally except in the treesitter_context window. See the picture below

    image

    I have no idea whether it's the problem of this plugin or https://github.com/tree-sitter/tree-sitter-typescript, please help

    E5601: Cannot close window, only floating window would remain

    If I'm inside a function where nvim-treesitter-context gets activated, than I'm getting this error message:

    E5601: Cannot close window, only floating window would remain
    

    So everytime when I want to quit, I need to move out of the nesting in order to close neovim.

    It doesn't seem to catch impl block in Rust

    When you are in a function inside an implementation in Rust, this doesn't show the impl line. It would be really helpful. context.vim also doesn't show it (only sometimes, it's weird)

    Context when in "else" clause

    Say I have something like

    if (condition) {
       // ...
    } else {
       // Some really long code
    }
    

    When my cursor is inside the else clause, the context will be shown as if (condition), which can be a bit confusing. Is there some way to either add an additional context line saying else or maybe even add a ! to the condition context in this case?

    Error on startup

    I get this on startup:

    Error detected while processing /home/p00f/.local/share/nvim/site/pack/packer/start/nvim-treesitter-context/plugin/treesitter-context.vim:
    line    1:
    E5108: Error executing lua ...start/nvim-treesitter-context/lua/treesitter-context.lua:58: Vim(autocmd):E216: No such group or event: Scroll * silent lua require("treesitter-cont
    ext").update_context()
    

    Also the TSContextEnable and TSContextEnable commands don't seem to be available.

    I'm on master of both neovim and nvim-treesitter

    Wrong line number on context lines

    If the top line shows the current context (e.g.: class), the line number on the left of it doesn't match the content.

    That is, the line number shown is the number for the line that would be there if the context-line wasn't shown.

    Option to limit the height of the floating window

    In a C if () ... else if () ... else if () ... else if () ... else ... block with many branches, the floating window becomes very large, occupying over a half of the screen. An option to limit the height of the floating window can be helpful in this case.

    Screenshot_20210911_154406

    Feature: display stacked context

    Once more groups are added, it would be useful to be able to see class+function+internal structure context simultaneously as is possible with context.vim. This could be done by stacking the lines vertically, with outermost context at the top.

    Issues when scrolling to the side and line is longer than width.

    Description

    This plugin is really cool and works seamlessly with nvim-treesitter. However, when I scroll to the side, there are some issues. This mostly happens with the line is longer than the window and nowrap is set. When inserting from normal mode and the line is longer than the terminal window, inserting does not insert but the screen flashes and it inserts in the middle of the line. Typing text will not produce anything. When exiting out of insert mode, the cursor jumps back and the inserted text appears. Another issue is when side scrolling from the end of a line longer than the terminal width. The cursor should just scroll to the left but the whole window scrolls.

    Steps to reproduce

    1. set nowrap
    2. create a line that is longer than the window
    3. go to the end of the line and click insert
    4. the insert should not be at the correct place
    5. type text
    6. exit out of insert mode
    7. the cursor should jump and the text will appear

    GIF

    Peek 2020-11-13 19-23

    Output of nvim --version

    NVIM v0.5.0-828-g0a95549d6
    Build type: RelWithDebInfo
    LuaJIT 2.1.0-beta3
    Compilation: /usr/bin/gcc-5 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -O2 -g -Og -g -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wmissing-prototypes -Wvla -fstack-protector-strong -fno-common -fdiagnostics-color=auto -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -DMIN_LOG_LEVEL=3 -I/home/travis/build/neovim/bot-ci/build/neovim/build/config -I/home/travis/build/neovim/bot-ci/build/neovim/src -I/home/travis/build/neovim/bot-ci/build/neovim/.deps/usr/include -I/usr/include -I/home/travis/build/neovim/bot-ci/build/neovim/build/src/nvim/auto -I/home/travis/build/neovim/bot-ci/build/neovim/build/include
    Compiled by travis@travis-job-abaca5c2-51e7-4cf1-bc06-8cf3e644ab24
    
    Features: +acl +iconv +tui
    See ":help feature-compile"
    
       system vimrc file: "$VIM/sysinit.vim"
      fall-back for $VIM: "/share/nvim"
    
    Run :checkhealth for more info
    

    (ps, as you can see I'm using barbar and it is really nice.)

    Recommend Projects

    • React photo React

      A declarative, efficient, and flexible JavaScript library for building user interfaces.

    • Vue.js photo Vue.js

      🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

    • Typescript photo Typescript

      TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

    • TensorFlow photo TensorFlow

      An Open Source Machine Learning Framework for Everyone

    • Django photo Django

      The Web framework for perfectionists with deadlines.

    • D3 photo D3

      Bring data to life with SVG, Canvas and HTML. 📊📈🎉

    Recommend Topics

    • javascript

      JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

    • web

      Some thing interesting about web. New door for the world.

    • server

      A server is a program made to process requests and deliver data to clients.

    • Machine learning

      Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

    • Game

      Some thing interesting about game, make everyone happy.

    Recommend Org

    • Facebook photo Facebook

      We are working to build community through open source technology. NB: members must have two-factor auth.

    • Microsoft photo Microsoft

      Open source projects and samples from Microsoft.

    • Google photo Google

      Google ❤️ Open Source for everyone.

    • D3 photo D3

      Data-Driven Documents codes.