Vim-fork focused on extensibility and usability

Overview

Neovim

Documentation | Chat | Twitter

GitHub CI Codecov coverage Coverity Scan analysis Clang analysis PVS-Studio analysis

Packages Debian CI Downloads nvim

Neovim is a project that seeks to aggressively refactor Vim in order to:

See the Introduction wiki page and Roadmap for more information.

Features

See :help nvim-features for the full list!

Install from package

Pre-built packages for Windows, macOS, and Linux are found on the Releases page.

Managed packages are in Homebrew, Debian, Ubuntu, Fedora, Arch Linux, Void Linux, Gentoo, and more!

Install from source

See the Building Neovim wiki page for details.

The build is CMake-based, but a Makefile is provided as a convenience. After installing the dependencies, run the following command.

make CMAKE_BUILD_TYPE=RelWithDebInfo
sudo make install

To install to a non-default location:

make CMAKE_INSTALL_PREFIX=/full/path/
make install

To inspect the build, these CMake features are useful:

  • cmake --build build --target help lists all build targets.
  • build/CMakeCache.txt (or cmake -LAH build/) contains the resolved values of all CMake variables.
  • build/compile_commands.json shows the full compiler invocations for each translation unit.

Transitioning from Vim

See :help nvim-from-vim for instructions.

Project layout

├─ ci/              build automation
├─ cmake/           build scripts
├─ runtime/         user plugins/docs
├─ src/nvim/        application source code (see src/nvim/README.md)
│  ├─ api/          API subsystem
│  ├─ eval/         VimL subsystem
│  ├─ event/        event-loop subsystem
│  ├─ generators/   code generation (pre-compilation)
│  ├─ lib/          generic data structures
│  ├─ lua/          Lua subsystem
│  ├─ msgpack_rpc/  RPC subsystem
│  ├─ os/           low-level platform code
│  └─ tui/          built-in UI
├─ third-party/     CMake subproject to build dependencies
└─ test/            tests (see test/README.md)

License

Neovim contributions since b17d96 are licensed under the Apache 2.0 license, except for contributions copied from Vim (identified by the vim-patch token). See LICENSE for details.

Vim is Charityware.  You can use and copy it as much as you like, but you are
encouraged to make a donation for needy children in Uganda.  Please see the
kcc section of the vim docs or visit the ICCF web site, available at these URLs:

        http://iccf-holland.org/
        http://www.vim.org/iccf/
        http://www.iccf.nl/

You can also sponsor the development of Vim.  Vim sponsors can vote for
features.  The money goes to Uganda anyway.
Comments
  • [WIP] Compiling under Windows

    [WIP] Compiling under Windows

    Windows support is now tracked in #5229, check the wiki for Installation instructions and Build instructions

    This PR is rebased for convinience, but it will be closed as soon as clipboard support goes into master.

    build platform:windows 
    opened by equalsraf 271
  • [RDY] Builtin terminal emulation

    [RDY] Builtin terminal emulation

    This PR uses libvterm(big thanks to @leonerd for that project) to implement a full VT220 terminal emulator using Neovim buffers and windows. ~~It will also refactor the calling of shell commands to use this facility, fixing #1044 #1386 #1496 #1716 (all caused by an issue introduced in #1365)~~~(I've decided to not touch the generic os_call_shell for now)

    Still a WIP but the :terminal ex command can already be used, here's a quick rundown:

    • :term [prog/args] will open a new special buffer "connected" to a pseudo terminal running prog/args
    • any command that would enter insert mode will focus the terminal buffer instead.
    • when focused a new mode is entered where all keys are passed directly to the program. The <c-\><c-n> combination will return to normal mode.
    • new terminal-only mappings can be added with the "t" prefix(eg: tnoremap <c-a> <c-\><c-n> exit terminal focus using ctrl+a)

    @justinmk An observation about the new Terminal class: It is not coupled to job control so we can use it for implementing #901 and eventually remove all blocking messages(press enter to continue) from nvim(We could have a Terminal instance created at startup and feed all messages to it, for example)

    opened by tarruda 261
  • <C-h> (CTRL-H) does not work in the new TUI

    (CTRL-H) does not work in the new TUI

    I use the following mappings on my .nvimrc and it does not work using tmux inside urxvt.

    nnoremap <C-h> <C-w>h " only C-h does not work.
    nnoremap <C-j> <C-w>j
    nnoremap <C-k> <C-w>k
    nnoremap <C-l> <C-w>l
    

    env output

    BROWSER=firefox
    COLORFGBG=7;0
    COLORTERM=rxvt
    DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-zNeYXuznrs,guid=844332d151bf76af0ebfba3754e5f937
    DESKTOP_SESSION=i3
    DESKTOP_STARTUP_ID=i3/i3-sensible-terminal/725-0-arch_TIME89282
    DISPLAY=:0
    DOCKER_HOST=unix:///var/run/docker.sock
    EDITOR=vim
    GDMSESSION=i3
    GDM_LANG=en_US.utf8
    GPG_TTY=/dev/pts/5
    GREP_COLOR=97;45
    GTK_MODULES=canberra-gtk-module
    HG=/usr/bin/hg
    LANG=en_US.utf8
    LC_MEASUREMENT=pt_BR.utf8
    LC_MONETARY=pt_BR.utf8
    LC_NUMERIC=pt_BR.utf8
    LC_PAPER=pt_BR.utf8
    LC_TIME=pt_BR.utf8
    LS_COLORS=no=00;37:fi=01;34:di=00;34:ln=00;36:pi=40;33:so=00;35:do=00;35:bd=40;33;01:cd=40;33;01:or=00;05;37;41:mi=00;05;37;41:su=37;41:sg=30;43:tw=30;42:ow=04;34:st=37;44:ex=00;32:*.cmd=00;33:*.exe=00;33:*.com=00;33:*.btm=00;33:*.bat=00;33:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz=01;31:*.bz2=01;31:*.bzip2=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.apk=01;31:*.gem=01;31:*.jpg=00;35:*.JPG=00;35:*.jpeg=00;35:*.gif=00;35:*.bmp=00;35:*.pbm=00;35:*.pgm=00;35:*.ppm=00;35:*.tga=00;35:*.xbm=00;35:*.xpm=00;35:*.tif=00;35:*.tiff=00;35:*.png=00;35:*.svg=00;35:*.svgz=00;35:*.mng=00;35:*.pcx=00;35:*.dl=00;35:*.xcf=00;35:*.xwd=00;35:*.yuv=00;35:*.cgm=00;35:*.emf=00;35:*.eps=00;35:*.CR2=00;35:*.ico=00;35:*.pdf=00;32:*.ps=00;32:*.txt=00;32:*.html=00;32:*.rst=00;32:*.md=00;32:*.patch=00;32:*.diff=00;32:*.tex=00;32:*.doc=00;32:*.xml=00;32:*.xls=00;32:*.xlsx=00;32:*.doc=00;32:*.docx=00;32:*.ppt=00;32:*.pptx=00;32:*.key=00;32:*.pt=01;32:*.tmpl=01;32:*.in=01;32:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.m4a=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:*.mov=01;36:*.mpg=01;36:*.mpeg=01;36:*.m2v=01;36:*.mkv=01;36:*.ogm=01;36:*.mp4=01;36:*.m4v=01;36:*.mp4v=01;36:*.vob=01;36:*.qt=01;36:*.nuv=01;36:*.wmv=01;36:*.asf=01;36:*.rm=01;36:*.rmvb=01;36:*.flc=01;36:*.avi=01;36:*.fli=01;36:*.flv=01;36:*.gl=01;36:*.m2ts=01;36:*.divx=01;36:*.webm=01;36:*.axv=01;36:*.anx=01;36:*.ogv=01;36:*.ogx=01;36:*.conf=00;36:*.cnf=00;36:*.cfg=00;36:*.ini=00;36:*.properties=00;36:*.yaml=00;36:*.vcl=00;36:*.c=00;33:*.cpp=00;33:*.py=00;33:*.coffesscript=00;33:*.js=00;33:*.rb=00;33:*.sh=00;33:*.zsh=00;33:*.env=00;33:*.bash=00;33:*.php=00;33:*.java=00;33:*.zcml=00;33:*.db=00;32:*.sql=00;32:*.json=00;32:*.plist=00;32:*.fs=00;32:*.tex=01;37:*.rdf=01;37:*.owl=01;37:*.n3=01;37:*.ttl=01;37:*.nt=01;37:*.torrent=01;37:*.xml=01;37:*Makefile=01;37:*Rakefile=01;37:*build.xml=01;37:*rc=01;37:*.nfo=01;37:*README=01;37:*README.txt=01;37:*readme.txt=01;37:*README.markdown=01;37:*README.md=01;37:*.ini=01;37:*.yml=01;37:*.cfg=01;37:*.conf=01;37:*.c=01;37:*.cpp=01;37:*.cc=01;37:*.log=01;30:*.bak=01;30:*.aux=01;30:*.lof=01;30:*.lol=01;30:*.lot=01;30:*.out=01;30:*.toc=01;30:*.bbl=01;30:*.blg=01;30:*~=01;30:*#=01;30:*.part=01;30:*.incomplete=01;30:*.swp=01;30:*.tmp=01;30:*.temp=01;30:*.o=01;30:*.obj=01;30:*.pyc=01;30:*.pyo=01;30:*.class=01;30:*.cache=01;30:*.egg-info=01;30:
    MOZ_PLUGIN_PATH=/usr/lib/mozilla/plugins
    SHELL=/usr/bin/fish
    SHLVL=4
    SSH_AGENT_PID=746
    SSH_AUTH_SOCK=/tmp/ssh-J6jf9XAbiTjD/agent.725
    TERM=screen-256color
    TERMINFO=/usr/share/terminfo
    TMUX=/tmp/tmux-1000/default,1161,11
    TMUX_PANE=%27
    WINDOWID=23068681
    WINDOWPATH=1
    WINEARCH=win32
    XDG_RUNTIME_DIR=/run/user/1000
    XDG_SEAT=seat0
    XDG_SESSION_DESKTOP=i3
    XDG_SESSION_ID=c2
    XDG_VTNR=1
    __fish_bin_dir=/usr/bin
    __fish_datadir=/usr/share/fish
    __fish_help_dir=/usr/share/doc/fish
    __fish_runtime_dir=/run/user/1000
    __fish_sysconfdir=/etc/fish
    fish_greeting=
    
    bug tui 
    opened by rainerborene 169
  • [RFC] Migrate input reading to a libuv event loop

    [RFC] Migrate input reading to a libuv event loop

    This configures a libuv event loop running in a background thread, started with the 'io_init' at the beginning of the program. For now it's only responsible for reading from stdin(or stderr when vim is started on the right side of a pipe), but this infrastructure can be reused for implementing other mch_* functions that would require a libuv event loop.

    Here's a list of changes performed:

    • Move mch_exit, mch_inchar, mch_delay and mch_char_avail to the new 'io' module
    • Remove unused functions in os_unix.c
    • Remove hangul input support

    The blocking aspect of 'mch_inchar', 'mch_delay' and 'mch_char_avail' is emulated using a mutex combined with a condition variable, set by the thread running the event loop.

    This also removed all code that made use of the 'inbuf' static variable in ui.c including the hangulin.c module. Hangul input is scheduled for removal from vim (if vim is dropping support for a feature then I guess it's safe for us to remove it too) and I had to tweak it to compile without GUI, but I should have avoided the trouble and removed it from the beginning of the project. If hangul input is needed we can try to integrate when we have a codebase that is easier to maintain.

    The code used in this PR will be used for job control(and consequently the new plugin architecture), so I want to get this merged as soon as possible(Right now it's using some module-globals but those will be refactored). After this PR I will implement job control on top of libuv and refactor mch_call_shell to use the new job control infrastructure it. After that I can start working on msgpack integration for the UI and plugins, which will let neovim grow more 'horizontally'

    @ashleyh can you run this on TSAN before I merge? Next weekend I'm gonna setup a shiny new ubuntu 64 bit development virtual machine so this is will be the last time, I promise :)

    opened by tarruda 165
  • [RFC] Built-in LSP Support

    [RFC] Built-in LSP Support

    I've took over #6856 PR. @tjdevries, Thank you for your great work :)

    Note

    I rebase this PR branch on neovim/master everyday. So if you use master branch build and you think you can try this branch, please build this branch and report bugs and advise me. :)

    Want to discuss

    @KillTheMule comments https://github.com/neovim/neovim/pull/6856#issuecomment-470512427

    First of all, I am going to start with the 4th comment. I'll update this PR description later.

    ToDo

    • [x] stabilize API
      • [x] request
      • [x] notification
      • [x] setting built-in callbacks
      • [x] plugin setting
      • [x] loading language server capabilities setting
    • [x] implement built-in callbacks
      • [x] omnifunc
      • [x] textDocument/completion
      • [x] textDocument/hover
      • [x] textDocument/signatureHelp
      • [x] textDocument/declaration
      • [x] textDocument/definition
      • [x] textDocument/typeDefinition
      • [x] textDocument/implementation ~- [ ] textDocument/rename~ ~- [ ] textDocument/references~ ~- [ ] textDocument/documentSymbol~ ~- [ ] textDocument/publishDiagnostics~
    • [x] implement logger
    • [x] test
    • [x] document
      • [x] vim help document
      • [x] code document

    When will this PR be merged?

    https://github.com/neovim/neovim/pull/10222#issuecomment-527874682 https://github.com/neovim/neovim/pull/10222#issuecomment-527879194

    Note

    This is my first PR for neovim. So I am very happy to give me advice or help. And I'm not a native speaker of English, so I would like to thank you for using simple English when commenting on PR. :)

    Demo

    implement textDocument/completion built-in callback. asciicast

    implement textDocument/hover built-in callback. asciicast

    implement textDocument/signatureHelp built-in callback. asciicast

    opened by h-michael 161
  • feat: set cmdheight=0

    feat: set cmdheight=0

    Fix https://github.com/neovim/neovim/issues/1004

    Related https://github.com/neovim/neovim/pull/6732 https://github.com/neovim/neovim/pull/4382

    It almost works. But it has some problems. I think it is better than others. Because it is no segfaults and no flushing.

    ~~* :echo output behavior is not good~~ ~~* If you set set laststatus=0, the garbage exists.~~ ~~* Functional tests are not fixed.~~

    スクリーンショット_2021-11-06_10-23-48

    Any helps are appreciated.

    ~~Note: If you execute set cmdheight=0, you cannot seen one line :echo or :echomsg output.~~

    Limitation

    • All outputs need hit-enter prompt. Because you have disabled echo area. You cannot disable the behavior without :silent.
    • For hit-enter prompt problem, please see #16480
    • ~~command line is hidden if 'display' option includes msgsep(and it is default value). It is bug though, hard to fix for me. I need @bfredl 's help.~~
    ui 
    opened by Shougo 152
  • [RFC] / Master issue: Compiling under Windows (VS2013)

    [RFC] / Master issue: Compiling under Windows (VS2013)

    I'm (sort-of) interested in getting this working under VS2013, so I'd have a native-built neovim instead of relying on MinGW or similar (although this may be a valid goal as well)

    I'd like to collate issues here that are stopping compilation of neovim on Windows on VS2013, in lieu of GitHub having proper blocker/issue dependency support

    For now running cmake -G Visual Studio 12 results in:

    CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:108 (message):
    Could NOT find LibUV (missing: LIBUV_LIBRARY LIBUV_INCLUDE_DIR)
    Call Stack (most recent call first):
    C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules   /FindPackageHandleStandardArgs.cmake:315 (_FPHSA_FAILURE_MESSAGE)
    cmake/FindLibUV.cmake:90 (find_package_handle_standard_args)
    CMakeLists.txt:51 (find_package)
    

    Todo:

    • [x] Attempt to build neovim using cmake and VS2013
    • [x] Build & install libuv somewhere that cmake can find it
    • [ ] Port if_cscope to use libuv (https://github.com/neovim/neovim/pull/810#issuecomment-45277957)
    • [x] start thinking about how to split platform code (os_unix.c os_msvc.c etc)
    • [ ] Add bracket to if statements (maybe?)
    • [ ] Start splitting compiler options in CMake
    • [ ] Refactor vim_FulllName
    • [ ] Add include guards: sys/time.h unistd.h
    • [ ] Reorder includes here and there, i.e. ensure platform includes and/or vim.h are included before anything else
    • [ ] Document the above
    • [ ] ???
    • [ ] Profit

    Thanks to @equalsraf for the above


    Want to back this issue? Place a bounty on it! We accept bounties via Bountysource.

    build platform:windows 
    opened by ghost 146
  • [RFC] Built-in LSP Support

    [RFC] Built-in LSP Support

    So, here's the very beginnings of LSP support in neovim.

    It can currently, start a server, say that it has opened the file and request references from the server. It loads the references using setloclist.

    Here's my vision (or at least a rough draft of it). It's too late for me right now to clean more of it up and I'm too excited not to finally at least put something as a WIP PR :)

    Feedback welcome and appreciated.

    Goals:

    Registering callbacks

    Should be something along the lines of

    function lsp#request(request_name, arguments, use_default_callback, optional_callback)

    as well as a lua function that has the same signature.

    Where:

    • request_name
      • The name of the request that you want, i.e. 'textDocument/references'
      • This is specified in microsofts protocol.
    • arguments
      • If you want to hardcode in a value, pass in the values that you would like, the rest will be filled in with the default values
      • These default values would be grabbed programmatically, i.e. for Position, we would use line('.') and col('.')
      • This allows the functions to be tested or used outside of the LSP context
        • For example if you want to highlight all the references of something, but it's not the item under the cursor, you could pass in the location of that item to the function
    • use_default_callback
      • A boolean value to determine whether or not to use the default callback value
    • optional_callback
      • We will provide a default callback that will handle anything within the TUI
      • This will also use built-in neovim items (such as popupmnu, loclist, quickfix, etc.) so that if those are externalized by a GUI, they don't even have to do anything special.
      • Behavior could be to simply override the callback or to add it to a list of callbacks to call
        • Might want to use a list so that multiple hosts/clients of neovim could grab onto these events.
        • Probably don't want neovim to process the events though if the host/client override.
        • I'd just start with overriding to start with, since it is simple.

    I imagine optional callbacks essentially allowing an even more extensive API, one that doesn't require Neovim explicit knowledge. So, to embed neovim in another editor, you could try and do lots of the information transfer with LSP callbacks.

    From nvim :call lsp#request('textDocument/references', [], v:false, custom_callback)

    From remote nvim.call_function('lsp#request', ['textDocument/references', [], false, custom_callback])

    Creating default callbacks

    function lsp#handle_response(request_name, response) -> function lsp#response#textDocument.references(response) -> function lsp#response#textDocument.hover(response)

    Where:

    • response:
      • The response as specified by the protocol.
      • These should be made available so that people can use these as well to do more complicated tasks easily.
      • For example, could use the hover callback to create a simple hover pane that other hosts/clients/GUIs would understand.
    lsp 
    opened by tjdevries 132
  • Lua interface

    Lua interface

    • [x] luaeval()
    • [x] :lua command
    • [x] :luafile command
    • [x] :luado command
    • [x] luaeval() tests
    • [x] :lua tests
    • [x] :lua << tests
    • [x] :luafile tests
    • [x] :luado tests
    • (-) compatibility vim module
    • (-) compatibility vim module tests
    • [x] documentation update
    • [x] print
    • [x] print tests
    • [x] debug.debug (Vim appears to be also overriding this)
    • [x] debug.debug tests

    Ref #3823

    opened by ZyX-I 132
  • Vote on coding conventions

    Vote on coding conventions

    Vote here (See results below)

    As discussed in #66, we are holding a vote for the coding style that we will use as the basis as the coding convention for neovim. Let's keep this vote open until 11:59 PM PST on Wednesday, February 26.

    How to vote

    Please view the following Gists to view code samples in each of the coding styles. We are using ranked voting. To vote, rank the coding styles in order of preference and add a comment to this thread with your ranking. For example:

    Google > Hybrid > LLVM > Python > Linux

    After the vote closes, we will tally up the rankings and choose a winner using Borda count. @ZyX-I's script will be used to scrape these comments and compute the results using the Borda count algorithm.

    Results

    | Short Name | Name and Link | Indent style | Vote Score | | --- | --- | --- | --- | | Hybrid | Hybrid coding style | 2 spaces | 158 | | LLVM | LLVM coding style | 2 spaces | 152 | | Google | Google C++ coding style | 2 spaces | 150 | | Linux | Linux Kernel coding style | tabs (width 8) | 88 | | Python | Python C coding style | 4 spaces | 85 | | Lua | Lua C coding style | 2 spaces | 58 |

    Update: per @tarruda's request, I have added the Lua C style to the ballot. If you prefer the Lua style, please update your votes.

    Notes

    • Disclaimer: I am not an expert on each of these coding styles. Please let me know if you see a formatting error in any of these samples that does not completely conform to the coding style.
    • For context, please read the discussion in #66.
    opened by davidzchen 132
  • [RFC] - Extended Marks

    [RFC] - Extended Marks

    These are marks designed for developers who want to build plugins or embed neovim. (they follow all column and line changes) issue #4816

    • [x] line insert
    • [x] line delete
    • [x] line join
    • [x] line break
    • [x] char inserts (WAHOO)
    • [x] blockwise char inserts
    • [x] char delete
    • [x] delete with x
    • [x] blockwise char deletes
    • [x] char paste
    • [x] blockwise char paste
    • [x] replace
    • [x] blockwise replace
    • [x] undo of moved marks (undo of deleted marks is deferred)
    • [x] redo
    • [x] :move
    • [x] insert tab
    • [x] shiftwidth
    • [x] merge undo info where possible
    • [x] test multiwidth insert
    • [x] kbtree merged
    • [x] update since field in api
    • [x] docs
    • [x] auto-indent
    • [x] baisc substitutions
    • [x] substitute with backreferences (tentative)
    • [x] substitute with newline in pattern and newlin in substition (tentative)
    • [x] del_bytes bug
    • [x] op_reindent
    • [x] use ns pr
    • [x] cleanup & refactor

    In app visual testing can be done with

    " Extended marks
    
    function! LoadExtmarks()
      highlight extmark ctermbg=Blue guibg=Blue
      let g:mark_ns = nvim_create_namespace('myplugin')
      function! Testextmark(timer_id)
        " Get all the mark ids
        let a:all_marks = nvim_buf_get_marks(0, g:mark_ns, -1, -1, -1, 0)
    
        call clearmatches()
    
        for mark in a:all_marks
          let a:bytes = col([mark[1], mark[2]])
          let a:ma = matchaddpos('extmark', [[mark[1], mark[2]]])
        endfor
        call timer_start(100, 'Testextmark')
      endfunction
      call timer_start(1, 'Testextmark')
    endfunction
    
    nnoremap <leader>tm :call LoadExtmarks()<cr>
    
    opened by timeyyy 127
  • Restore cursor shape to default on exit

    Restore cursor shape to default on exit

    Problem

    My default cursor shape is a blinking line. When I quit NVIM, my terminal cursor is set to a block instead.

    Expected behavior

    I wish to configure NVIM so that the terminal cursor is restored to the default cursor. I read the FAQ and I don't prefer it as it hardcodes the cursor.

    A better approach would be to utilize the ANSI escape sequence \033[0 q which restores the default cursor. It is supported by xterm. How do I configure NVIM to behave like this?

    enhancement tui complexity:low 
    opened by UtkarshVerma 2
  • Undercurl support with WezTerm

    Undercurl support with WezTerm

    Problem

    I've been using Gnome Terminal before WezTerm, and undercurl worked well.
    I tried WezTerm and I noticed that it doesn't work out of the box. I had to install their terminfo file to activate this.
    It's not a big deal to install it, but I wonder how it could support Gnome Terminal without it. (it means it can be done for WezTerm as well?)

    I raised an issue there, but the maintainer suggested me to request this feature here. https://github.com/wez/wezterm/issues/415

    Expected behavior

    Out-of-the-box undercurl support in WezTerm without additional terminfo file.

    It seems to me that WezTerm only uses xterm-256color for all other stuff and only introduced wezterm terminfo just because of neovim. So if neovim supports this, they probably could remove additional terminfo as well.

    enhancement 
    opened by kiyoon 0
  • search and replace locks up neovim on big files

    search and replace locks up neovim on big files

    Describe the bug

    If you open a big text file, searching and replacing in a file can lock neovim up completely.

    Steps to reproduce

    • Download zip archive under https://www3.stats.govt.nz/2018census/Age-sex-by-ethnic-group-grouped-total-responses-census-usually-resident-population-counts-2006-2013-2018-Censuses-RC-TA-SA2-DHB.zip
    • unpack Data8277.csv (857 MB)
    • nvim -u NONE Data8277.csv
    • :%s/20/30

    Expected behavior

    Neovim instance will ramp up memory usage up to 5 GB over several minutes but will never finish. Vim manages to do the replacement above in ~13 sec.

    Neovim version (nvim -v)

    0.8.2

    Vim (not Nvim) behaves the same?

    no, as of vim 9.0.639

    Operating system/version

    macOS 13.1

    Terminal name/version

    iTerm2 3.5.0beta8

    $TERM environment variable

    xterm-256color

    Installation

    homebrew

    bug performance 
    opened by shartf 2
  • title_pos == 1 when you get win config with vim.api.nvim_win_get_config

    title_pos == 1 when you get win config with vim.api.nvim_win_get_config

    Describe the bug

    title_pos == 1 when you get win config with vim.api.nvim_win_get_config

    Steps to reproduce

    vim.api.nvim_set_keymap("n", "l", "", { callback = function() local conf_ = { width = 10, relative = "editor", anchor = "NW", style = "minimal", border = "rounded", title = "Hoge", title_pos = "center", } local conf = vim.fn.extend(conf_, { height = 10, row = 10, col = 10, }) local buf = vim.api.nvim_create_buf(false, true) local win = vim.api.nvim_open_win(buf, true, conf) print(vim.inspect(vim.api.nvim_win_get_config(win)))

    end, noremap = true, silent = true, desc = "title_pos == 1", nowait = true, })

    Expected behavior

    { anchor = "NW", border = { "╭", "─", "╮", "│", "╯", "─", "╰", "│" }, col = { [false] = 10, [true] = 3 }, external = false, focusable = true, height = 10, relative = "editor", row = { [false] = 10, [true] = 3 }, title = { { "Hoge", "FloatTitle" } }, title_pos = 1, width = 10, zindex = 50 }

    Neovim version (nvim -v)

    v0.9.0-dev-633+g904c13e6b-dirty

    Vim (not Nvim) behaves the same?

    no

    Operating system/version

    13.1

    Terminal name/version

    kitty

    $TERM environment variable

    xterm-256color

    Installation

    brew install --HEAD neovim

    bug api 
    opened by Cassin01 3
  • defaults: change eob (end-of-buffer) from tilde

    defaults: change eob (end-of-buffer) from tilde "~" to bullet

    Problem

    • The "~" eob fillchar looks very dated.
      • Counterargument: it's distinctive to Vim, familiar, and extremely iconic.
        • Counter-counterargument: Nvim's default UI needs its own subtle distinctiveness.

    related https://github.com/neovim/neovim/issues/19354

    Expected behavior

    Use bullet char instead of "~".

    set fillchars+=eob:·
    
    • After using it for awhile myself, it doesn't feel garish or overwrought. It feels appropriate: it's a way to give a visual signal without demanding attention.
    • The bullet char is already used for Nvim folds, so there's symmetry/precedent.
    • It feels heretical, which usually means we should do it.

    Compare before/after:

    image enhancement good-first-issue defaults complexity:low 
    opened by justinmk 1
Releases(nightly)
  • nightly(Jan 9, 2023)

    NVIM v0.9.0-dev-635+gc19bd47c0
    Build type: RelWithDebInfo
    LuaJIT 2.1.0-beta3
    

    Install

    Windows

    Zip

    1. Download nvim-win64.zip
    2. Extract the zip.
    3. Run nvim-qt.exe

    MSI

    1. Download nvim-win64.msi
    2. Run the MSI
    3. Search and run nvim-qt.exe or run nvim.exe on your CLI of choice.

    macOS

    1. Download nvim-macos.tar.gz
    2. Run xattr -c ./nvim-macos.tar.gz (to avoid "unknown developer" warning)
    3. Extract: tar xzvf nvim-macos.tar.gz
    4. Run ./nvim-macos/bin/nvim

    Linux (x64)

    Tarball

    1. Download nvim-linux64.tar.gz
    2. Extract: tar xzvf nvim-linux64.tar.gz
    3. Run ./nvim-linux64/bin/nvim

    Debian Package

    1. Download nvim-linux64.deb
    2. Install the package using sudo apt install ./nvim-linux64.deb
    3. Run nvim

    AppImage

    1. Download nvim.appimage
    2. Run chmod u+x nvim.appimage && ./nvim.appimage
      • If your system does not have FUSE you can extract the appimage:
        ./nvim.appimage --appimage-extract
        ./squashfs-root/usr/bin/nvim
        

    Other

    SHA256 Checksums

    71717cdae2cb12d5f9f4904d5f26c0b46c3f1894a4146731781348526d8e1ecb  nvim-linux64.tar.gz
    95fb513c7c1ed5632c16ae3e3e99571c3ed8e0040c871abbb73bc216c055f7d8  nvim-linux64.deb
    2b657042789e58ee3a4cf17e5726b72663e30107053a0560525c017e27606406  nvim.appimage
    0679c1dee77f2b3941ca69a92757490405c529d00f4bd68773ffd526ff54841c  nvim.appimage.zsync
    a70da37f830a44745e60fa1a0b8b301f4f916c0d2e95608dca2de9a34e1ccf7f  nvim-macos.tar.gz
    5daeb11c4e9323feb0743a6f001d0af056eeff380286dafbd1b4c3d6ecd45dae  nvim-win64.zip
    563acf5adb3dc847ba9c1b2aa29279dc4a88cfad80b447bc5e1eb406b3d28aa2  nvim-win64.msi
    
    Source code(tar.gz)
    Source code(zip)
    nvim-linux64.deb(15.04 MB)
    nvim-linux64.deb.sha256sum(83 bytes)
    nvim-linux64.tar.gz(15.04 MB)
    nvim-linux64.tar.gz.sha256sum(86 bytes)
    nvim-macos.tar.gz(11.86 MB)
    nvim-macos.tar.gz.sha256sum(84 bytes)
    nvim-win64.msi(42.07 MB)
    nvim-win64.msi.sha256sum(81 bytes)
    nvim-win64.zip(42.37 MB)
    nvim-win64.zip.sha256sum(81 bytes)
    nvim.appimage(14.85 MB)
    nvim.appimage.sha256sum(80 bytes)
    nvim.appimage.zsync(52.19 KB)
    nvim.appimage.zsync.sha256sum(86 bytes)
  • v0.8.2(Dec 29, 2022)

    This primarily a bug fix release but some improvements to documentation has been back-ported as well.

    Features

    • help: Highlighted codeblocks

    Documentation

    • lua: Add guide to using Lua in Neovim (#21137)
    • Mention how to remove the "How-to disable mouse" menu item
    • Fix order of numbers in syntax.txt
    • lua: Correct the tags for vim.opt_local and vim.opt_global (#21138)

    Bug Fixes

    • api: Set correct curbuf when temporarily changing curwin
    • api: "emsg_silent" should imply "silent" in nvim_cmd
    • decoration: Do not reset must_redraw after calling providers
    • diagnostic: Clear stale cache on reset (#21454)
    • events: Save v:event for cmdline autocommands separately
    • float: Fix ml_get error with bufpos
    • float: Fix crash with bufpos and non-existent window
    • folds: Use long for number of folded lines
    • mappings: Use all buckets in second round of unmap
    • memory: Fix memory alignment for dynamic allocation
    • options: Fix local 'sidescrolloff' doesn't work for mouse
    • options: Restore exists() behavior for options
    • terminal: Fix 'mousescroll' not respected in terminal mode
    • tui: Set cursor color parameter as string when required
    • win_close: Remove float grid after closing buffer

    Build System Fixes

    • Restrict git describe to top level source directory
    NVIM v0.8.2
    Build type: Release
    LuaJIT 2.1.0-beta3
    
    

    Install

    Windows

    Zip

    1. Download nvim-win64.zip
    2. Extract the zip.
    3. Run nvim-qt.exe

    MSI

    1. Download nvim-win64.msi
    2. Run the MSI
    3. Search and run nvim-qt.exe or run nvim.exe on your CLI of choice.

    macOS

    1. Download nvim-macos.tar.gz
    2. Run xattr -c ./nvim-macos.tar.gz (to avoid "unknown developer" warning)
    3. Extract: tar xzvf nvim-macos.tar.gz
    4. Run ./nvim-macos/bin/nvim

    Linux (x64)

    Tarball

    1. Download nvim-linux64.tar.gz
    2. Extract: tar xzvf nvim-linux64.tar.gz
    3. Run ./nvim-linux64/bin/nvim

    Debian Package

    1. Download nvim-linux64.deb
    2. Install the package using sudo apt install ./nvim-linux64.deb
    3. Run nvim

    AppImage

    1. Download nvim.appimage
    2. Run chmod u+x nvim.appimage && ./nvim.appimage
      • If your system does not have FUSE you can extract the appimage:
        ./nvim.appimage --appimage-extract
        ./squashfs-root/usr/bin/nvim
        

    Other

    SHA256 Checksums

    27aef92fba0d3f51ebb8b98f3689895f9bbe48f11b74920d89280bc58fbe8e28  nvim-linux64.tar.gz
    a2d82dd169a11408921db90060c93cafdec43507898fbb36bc9e88e483ee3dfa  nvim-linux64.deb
    bb0d4599cb506fc6e29bf0e9cef3b52e06dcb4bb930b56d6eb88320f1d46a908  nvim.appimage
    d41df431bf2459048aa03b8b887f8a229e369aad909c729219b4113c801d75c0  nvim.appimage.zsync
    12c3f25c2fc46b25b851e62e65eb844722126948cc849add3cb951c3d73329eb  nvim-macos.tar.gz
    e2d53c6fd4a3caefbff47765d63d1640a5a134de46623ed8e3f9bf547791c26f  nvim-win64.zip
    5a7e78e0b4a089aa4f610440862d2c1f4edd5fb5d2b5ce6e74e671d4816c50a7  nvim-win64.msi
    
    Source code(tar.gz)
    Source code(zip)
    nvim-linux64.deb(9.98 MB)
    nvim-linux64.deb.sha256sum(83 bytes)
    nvim-linux64.tar.gz(9.97 MB)
    nvim-linux64.tar.gz.sha256sum(86 bytes)
    nvim-macos.tar.gz(11.53 MB)
    nvim-macos.tar.gz.sha256sum(84 bytes)
    nvim-win64.msi(41.96 MB)
    nvim-win64.msi.sha256sum(81 bytes)
    nvim-win64.zip(42.28 MB)
    nvim-win64.zip.sha256sum(81 bytes)
    nvim.appimage(14.66 MB)
    nvim.appimage.sha256sum(80 bytes)
    nvim.appimage.zsync(51.52 KB)
    nvim.appimage.zsync.sha256sum(86 bytes)
  • stable(Dec 29, 2022)

    NVIM v0.8.2
    Build type: Release
    LuaJIT 2.1.0-beta3
    
    

    Install

    Windows

    Zip

    1. Download nvim-win64.zip
    2. Extract the zip.
    3. Run nvim-qt.exe

    MSI

    1. Download nvim-win64.msi
    2. Run the MSI
    3. Search and run nvim-qt.exe or run nvim.exe on your CLI of choice.

    macOS

    1. Download nvim-macos.tar.gz
    2. Run xattr -c ./nvim-macos.tar.gz (to avoid "unknown developer" warning)
    3. Extract: tar xzvf nvim-macos.tar.gz
    4. Run ./nvim-macos/bin/nvim

    Linux (x64)

    Tarball

    1. Download nvim-linux64.tar.gz
    2. Extract: tar xzvf nvim-linux64.tar.gz
    3. Run ./nvim-linux64/bin/nvim

    Debian Package

    1. Download nvim-linux64.deb
    2. Install the package using sudo apt install ./nvim-linux64.deb
    3. Run nvim

    AppImage

    1. Download nvim.appimage
    2. Run chmod u+x nvim.appimage && ./nvim.appimage
      • If your system does not have FUSE you can extract the appimage:
        ./nvim.appimage --appimage-extract
        ./squashfs-root/usr/bin/nvim
        

    Other

    SHA256 Checksums

    27aef92fba0d3f51ebb8b98f3689895f9bbe48f11b74920d89280bc58fbe8e28  nvim-linux64.tar.gz
    a2d82dd169a11408921db90060c93cafdec43507898fbb36bc9e88e483ee3dfa  nvim-linux64.deb
    bb0d4599cb506fc6e29bf0e9cef3b52e06dcb4bb930b56d6eb88320f1d46a908  nvim.appimage
    d41df431bf2459048aa03b8b887f8a229e369aad909c729219b4113c801d75c0  nvim.appimage.zsync
    12c3f25c2fc46b25b851e62e65eb844722126948cc849add3cb951c3d73329eb  nvim-macos.tar.gz
    e2d53c6fd4a3caefbff47765d63d1640a5a134de46623ed8e3f9bf547791c26f  nvim-win64.zip
    5a7e78e0b4a089aa4f610440862d2c1f4edd5fb5d2b5ce6e74e671d4816c50a7  nvim-win64.msi
    
    Source code(tar.gz)
    Source code(zip)
    nvim-linux64.deb(9.98 MB)
    nvim-linux64.deb.sha256sum(83 bytes)
    nvim-linux64.tar.gz(9.97 MB)
    nvim-linux64.tar.gz.sha256sum(86 bytes)
    nvim-macos.tar.gz(11.53 MB)
    nvim-macos.tar.gz.sha256sum(84 bytes)
    nvim-win64.msi(41.96 MB)
    nvim-win64.msi.sha256sum(81 bytes)
    nvim-win64.zip(42.28 MB)
    nvim-win64.zip.sha256sum(81 bytes)
    nvim.appimage(14.66 MB)
    nvim.appimage.sha256sum(80 bytes)
    nvim.appimage.zsync(51.52 KB)
    nvim.appimage.zsync.sha256sum(86 bytes)
  • v0.8.1(Nov 14, 2022)

    NVIM v0.8.1
    Build type: Release
    LuaJIT 2.1.0-beta3
    
    

    Changes since 0.8.0

    Features

    • extmarks: Allow preventing spellchecking with spell = false
    • spell: Support nospell in treesitter queries
    • man: Add health check
    • docs-html: Try to use tags for ToC headings

    Bug Fixes

    • ui: Setting 'cmdheight' with global statusline
    • ui: Fix highlights not being updated with 'winhl'
    • Make_filter_cmd for :! powershell
    • :! pwsh redirection for command not found
    • Find multibyte file name in line
    • Avoid unsigned overflow in home_replace()
    • docs-html: Update parser
    • folds: Fix fold marker multibyte comparison
    • health: Correct tmux rgb verification
    • man.lua: Set modifiable before writing page
    • mouse: Ensure no scrolling with "ver:0" in 'mousescroll'
    • paste: Feed keys as typed in cmdline mode
    • qflist: Avoid read of uninitialized memory
    • spell: Fix wrong cast
    • stdpath: Default to /tmp if stdpath('run') cannot be created
    • tui: Resume main thread if suspending isn't implemented

    Documentation

    • lsp: Vim.lsp.range_code_action() is not deprecated

    Install

    Windows

    Zip

    1. Download nvim-win64.zip
    2. Extract the zip.
    3. Run nvim-qt.exe

    MSI

    1. Download nvim-win64.msi
    2. Run the MSI
    3. Search and run nvim-qt.exe or run nvim.exe on your CLI of choice.

    macOS

    1. Download nvim-macos.tar.gz
    2. Run xattr -c ./nvim-macos.tar.gz (to avoid "unknown developer" warning)
    3. Extract: tar xzvf nvim-macos.tar.gz
    4. Run ./nvim-macos/bin/nvim

    Linux (x64)

    Tarball

    1. Download nvim-linux64.tar.gz
    2. Extract: tar xzvf nvim-linux64.tar.gz
    3. Run ./nvim-linux64/bin/nvim

    Debian Package

    1. Download nvim-linux64.deb
    2. Install the package using sudo apt install ./nvim-linux64.deb
    3. Run nvim

    AppImage

    1. Download nvim.appimage
    2. Run chmod u+x nvim.appimage && ./nvim.appimage
      • If your system does not have FUSE you can extract the appimage:
        ./nvim.appimage --appimage-extract
        ./squashfs-root/usr/bin/nvim
        

    Other

    SHA256 Checksums

    a901b8815d1c0a26104bcbe405e1aa308f364f98d9dc7daa58c70114def60a29  nvim-linux64.tar.gz
    5774c0d299a27a77e4e497c018cbcc9d4291c3b019ada28880d08d1f3040e779  nvim-linux64.deb
    25658f3db59fac398bc28b7ff7984ed1becdf9a3e98b3e4e226c236c35107054  nvim.appimage
    95cc915e2c41b7f29c3c6c572f847b1b67ba6b05eb015d5f0d78a4300d11b213  nvim.appimage.zsync
    52efab6794653ff6346b3a94d991c086b93837f95eeed467cb3769a3c65088ea  nvim-macos.tar.gz
    1332cc7eded77ec3284ef648b6d54beb6d0f8be8eb7789483d46ff466343afb4  nvim-win64.zip
    e351d76026b0b19488ff4961435e01ead30a5955aafcbe6c89dcb8d8d7054a76  nvim-win64.msi
    
    Source code(tar.gz)
    Source code(zip)
    nvim-linux64.deb(9.97 MB)
    nvim-linux64.deb.sha256sum(83 bytes)
    nvim-linux64.tar.gz(9.96 MB)
    nvim-linux64.tar.gz.sha256sum(86 bytes)
    nvim-macos.tar.gz(11.52 MB)
    nvim-macos.tar.gz.sha256sum(84 bytes)
    nvim-win64.msi(41.96 MB)
    nvim-win64.msi.sha256sum(81 bytes)
    nvim-win64.zip(42.27 MB)
    nvim-win64.zip.sha256sum(81 bytes)
    nvim.appimage(14.65 MB)
    nvim.appimage.sha256sum(80 bytes)
    nvim.appimage.zsync(51.48 KB)
    nvim.appimage.zsync.sha256sum(86 bytes)
  • v0.8.0(Sep 30, 2022)

    NVIM v0.8.0
    Build type: Release
    LuaJIT 2.1.0-beta3
    
    

    Install

    Windows

    Zip

    1. Download nvim-win64.zip
    2. Extract the zip.
    3. Run nvim-qt.exe

    MSI

    1. Download nvim-win64.msi
    2. Run the MSI
    3. Search and run nvim-qt.exe or run nvim.exe on your CLI of choice.

    macOS

    1. Download nvim-macos.tar.gz
    2. Run xattr -c ./nvim-macos.tar.gz (to avoid "unknown developer" warning)
    3. Extract: tar xzvf nvim-macos.tar.gz
    4. Run ./nvim-macos/bin/nvim

    Linux (x64)

    Tarball

    1. Download nvim-linux64.tar.gz
    2. Extract: tar xzvf nvim-linux64.tar.gz
    3. Run ./nvim-linux64/bin/nvim

    Debian Package

    1. Download nvim-linux64.deb
    2. Install the package using sudo apt install ./nvim-linux64.deb
    3. Run nvim

    AppImage

    1. Download nvim.appimage
    2. Run chmod u+x nvim.appimage && ./nvim.appimage
      • If your system does not have FUSE you can extract the appimage:
        ./nvim.appimage --appimage-extract
        ./squashfs-root/usr/bin/nvim
        

    Other

    SHA256 Checksums

    1af27471f76f1b4f7ad6563c863a4a78117f0515e3390ee4d911132970517fa7  nvim-linux64.tar.gz
    215c88e8cf3fefcd02ef45dc8cdad563e1c601faeddca41565b6b852fceb26b5  nvim-linux64.deb
    e1e6512bd5d9081d293ac7d1283166e09cbb32d15063853ade4b03719919e22f  nvim.appimage
    c36b78021333db3c5d312b83ff1634997c1085473e2cedce3862786eddae481d  nvim.appimage.zsync
    abe0b0c1ca46b7d05e689d4791055a6dbbf2394cb53a6a8d8274813e6762c1f1  nvim-macos.tar.gz
    c52e0a93e8bd7e0192c3fe4552d8b0fb66fc8e08b6949e92340cccc4fa3a9bd0  nvim-win64.zip
    1f38694a43c9fb33b045407edaab793e4a4f6da6751ec6f09f6fd96da4fba786  nvim-win64.msi
    

    Breaking changes

    • Remove 'insertmode' 'remap' and 'terse' options
    • highlight: Rename attributes to match Vim (#19159)
    • highlight: Error on invalid names and allow '.' and '@'
    • terminal: Drop winpty, require Windows 10 (version 1809 or later) #18253
    • treesitter: Use @foo.bar style highlight groups
    • treesitter: Do not merge queries by default (#20105)

    Features

    • runtime: Enable filetype.lua by default (#19216)
    • Add undo!
    • Add "prerelease" to version dict
    • Click support for 'statusline', 'winbar' #18650
    • Add preview functionality to user commands
    • allow Cmdheight=0 (EXPERIMENTAL) #16251
    • Stdpath('run'), /tmp/nvim.user/ #18993
    • Add 'mousescroll' option (#12355)
    • Allow :wincmd to accept a count (#19815)
    • Multibuffer preview support for inccommand
    • Man: Port to Lua (#19912)
    • api: Ui options relevant for remote TUI
    • api: Add nvim_parse_cmd And nvim_cmd
    • api: Support handling stdin stream in remote ui
    • api: Add group_name to nvim_get_autocmds
    • api: Enable nvim_exec_autocmds to pass arbitrary data (#18613)
    • api: Support pattern array for exec_autocmds
    • api: Add unsilent to command APIs
    • api: Add replace_keycodes to nvim_set_keymap (#19598)
    • api: Add support for :horizontal modifier
    • api: Add "move" to nvim_input_mouse
    • api/ui: "ui_watched" option for ui-side extmarks
    • build: Add_glob_target runs only on changed files #19070
    • checkhealth: Check for slow shell #17829
    • defaults: Session data in $XDG_STATE_HOME #15583
    • defaults: Search selection by * and # in visual mode (#18538)
    • defaults: Nnoremap & :&& #19365
    • defaults: enable mouse by default (set mouse=nvi) #19290
    • diagnostic: Pass diagnostics as data to DiagnosticChanged autocmd (#20173)
    • docs: Gen_help_html.lua
    • edit: Insert an unsimplified key using CTRL-SHIFT-V
    • treesitter: Full support for spelling
    • filetype: Convert more patterns to filetype.lua
    • filetype: Remove side effects from vim.filetype.match (#18894)
    • filetype: Expand environment variables in filetype patterns (#20145)
    • fs: Add vim.fs functions: parents() dirname() basename() dir() find() normalize()
    • highlight: Implement CurSearch highlight
    • highlight: Support scoped @spam.eggs.baked_beans groups
    • input: Delay all simplifications
    • l10n: Turkish translations #19441
    • l10n: Improve zh_CN translations (#19483)
    • lsp: Remove capabilities sanitization (#17814)
    • lsp: Show feedback on empty hover response (#18308)
    • lsp: Options to filter and auto-apply code actions (#18221)
    • lsp: Add vim.lsp.buf.format (#18193)
    • lsp: Add logging level "OFF" (#18379)
    • lsp: Add LspAttach and LspDetach autocommands
    • lsp: Add filter to vim.lsp.get_active_clients()
    • lsp: Option to reuse_win for jump actions (#18577)
    • lsp: Add a start function (#18631)
    • lsp: Send didChangeConfiguration after init (#18847)
    • lsp: Defaults: tagfunc, omnifunc, formatexpr (#19003, #19677)
    • lsp: Allow passing custom list handler to LSP functions that return lists (#19213)
    • lsp: Provide feedback if server can't compute rename result (#19546)
    • lsp: Add range option to code_action; deprecate range_code_action (#19551)
    • lsp: Disable exit_timeout by default (#19672)
    • lsp: Add tcp support
    • lua: Vim.deprecate() #18320
    • lua: Vim.cmd() with kwargs acts like nvim_cmd() #18523
    • lua: Allow some vim script functions to run in fast callbacks
    • lua: Measure require in --startuptime
    • lua: Allow vim.cmd to be indexed (#19238)
    • lua: Print source locations of lua callbacks (#19597)
    • lua: Add vim.iconv (#18286)
    • lua: Vim.ui_attach to get ui events from lua (EXPERIMENTAL)
    • man.vim: List command flags in "gO" outline #17558
    • mappings: Do not replace existing mapping for simplified form
    • mappings: Allow special keys and modifiers in mapping
    • mapset: Support restoring "replace_keycodes" and "desc"
    • mapset: Support restoring Lua callback (#20024)
    • marks: Restore viewport on jump #15831
    • nvim_create_user_command: Pass structured modifiers to commands
    • pum: Pretend 'mousemoveevent' is set when showing right-click menu
    • server: Set $NVIM, unset $NVIM_LISTEN_ADDRESS #11009
    • server: Instance "name", store pipes in stdpath(state)
    • term: Add support for libvterm >= 0.2
    • terminal: Implement <c-> for terminal mode
    • terminal: Recognize underdouble and undercurl
    • terminfo: Bump built-in terminfo entries (#18570)
    • treesitter: Allow customizing language symbol name
    • treesitter: Add ability to retreive a tree/node given a range
    • treesitter: Upstream node methods from nvim-treesitter
    • treesitter: Include language in invalid query error (#14053)
    • treesitter: Bundle Lua parser and queries
    • treesitter: Add viml parser and queries
    • treesitter: Add injections
    • treesitter: Add vim.treesitter.start(), enable for Lua
    • treesitter: Bundle :help parser and queries
    • tui: Query terminal for CSI u support (#18181)
    • tui: Recognize keypad keys when using kitty keyboard protocol
    • tui: Try terminfo for [re]set_cursor_color OSC #19255
    • tui: Allow grid and host to disagree on ambiguous-width chars (#19686)
    • tui: Recognize sidescroll events (#19992)
    • tui: Support 'mousemoveevent'
    • ui: Add 'winbar'
    • ui: Clear message history explicitly with msg_history_clear event
    • ui: Make right-click menu work properly with ext_multigrid
    • ui: Allow to set the highlight namespace per window
    • ui: Use msg_grid based implementation for cmdheight=0
    • ui-ext: Make 'mousemoveevent' a ui_option
    • eval: Make Lua Funcref work as method and in substitute() (#20217)
    • eval: Input() support any type for "cancelreturn" in a dict (#19357)

    Bug Fixes

    • Show autocmd output when F is in shortmess (#18251)
    • Has() should preserve v:shell_error #18280
    • Suppress "is a directory" messages with shortmess 'F' (#18296)
    • Display global statusline correctly with ext_messages
    • Correct nlua_wait error message #18867
    • Right-click in clickable statusline #19252
    • Remote UI may get invalid 'pumblend' value #19379
    • Assertion failure when requiring missing module in autocmd
    • api: Nvim_eval_statusline should validate input #18347
    • api: Check error after getting win/buf handle (#19052)
    • api: Check for inclusive buffer line index out of bounds correctly (#19056)
    • api: Change default value of 'pattern' in nvim_exec_autocmds (#19115)
    • api: Do not switch win/buf if getting option in current win/buf (#19383)
    • api: Make nvim_set_hl(ns=0, ...) redraw screen properly
    • api: Nvim_set_hl bail out on invalid group name (#20021)
    • api: Notify dict watchers on nvim_set_var and vim.g setter
    • api/command: Fargs behavior when no arguments are passed (#19862)
    • autocmds: Separate command from desc (#18617)
    • buffer: Disable buffer-updates before removing from window #18933
    • build: Missing definitions for sizeof macros #16393
    • build: Only pass -municode if MINGW #19049
    • build: Strip trailing newline from variable (#19084)
    • build: Don't disable byte precompilation on debug builds
    • build: Fails if git is missing #19366
    • charclass: Make behavior with empty str match latest Vim (#19749)
    • checkhealth: Skip vim.health #18816
    • ci: Remove 2000ms blocking wait in many plugin/lsp_spec.lua tests
    • cmd: Make :-tabmove work with modifiers (#18447)
    • cmdheight=0: Various issues part3 #19816
    • cmdline: Fix passing -1 as char
    • cmdline: Trigger CmdlineEnter and ModeChanged earlier (#19474)
    • cmdline: Do not trigger completion at wrong time (#19920)
    • cmdline: Don't send invalid cursor with incsearch and cmdheight=0
    • column: Move sign sentinel after inserting/deleting lines (#20400)
    • completion: Remove wrong FUNC_ATTR_NONNULL_ALL (#19627)
    • diagnostic: Use nvim_exec_autocmds to trigger DiagnosticChanged (#18188)
    • diagnostic: Check for negative column value (#18868)
    • diagnostic: Remove buf from cache on BufWipeout (#20099)
    • diagnostic: Populate data key in DiagnosticChanged autocmd in reset (#20207)
    • docs: Correct obsolete note about 'writedelay' in dev docs
    • docs: Remove internal function from docs
    • edit.c: Indentkeys double indent after "!" #12894
    • eval: Check for v:lua when calling callback (#19855)
    • eval/f_getmatches: Return empty list for invalid win argument (#18893)
    • events: Make CursorHold behave as documented
    • ex_cmds: Correct flags for :const (#19387)
    • exceptions: Restore did_throw (#20000)
    • exmode: Do not throttle messages when pressing enter to print line
    • extmarks: Make virt_lines always start at 0 virtcol
    • filetype: Fix and improve filetype patterns
    • fillchars: Change fallback after setcellwidths()
    • float: Make screen*() functions respect floating windows
    • float: Fix glitch when making float window with border a split
    • float: Fix mouse drag position if float window turned to a split
    • folds: Fix fold regression with :move (#18685)
    • folds: Fix fold remains when :delete makes buffer empty (#19673)
    • ftdetect: Source plugins in autogroup (#18237)
    • gen_vimdoc.py: Handle missing luajit
    • getchar: Flush screen before doing a blocking wait
    • handlers: More specific error messages (#16772)
    • health: Correct shada file path #18603
    • health: Handle non-existent log file #18610
    • highlight: Use ctermbg/fg instead of bg/fg when use_rgb=false #18982
    • highlight: Add missing 'nocombine' to nvim_get_hl apis (#19586)
    • highlight: Set the window namespace when redrawing statusline
    • hl: Set Normal hl group sg_attr value #18820
    • hl: Return cterm fg/bg even if they match Normal #18981
    • inccommand: Do not try to preview an ambiguous command (#18827)
    • inccommand: Avoid crash if callback changes inccommand option (#18830)
    • inccommand: Clear cmdpreview state if preview is not shown (#18923)
    • inccommand: Skip split window if not enough room #18937
    • inccommand: Never preview if parsing command failed (#18944)
    • inccommand: Parse the command to check if it is previewable
    • inccommand: Deal with unsynced undo (#20041)
    • input: Allow Ctrl-C to interrupt a recursive mapping even if mapped (#18885)
    • input: Fix macro recording with ALT and special key (#18917)
    • input: Use correct grid when restoring cursor for mapping (#19047)
    • input: Do no reinterpret mouse keys with ALT modifiers
    • input: Use click number of last click for mouse drag (#20300)
    • inspect: Escape identifiers that are lua keywords (#19898)
    • keywordprg: Default to :help if set to empty string (#19983)
    • l10n: Improve zh_CN and zh_TW translations (#19969)
    • log: Back even again
    • logging: Skip recursion, fix crash #18764
    • logging: Make logmsg() thread-safe again
    • logging: Try harder to resolve Nvim "name" #19016
    • lsp: Unify progress message handling (#18040)
    • lsp: Fix unnecessary buffers being added on empty diagnostics (#18275)
    • lsp: Fix infinite loop in resolved_capabilities deprecation message (#18333)
    • lsp: Add missing bufnr argument (#18382)
    • lsp: Fix rename capability checks and multi client support (#18441)
    • lsp: Detach spawned LSP server processes (#18477)
    • lsp: Perform client side filtering of code actions (#18392)
    • lsp: Only send diagnostics from current buffer in code_action() (#18639)
    • lsp: Respect global syntax setting in open float preview (#15225)
    • lsp: Include cancellable in progress message table (#18809)
    • lsp: Adjust offset encoding in lsp.buf.rename() (#18829)
    • lsp: Set buflisted before switching to buffer (#18854)
    • lsp: Fix multi client handling in code action (#18869)
    • lsp: Small bugs in snippet-parser #18998
    • lsp: Pcall nvim_del_augroup_by_name (#19302)
    • lsp: Abort pending changes after flush when debouncing (#19314)
    • lsp: Don't attach a client in lsp.start() if there is none (#19328)
    • lsp: Account for initializing servers in vim.lsp.start (#19329)
    • lsp: Move augroup define to if statement (#19406)
    • lsp: Set workspace.configuration capability (#19548)
    • lsp: Send didOpen if name changes on write (#19583)
    • lsp: Prevent unexpected position jumps (#19370)
    • lsp: Avoid ^M character in hover window on Windows (#19640)
    • lsp: Set end_col in formatexpr (#19676)
    • lsp: Handle multiple clients with incremental sync (#19658)
    • lsp: Fix some type annotations in lsp.rpc (#19714)
    • lsp: Avoid pipe leaks if lsp cmd isn't executable (#19717)
    • lsp: Handle nil client in onexit callback (#19722)
    • lsp: Fix nil value error in get_group (#19735)
    • lsp: Clean the diagnostic cache when buffer delete (#19449)
    • lsp: When buffer detach remove buffer from client attached buffers (#20081)
    • lsp: Schedule removal of client object (#20148)
    • lsp: Support false result in handlers (#20252)
    • lsp: Out of bounds error in lsp.util.apply_text_edits (#20137)
    • lsp: Use correct function name in deprecated message (#20308)
    • lsp: Create missing directory before creating file (#19835)
    • lua: Don't mutate opts parameter of vim.keymap.del (#18227)
    • lua: Stop pending highlight.on_yank timer, if any (#18824)
    • lua: Highlight.on_yank can close timer in twice #18976
    • lua: Clear got_int when calling vim.on_key() callback (#18979)
    • lua: Don't leak memory on error
    • lua: Double entries in :lua completion #19410
    • lua: Make it possible to cancel vim.wait() with Ctrl-C (#19217)
    • lua: Make ui_attach()/ui_detach() take effect immediately (#20037)
    • lua: Make vim.str_utfindex and vim.str_byteindex handle NUL bytes
    • lua: Free vim.ui_attach callback before lua close (#20205)
    • lua: Fix architecture-dependent behavior in usercmd "reg" (#20384)
    • mac: Use same $LANG fallback mechanism as Vim
    • mac: Add CoreServices to flake.nix #18358
    • man.vim: Q in "$MANPAGER mode" does not quit #18443
    • maparg: Remove double allocation (#20033)
    • mappings: Fix double-free when unmapping simplifiable Lua mapping
    • mapset: Remove existing abbreviation of same lhs (#20320)
    • mark: Set mark fnum from buffer (#19195)
    • mark: Mark without a view restores at topline #19224
    • mark: Fix unexpected cursor movements (#19253)
    • mark: Give correct error message when mark is in another buffer (#19454)
    • menu: Make :menu still print header when there are no menus
    • messages: Add color when showing nvim_echo in :messages history
    • messages: Do not crash on cmdheight=0 and g< redisplay
    • messages: Validate msg_grid before silent! message with cmdheight=0
    • mksession: Don't store floats in session #18635
    • mouse: Click on global statusline with splits (#19390)
    • mouse: Fix using uninitialized memory with K_MOUSEMOVE (#19480)
    • mpack: Make sure a bool always is a bool
    • normal: Fix segfault with bracket command jumping to a mark
    • options: Properly free string options (#19510)
    • options: Mark winhighlight as list style (#19477)
    • packaging: Remove excess forward slash in Wix Patch (#18121)
    • paste: Ignore mappings in Cmdline mode (#18114)
    • path: Path_is_url returns false for "foo:/" #19797
    • powershell: Filter ":!" commands with args #19268
    • pum: Make right drag in anchor grid to select work in multigrid UI (#19382)
    • query: Fix unnatural order for inherits in treesitter queries (#20298)
    • redraw: Make sure :redraw! redraws command line
    • redraw: Handle switching to a tabpage with larger p_ch value
    • redraw: Avoid unnecessary redraws and glitches with floats+messages
    • redraw: Make redrawdebug=nodelta handle all the cases
    • rpc: Break nvim_error_event feedback loop between two nvim instances
    • runtime/genvimvim: Omit s[ubstitute] from vimCommand #18480
    • screen: Restart win_update() if a decor provider changes signcols (#18768)
    • screen: Check for col instead of vcol when drawing fold (#19572)
    • session: Respect sessionoptions=terminal #19497
    • shared: Avoid indexing unindexable values in vim.tbl_get() (#18337)
    • signs: Priority of extmark signs (#19718)
    • source: Make changing 'shellslash' change expand() result
    • source: Fix expand('') no longer works for Lua
    • spell: Make setting 'encoding' clear word list
    • spell: Correct spell move behavior without "noplainbuffer" (#20386)
    • startup: Nvim with --clean should not load user rplugins
    • substitute: Subtract number of backslashes later
    • tabpage: Check if ROWS_AVAIL changed for resize (#19620)
    • terminal: Invalid pointer comparison #18453
    • terminal: Do not trim whitespace that is actually in the terminal (#16423)
    • terminal: Scrollback delete lines immediately #18832
    • terminal: Coverity USE_AFTER_FREE #18978
    • terminal: Crash if TermClose deletes own buffer #19222
    • terminal: Avoid reading over the end of cell.chars (#19580)
    • terminal: Skip aucmd_win when checking terminal size (#19668)
    • terminal: Adopt altscreen test for libvterm 0.2 changes
    • terminfo: Disable smglr for vtpcon and conemu (#18855)
    • termopen: Avoid ambiguity in URI when CWD is root dir (#16988)
    • tests: Fix some screen.lua warnings
    • tests: Fix some issues with ui/inccommand_spec.lua causing slowness
    • tests: Unreliable parser_spec #18911
    • tests: Check for EOF on exit of nvim properly
    • tests: Missing clear() #18927
    • tests: Remove misleading $TEST_PATH segment #19050
    • tests: Remove irrelevant usage of display-=msgsep
    • tests: Use pending_c_parser when needed
    • tests: Indicate in test logs when nvim exit times out
    • tmpdir: Invalid tempname() if username has slashes #19323
    • treesitter: Create new parser if language is not the same as cached parser (#18149)
    • treesitter: Bump match limit up
    • treesitter: Offset directive associates range with capture (#18276)
    • treesitter: Correct region for string parser (#18794)
    • treesitter: New iter if folded
    • treesitter: Don't error when node argument of predicate is nil (#19355)
    • treesitter: Free memory on removing parser (#19933)
    • treesitter: More efficient node:root()
    • treesitter: Make it get_captures_at_position
    • treesitter: Do not link @error by default
    • treesitter: Don't support legacy syntax in start()
    • treesitter: Use the right loading order for base queries (#20117)
    • treesitter: Prevent endless loop on self-inheritence
    • treesitter: Return full metadata for get_captures_at_position (#20203)
    • ts: Do not clobber spelloptions (#20095)
    • tui: Update modifyOtherKeys reporting (#18158)
    • tui: Disable extended keys before exiting alternate screen (#18318)
    • tui: Piping nodejs to nvim breaks input handling #18932
    • tui: Resize at startup #17795
    • tui: Add fixups for hterm family #19078
    • tui: Handle padding requirements for visual bell (#20238)
    • ui: Require window-local value to show winbar on floating windows (#18773)
    • ui: Do not call showmode() when setting window height (#18969)
    • ui: Set redraw_cmdline when setting window height (#19630)
    • ui: Don't allow decor provider with ns_id==0
    • ui: Ui compositor does not correctly free event callbacks
    • ui: Allow redrawing statusline when msgsep is used (#20337)
    • ui: Redraw end of buffer if last line is modified (#20354)
    • unittests: Coredump when running unit tests #18663
    • usercmd: Also check for whitespace after escaped character (#19942)
    • version.c: Mark N/A vim patches #18587
    • vim.ui.input: Accept nil or empty "opts" #19109
    • window: Close floats first when closing buffer in other tab (#20284)
    • window: Fix equalization with cmdheight=0 (#20369)
    • windows: Stdpath("state") => "nvim-data" #18546
    • windows: Exepath, stdpath return wrong slashes #19111
    • winhl: Do not crash when unsetting winhl in just opened window
    • Make :undo! notify buffer update callbacks (#20344)
    • eval: Make Vim functions return inner window width and height (#19743)

    Build System

    • Bump Doxyfile to minimum required version 1.9.0 #18118
    • Bump msgpack to 4.0.0
    • Enable EXITFREE on Debug builds (#17783)
    • Add formatting targets for c and lua files (#19488)
    • clang-format: Align with project style #18192
    • clint: Remove all python2-isms with pyupgrade
    • clint: Remove "function size is too large" warning
    • clint: Remove rules for includes, whitespace, tabs #18611
    • cmake: Simplify and speed up the uninstall target
    • cmake: Simplify def_cmd_target function
    • cmake: Use glob_wrapper instead of file(GLOB in main CMakeLists
    • cmake: Fix static libintl test on macOS
    • deps: Bump LuaJIT, Luv and libuv
    • deps: Support universal builds on macOS
    • deps: Bump tree-sitter to v0.20.7 (#20067)
    • deps: Bump tree-sitter parsers
    • deps: Bump required libvterm to v0.3 (#20222)
    • deps: Require libtermkey version 0.22
    • deps: update neovim-qt, win32tools.zip

    Performance

    • Only redraw for CurSearch when it is currently in use
    • highlight: Allocate permanent names in an arena for fun and cache locality
    • highlight: Use binary search to lookup RGB color names
    • map: Visit only one hash bucket instead of all, like an actual hash table
    • memory: Get rid of extraneous heap allocations
    • memory: implement arena memory allocation with a shared freelist
    • memory: Use an arena for RPC decoding and some API return values
    • messages: Don't call ui_flush() per message line in various places
    • treesitter: Use a reuse list for query cursors
    • ui: Reduce allocations when encoding and decoding "redraw" events
    • ui: Avoid ui_flush() work in headless mode

    Refactor

    • checkhealth: Rename to vim.health, move logic to Lua #18720
    • Add pure attribute to pure functions
    • Replace char_u variables and functions with char
    • Enable -Wconversion warning for all Nvim source files
    • Add warnings for deprecated functions (#18662)
    • Change type of linenr_T from long to int32_t
    • Use nvim_get/set_option_value for vim.{b,w}o
    • Remove functions marked for deprecation in 0.8 (#19299)
    • Rename function prefix mb to the more accurate utf_cp (#19590)
    • Remove some unused includes
    • Change remaining sourcing_name/sourcing_lnum to exestack
    • Change FALSE/TRUE to false/true
    • api: Use a hashy hash for looking up api method and event names
    • api: Use a unpacker based on libmpack instead of msgpack-c
    • api: restructure api/vim.c and api/private/helpers.c code in separate files
    • api: Remove redundant fields of CmdParseInfo
    • aucmd: Call define_autocmd() directly for default autocmds
    • ci: Cleanup release.yml #19132
    • cmd: Format do_one_cmd()
    • cmd: Hoist out some code into functions
    • cmd: Unify execute_cmd with do_one_cmd
    • decor: Use decor levels properly
    • drawline.c: Factor out utf8 multibyte check
    • eval: Use Hashy McHashFace instead of gperf
    • eval.c: Resolve all clint issues (#19774)
    • eval/funcs.c: Resolve all clint errors
    • events: Remove unnecessary fudging of updating_screen
    • ex_cd: Add an early return to fix clint warning
    • ex_docmd.c: Resolve most clint errors (#19775)
    • filetype: Allow vim.filetype.match to accept buf and filename (#19114)
    • highlight: Make hlattrs2dict always use pre-allocated dict
    • log: Simplify log_path_init #18898
    • log: Use msg_schedule_semsg #18950
    • lsp: Remove redundant client cleanup (#18744)
    • lsp: Make the use of local aliases more consistent
    • lsp: Use autocmd api (#19407)
    • lsp: Factor out read_loop function
    • lsp: Encapsulate rpc uv handle
    • lsp: Extract rpc client from rpc.start
    • lua: Replace hard-coded gsub with vim.pesc() (#18407)
    • lua: Reformat with stylua 0.14.0 (#19264)
    • lua: Git-blame-ignore stylua update PR (#19273)
    • lua: Replace vim.cmd use with API calls (#19283)
    • map: Simplify free_all_mem handling
    • map: Statically initialize maphash array
    • map: Simplify add_map params
    • normal: Convert function comments to doxygen format
    • object: Get rid of redundant FIXED_TEMP_ARRAY
    • ops: Doxygen docstrings #17743
    • option: DRY get/set option value #19038
    • plines: Use a struct for chartabsize state
    • provider: Use list comprehension #19027
    • regexp_nfa.c: Match where Vim calls fopen() (#18778)
    • runtime: Convert dist#ft functions to lua (#18247)
    • runtime: Convert more dist#ft functions to lua (#18430)
    • runtime: Convert the remaining dist#ft functions to lua (#18623)
    • runtime: Port remaining patterns from filetype.vim to filetype.lua (#18814)
    • runtime: Refactor filetype.lua (#18813)
    • runtime: Port scripts.vim to lua (#18710)
    • setcellwidths: Use TV_LIST_ITEM_NEXT properly
    • signs: Handle non-sign attrs separately (#19784)
    • tests: Introduce testprg()
    • treesitter: Get_{nodes,captures}at{position,cursor}
    • typval: Change FC_CFUNC abstraction into FC_LUAREF
    • ui: Simplify stdin handling
    • uncrustify: Format all c code under /src/nvim/
    • vim.opt: Remove del arg
    • vim.opt: Unify vim.bo/wo building
    • vim.opt: Optimize append/prepend/remove
    • Format runtime with stylua
    Source code(tar.gz)
    Source code(zip)
    nvim-linux64.deb(9.96 MB)
    nvim-linux64.deb.sha256sum(83 bytes)
    nvim-linux64.tar.gz(9.96 MB)
    nvim-linux64.tar.gz.sha256sum(86 bytes)
    nvim-macos.tar.gz(11.50 MB)
    nvim-macos.tar.gz.sha256sum(84 bytes)
    nvim-win64.msi(41.95 MB)
    nvim-win64.msi.sha256sum(81 bytes)
    nvim-win64.zip(42.26 MB)
    nvim-win64.zip.sha256sum(81 bytes)
    nvim.appimage(15.11 MB)
    nvim.appimage.sha256sum(80 bytes)
    nvim.appimage.zsync(53.08 KB)
    nvim.appimage.zsync.sha256sum(86 bytes)
  • v0.7.2(Jun 26, 2022)

    NVIM v0.7.2
    Build type: Release
    LuaJIT 2.1.0-beta3
    
    

    Install

    Windows

    Zip

    1. Download nvim-win64.zip
    2. Extract the zip.
    3. Run nvim-qt.exe

    MSI

    1. Download nvim-win64.msi
    2. Run the MSI
    3. Search and run nvim-qt.exe or run nvim.exe on your CLI of choice.

    macOS

    1. Download nvim-macos.tar.gz
    2. Extract: tar xzvf nvim-macos.tar.gz
    3. Run ./nvim-macos/bin/nvim

    Linux (x64)

    Tarball

    1. Download nvim-linux64.tar.gz
    2. Extract: tar xzvf nvim-linux64.tar.gz
    3. Run ./nvim-linux64/bin/nvim

    Debian Package

    1. Download nvim-linux64.deb
    2. Install the package using sudo apt install ./nvim-linux64.deb
    3. Run nvim

    AppImage

    1. Download nvim.appimage
    2. Run chmod u+x nvim.appimage && ./nvim.appimage
      • If your system does not have FUSE you can extract the appimage:
        ./nvim.appimage --appimage-extract
        ./squashfs-root/usr/bin/nvim
        

    Other

    SHA256 Checksums

    fa75852890ca4b57551da194c696d3bbd14d9d2e966bc188d1e7e52ee942b71d  nvim-linux64.tar.gz
    dce77cae95c2c115e43159169e2d2faaf93bce6862d5adad7262f3aa3cf60df8  nvim-linux64.deb
    33b5d020c730b6d1b5185b1306ead83b6b8f8fab0239e0580c72b5224a9658e1  nvim.appimage
    0ef9478020bb6539b0f8e0d037e65cd5c69bfcb2353ee6231b0131fd30cfbd58  nvim.appimage.zsync
    39cb6b62f965dccebe433083e33974e1af3c4579a14bf818066b3d5250968495  nvim-macos.tar.gz
    0e969e15c7e4d9b128ec1e06159ead386d262fdc94616ddbb0c245abcc798ae8  nvim-win64.zip
    8cd7d3ae8ceeff9c0af8e5b1e216beb86230494f50f2f8dad2684fd2936b1494  nvim-win64.msi
    
    Source code(tar.gz)
    Source code(zip)
    nvim-linux64.deb(9.78 MB)
    nvim-linux64.deb.sha256sum(83 bytes)
    nvim-linux64.tar.gz(9.79 MB)
    nvim-linux64.tar.gz.sha256sum(86 bytes)
    nvim-macos.tar.gz(9.47 MB)
    nvim-macos.tar.gz.sha256sum(84 bytes)
    nvim-win64.msi(36.14 MB)
    nvim-win64.msi.sha256sum(81 bytes)
    nvim-win64.zip(36.37 MB)
    nvim-win64.zip.sha256sum(81 bytes)
    nvim.appimage(14.32 MB)
    nvim.appimage.sha256sum(80 bytes)
    nvim.appimage.zsync(50.33 KB)
    nvim.appimage.zsync.sha256sum(86 bytes)
Owner
Neovim
vim out of the box
Neovim
IDE tools for writing pest grammars, using the Language Server Protocol for Visual Studio Code, Vim and other editors

Pest IDE Tools IDE support for Pest, via the LSP. This repository contains an implementation of the Language Server Protocol in Rust, for the Pest par

pest 20 Apr 8, 2023
Vim configuration for Rust.

rust.vim Description This is a Vim plugin that provides Rust file detection, syntax highlighting, formatting, Syntastic integration, and more. It requ

The Rust Programming Language 3.4k Jan 8, 2023
Racer support for Vim

Vim Racer Plugin This plugin allows vim to use Racer for Rust code completion and navigation. Installation Build / Install Racer Install using Pathoge

null 624 Dec 7, 2022
N vim win! Neovim UI designed for Sway/i3.

Nwin This is an experimental Neovim UI that creates a new OS window for each Neovim window, all backed by the same neovim server. This enables perform

Ghjuvan Lacambre 86 Dec 29, 2022
A vim profiling tool

vim-profiler ?? vim-profiler is a wrapper around the (n)vim --startuptime command, written in Rust. The binary is called vp and has only been tested o

Liam 35 Dec 14, 2022
Convert VSCode themes to (Neo)Vim colorschemes

Djanho is a prototype which tries to convert VSCode themes to (Neo)Vim colorschemes. Features Handling of VSCode RGBA colors Out of the box conversion

Vinícius Müller 73 Jan 2, 2023
Apprentice-vscode - a port of @romainl’s excellent Apprentice Vim colour scheme to VS Code

Apprentice for VS Code apprentice-vscode is a port of @romainl’s excellent Apprentice Vim colour scheme to VS Code. The theme is available in two vari

Luna Razzaghipour 6 Dec 21, 2022
An experimental proofreading and linting language server for markdown files ✍️

prosemd is an experimental proofreading and linting language server for markdown files. It aims to provide helpful and smart diagnostics when writing

Phil Pluckthun 132 Dec 14, 2022
A *seriously* no-bullshit Neovim GUI written in Rust and Tauri

Looking for a shareable component template? Go here --> sveltejs/component-template svelte app This is a project template for Svelte apps. It lives at

null 13 Nov 21, 2022
A simple, plug-and-play Rust-implementation of D3vd/Meme_API

?? Rua A simplified Rust-implementation of D3vd/Meme_API. You can self-host this with ease through Docker, but you can also opt to use our free servic

Mihou 1 Dec 22, 2021
Lisp and Rust in a text editor => Crispmacs

crispmacs crispmacs is a WIP implementation of Emacs from scratch in Rust. It consists of two parts: crisp and the editor. Crisp crisp is a Lisp that'

rust 3 Jul 31, 2022
A fast and flexible analyzer for GML. 🦆

duck ⚠️ duck is not yet released and is unstable! An announcement will be made when 0.1.0 is released. A fast and flexible analyzer for GML (GameMaker

gabe weiner 8 Sep 28, 2022
This tool allows you to create the files needed for a Visual Studio project so that you can continue coding on a Mac for C++ with Visual Studio Code and then submit the Visual Studio project for Class Assignments

This tool allows you to create the files needed for a Visual Studio project so that you can continue coding on a Mac for C++ with Visual Studio Code and then submit the Visual Studio project for Class Assignments

cameron 3 Jan 18, 2023
Entity Component System focused on usability and speed.

Shipyard ⚓ Shipyard is an Entity Component System focused on usability and speed. If you have any question or want to follow the development more clos

Dylan Ancel 524 Jan 1, 2023
A small tool to use along with i3/Sway to add CSS-powered decorations to your focused windows, for better usability.

glimmer What A tool for decorating i3 windows when they get focused, written in Rust. classic.mp4 Why When using i3-gaps I ran into the following prob

Daniel Acuña 26 Dec 17, 2022
A fork of the abandoned ffmpeg-next crate which is a fork of the abandoned ffmpeg crate

This is a fork of the abandoned ffmpeg-next crate which is a fork of the abandoned ffmpeg crate. Currently supported FFmpeg versions: 4.x, 5.x. Build

Josh Holmer 4 Jan 26, 2023
Integra8 rust integration test framework Rust with a focus on productivity, extensibility, and speed.

integra8 Integra8 rust integration test framework Rust with a focus on productivity, extensibility, and speed. | This repo is in a "work in progress"

exceptional 3 Sep 26, 2022
Volo is a high-performance and strong-extensibility Rust RPC framework that helps developers build microservices.

Volo is a high-performance and strong-extensibility Rust RPC framework that helps developers build microservices.

CloudWeGo 1.3k Jan 2, 2023
A Diablo II library for core and simple client functionality, written in Rust for performance, safety and re-usability

A Diablo II library for core and simple client functionality, written in Rust for performance, safety and re-usability

null 4 Nov 30, 2022
a TRUE krunker client with focus on usability and performance

purpose this client aims to be an ACTUAL client, that can fundementally interface with krunker like the normal browser equivilent compiling we reccome

null 10 Jun 23, 2022