Skip to content
Cross platform Neovim front-end UI, built with F# + Avalonia
F# Other
  1. F# 97.7%
  2. Other 2.3%
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.vim proper touchpad scrolling by integrating the delta floats Jun 17, 2019
.vscode editorvm: fix #58 Sep 15, 2019
Assets add crash report window Sep 26, 2019
DesignTime titlebar: buttons functional. theme ok Oct 7, 2019
Properties work around neovim win_pos message quirk Sep 28, 2019
ViewModels fix #92: title bar and cursor are aware of inactive window Nov 15, 2019
Views fix #92: title bar and cursor are aware of inactive window Nov 15, 2019
icons-icns rename icns Jul 23, 2019
icons-intellisense external popup menu with icons Aug 18, 2019
icons update icons, dark theme compatible Jul 2, 2019
images attempt to build macos package Jul 23, 2019
lib Merge branch 'master' into blur_bg Oct 6, 2019
native/osx pack osx native helper binary Sep 29, 2019
.gitignore osx: add vibrancy helper routine Sep 20, 2019
App.xaml going mvvm May 12, 2019
App.xaml.fs refactoring. dispatch redraw events, not always broadcast. Sep 26, 2019
LATENCY.md Update LATENCY.md Jun 16, 2019
LICENSE Initial commit Apr 29, 2019
NuGet.config revert NuGet.config. prevent pack.ps1 from removing sources from the … Aug 27, 2019
PACKAGING.md rename icns Jul 23, 2019
Program.fs fix build errors. update to avalonia v0.9 preview; fix #94 Nov 12, 2019
README.md update readme. Nov 12, 2019
add_nuget_source.ps1 add_nuget_source Jul 15, 2019
api_info_sample.json netstandard comformant Jun 7, 2019
azure-pipelines.yml Implement rpm packaging Sep 7, 2019
common.fs ui options configuration ok. Sep 3, 2019
config.fs remember last ui status and restore on startup Nov 1, 2019
convert-vsicons.ps1 external popup menu with icons Aug 18, 2019
def.fs fix #92: title bar and cursor are aware of inactive window Nov 15, 2019
emoji.tsv basic emoji support ok. May 16, 2019
fsharp.svg icon ok. May 3, 2019
fvim.config set guifont ok. May 4, 2019
fvim.fsproj fix build errors. update to avalonia v0.9 preview; fix #94 Nov 12, 2019
fvim.fsproj.user update May 22, 2019
fvim.sln wip Apr 30, 2019
fvim.svg update logo -- more neovim-ish Jun 7, 2019
getopt.fs fix #68 Nov 12, 2019
log.fs minor touch Sep 27, 2019
model.fs remember last ui status and restore on startup Nov 1, 2019
neovim.fs updating deps. minor touches, enable multigrid (broken) Sep 28, 2019
nerd.ttf nerd font embedded! May 8, 2019
nerdfont.txt update nerdfont codepoint ranges May 9, 2019
pack.ps1 add icon for win7 package Oct 5, 2019
pack.sh pack osx native helper binary Sep 29, 2019
paket.dependencies basic emoji support ok. May 16, 2019
paket.lock basic emoji support ok. May 16, 2019
process_emoji.fsx basic emoji support ok. May 16, 2019
shell.fs fix #68 Nov 12, 2019
states.fs remember last ui status and restore on startup Nov 1, 2019
theme.fs fix #92: title bar and cursor are aware of inactive window Nov 15, 2019
trace.ps1 force logging. crashes too much these days Jun 19, 2019
ui.fs revert font position calculation Oct 17, 2019
update.ps1 ... Jun 15, 2019
update_with_deps.ps1 update_with_deps.ps1 Sep 16, 2019
wcwidth.fs optimize ligature performance Jun 7, 2019

README.md

FVim Build Status

Cross platform Neovim front-end UI, built with F# + Avalonia.

Screenshot

Installation

Download the latest release package for your system, extract and run FVim!

  • For Windows 7, use the win7-x64 package.
  • For Windows 10, use the win-x64 package -- this version has faster startup.
  • For macOS, it's packaged as an app bundle -- unzip and drag it to your applications folder.
  • For Linux:
    • Debian based distributions: dpkg -i fvim_package_name.deb
    • Arch Linux: Install via AUR
    • RPM-based distributions: rpm -ivh fvim_package_name.rpm
    • Fedora: dnf install fvim_package_name.rpm
    • Compile from Source (having dotnet-sdk-3+ installed):
          git clone https://github.com/yatli/fvim && cd fvim && dotnet publish -f netcoreapp3.0 -c Release -r linux-x64 --self-contained
      

Features

  • HiDPI support -- try dragging it across two screens with different DPIs ;)
  • Proper font rendering -- respects font style, baseline, ligatures etc.
  • Proper cursor rendering -- color, blink etc.
  • Built-in support for Nerd font -- no need to patch your fonts!
  • East Asia wide glyph display with font fallback options
  • Emojis!
  • High performance rendering, low latency (60FPS on 4K display with reasonable font size!)
  • GPU acceleration
  • Use a Windows FVim frontend with a WSL neovim: fvim --wsl
  • Use the front end with a remote neovim: fvim --ssh user@host
  • Use custom neovim binary: fvim --nvim ~/bin/nvim.appimage
  • Host a daemon to preload NeoVim
  • Connect to a remote NeoVim backend: fvim --connect localhost:9527

Try these bindings (note, fvim-specific settings only work in ginit.vim, not init.vim!):

if exists('g:fvim_loaded')
    " good old 'set guifont' compatibility
    set guifont=Iosevka\ Slab:h16
    " Ctrl-ScrollWheel for zooming in/out
    nnoremap <silent> <C-ScrollWheelUp> :set guifont=+<CR>
    nnoremap <silent> <C-ScrollWheelDown> :set guifont=-<CR>
    nnoremap <A-CR> :FVimToggleFullScreen<CR>
endif

Some work-in-progress fancy cursor effects:

if exists('g:fvim_loaded')
    FVimCursorSmoothMove v:true
    FVimCursorSmoothBlink v:true
endif

fluent_cursor

Building from source

We're now targeting netcoreapp3.0 so make sure to install the latest preview SDK from the .NET site. We're actively tracking the head of Avalonia, and fetch the nightly packages from myget (see NuGet.config).

Then, simply:

git clone https://github.com/yatli/fvim
cd fvim
dotnet build -c Release
dotnet run -c Release

FVim-specific commands

The following new commands are available:

" Toggle between normal and fullscreen
FVimToggleFullScreen

" Cursor tweaks
FVimCursorSmoothMove v:true
FVimCursorSmoothBlink v:true

" Background composition
FVimBackgroundComposition 'acrylic'   " 'none', 'blur' or 'acrylic'
FVimBackgroundOpacity 0.85            " value between 0 and 1, default bg opacity.
FVimBackgroundAltOpacity 0.85         " value between 0 and 1, non-default bg opacity.

" Title bar tweaks
FVimCustomTitleBar v:true             " themed with colorscheme

" Debug UI overlay
FVimDrawFPS v:true

" Font tweaks
FVimFontAntialias v:true
FVimFontAutohint v:true
FVimFontSubpixel v:true
FVimFontLcdRender v:true
FVimFontHintLevel 'full'
FVimFontLineHeight '+1.0' " can be 'default', '14.0', '-1.0' etc.

" Try to snap the fonts to the pixels, reduces blur
" in some situations (e.g. 100% DPI).
FVimFontAutoSnap v:true

" Font weight tuning, possible valuaes are 100..900
FVimFontNormalWeight 400
FVimFontBoldWeight 700

" Font debugging -- draw bounds around each glyph
FVimFontDrawBounds v:true

" UI options (all default to v:false)
FVimUIMultiGrid v:false     " per-window grid system -- work in progress
FVimUIPopupMenu v:true      " external popup menu
FVimUITabLine v:false       " external tabline -- not implemented
FVimUICmdLine v:false       " external cmdline -- not implemented
FVimUIWildMenu v:false      " external wildmenu -- not implemented
FVimUIMessages v:false      " external messages -- not implemented
FVimUITermColors v:false    " not implemented
FVimUIHlState v:false       " not implemented

" Detach from a remote session without killing the server
" If this command is executed on a standalone instance,
" the embedded process will be terminated anyway.
FVimDetach

Startup options

Usage: FVim [FVim-args] [NeoVim-args]

FVim-args:

    =========================== Client options ===================================

    --ssh user@host             Start NeoVim remotely over ssh
    --wsl                       Start NeoVim in WSL
    --nvim path-to-program      Use an alternative nvim program

    --connect target            Connect to a remote NeoVim backend. The target
                                can be an IP endpoint (127.0.0.1:9527), or a
                                Unix socket address (/tmp/path/to/socket), or a
                                Windows named pipe (PipeName).

    --setup                     Registers FVim as a text editor, and updates
                                file association and icons. Requires UAC
                                elevation on Windows.
    --uninstall                 Unregisters FVim as a text editor, and removes
                                file association and icons. Requires UAC
                                elevation on Windows.

    =========================== Daemon options ===================================

    --daemon                    Start a daemon that ensures that a NeoVim
                                backend is always listening in the background.
                                The backend will be respawn on exit.

    --daemonPort port           Set the Tcp listening port of the daemon.
                                When this option is not given, Tcp server is
                                disabled.

    --daemonPipe                Override the named pipe address of the daemon.
                                When this option is not given, defaults to
                                '/tmp/FVimServer'

    --tryDaemon                 First try to connect to a local daemon. If not
                                found, start an embedded NeoVim instance.

    =========================== Debug options ====================================

    --trace-to-stdout           Trace to stdout.
    --trace-to-file             Trace to a file.
    --trace-patterns            Filter trace output by a list of keyword strings


The FVim arguments will be consumed and filtered before the rest are passed to NeoVim.

Goals

  • Input method support built from scratch (wip)
  • Multi-grid <=> Multi-window mapping (multiple windows in the OS sense, not Vim "frames")
  • Extend with XAML -- UI widgets as NeoVim plugins

Non-Goals

  • Electron ecosystem integration
You can’t perform that action at this time.