Vim-fork focused on extensibility and usability https://neovim.io
  • Vim Script 39.9%
  • Lua 32.4%
  • C 26.8%
  • CMake 0.4%
  • Zig 0.2%
  • Other 0.1%
Find a file
Rob Pilling c57818bb43
fix(ui2): avoid flickering fileinfo messages #41002
## Flicker cause

ui2's `check_targets()` function creates the hidden ui2 windows with this call chain:
```
nvim_open_win()
win_set_buf()
do_buffer()
set_curbuf()
enter_buffer()
```

and `enter_buffer()` sets `need_fileinfo`:

fdc09be03c/src/nvim/buffer.c (L1837-L1839)

This is then picked up by `normal_redraw`:

fdc09be03c/src/nvim/normal.c (L1381-L1385)

The fileinfo message then causes a ui2 window to appear to display it:

fdc09be03c/runtime/lua/vim/_core/ui2/messages.lua (L325-L330)

... which ends up calling `set_pos`, which registers an `on_key` handler:

fdc09be03c/runtime/lua/vim/_core/ui2/messages.lua (L726-L728)

This handler closes the ui2 window when the user presses, for example, `l` (because the user's not focusing said window).
The handler eventually calls `check_targets()`:

fdc09be03c/runtime/lua/vim/_core/ui2/messages.lua (L594-L595)

and `check_targets()` takes us back to the beginning, causing the ui2 window flicker

## Repro

```vim
=require("vim._core.ui2").enable()
set ch=0 shm-=F ve=all
e /tmp/x
```

Then hit `Ctrl-G` to show fileinfo (if not already shown) and hold `l`

## Fix

Effectively surround the ui2 window creating with `:silent`
2026-07-26 17:40:06 -04:00
.github ci: bump actions/checkout in the github-actions group across 1 directory 2026-07-24 14:41:37 +02:00
cmake
cmake.config
cmake.deps build(deps): bump luajit to a471ab78c 2026-07-26 10:46:05 +02:00
cmake.packaging build: support variant builds via env-var and cpack overrides #40947 2026-07-24 13:55:36 -04:00
contrib
deps
runtime fix(ui2): avoid flickering fileinfo messages #41002 2026-07-26 17:40:06 -04:00
scripts build(vim-patch): detect N/A tags in vimhelp patches #40942 2026-07-25 12:16:03 -04:00
src fix(path): DOS device path check #40976 2026-07-26 07:18:57 -04:00
test fix(path): DOS device path check #40976 2026-07-26 07:18:57 -04:00
.clang-format
.clang-tidy
.clangd
.editorconfig
.emmyrc.json
.git-blame-ignore-revs
.gitattributes build(vim-patch): detect N/A tags in vimhelp patches #40942 2026-07-25 12:16:03 -04:00
.gitignore
.luacheckrc
.luacov
.luarc.json
.mailmap
.stylua.toml
.stylua2.toml
.styluaignore
AGENTS.md
BSDmakefile
BUILD.md
build.zig
build.zig.zon build(deps): bump tree-sitter to 4d0f12699 2026-07-25 19:17:11 +02:00
CMakeLists.txt
CMakePresets.json
CONTRIBUTING.md
INSTALL.md
LICENSE.txt
MAINTAIN.md
Makefile
README.md

Neovim

Documentation | Chat

Coverity Scan analysis Packages Debian CI Downloads

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, and :help news for noteworthy changes in the latest version!

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 BUILD.md and supported platforms 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_BUILD_TYPE=RelWithDebInfo CMAKE_INSTALL_PREFIX=/full/path/
make install

CMake hints for inspecting the build:

  • 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

├─ cmake/           CMake utils
├─ cmake.config/    CMake defines
├─ cmake.deps/      subproject to fetch and build dependencies (optional)
├─ runtime/         plugins and docs
├─ src/nvim/        application source code (see src/nvim/README.md)
│  ├─ api/          API subsystem
│  ├─ eval/         Vimscript 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
└─ 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.txt for details.