/win-vind

You can operate Windows with key bindings like Vim.

Primary LanguageC++MIT LicenseMIT

win-vind

Vim Key Binder for Windows

Coverity Scan Build Status

Description

win-vind provides a lightweight hybrid UI system of CUI and GUI for Windows. And everything is inspired by Vim and its plugins. Simply put, it is a Vim-oriented toy box consisting of various useful features.

Features

System Design

  • Fast binding system
  • Vim-like mode management
  • .vimrc style configuration
  • Running in user permission
  • Oneshot use for Vim or AHK (e.g. $ win-vind -f easy_click_left)

Top Features

  • GUI operation without mouse
  • Vim emulation everywhere
  • Process launcher like :!vim ~/.vimrc on resident command line
  • Low-level key mapping (e.g. Capslock -> Ctrl)
  • Keystroke macros
  • Tiling window manager
  • Hinting feature like Vimium or EasyMotion for GUI.

Top Feature Demo

Macro Feature Demo

macro-demo.mp4

Installation

Chocolatey Version

win-vind supports installation using Chocolatey. To install win-vind with Chocolatey, run the following command from the command line or from PowerShell.

$ choco install win-vind

winget Version

winget is also supported. To install the package, run the following command from your command line.

$ winget install win-vind

Installer Version

Portable Version

Usage

You can refer to the installation and quick tutorial in Usage - win-vind.

.vindrc samples

You can configure it in .vimrc style. What you can do in .vindrc is switch options, set parameters, remap low-level keys, and define function bindings.

" ------------ Example ------------
" Virtual command line options
set shell = cmd
set cmd_fontsize = 14
set cmd_roughpos = LowerLeft
set cmd_maxchar = 100

" Enable block style caret
set blockstylecaret
set blockstylecaret_mode = solid

" Low-level key mapping in resident mode
rmap <capslock> <ctrl>

" Define bindings in GUI Normal mode
gnnoremap <c-h> select_left_window
gnnoremap <c-l> select_right_window
gnnoremap <c-k> select_upper_window
gnnoremap <c-j> select_lower_window

" Define bindings in insert mode
imap <capslock> <f16>
inoremap <f16> to_edi_normal

imap <ralt> <f17>
inoremap <f17> easy_click_left

imap <app> <f18>
inoremap <f18> window_resizer

The Functions page lists all supported functions, the Options document lists parameters and useful extensions, and the Keyword List contains keyword notations for writing .vindrc. If you want to know the default bindings, refer to Default Mappings.

Known Issues

  • EasyClick does not seem to work properly for some applications on older Windows 10 before 1803. The cause is not known, but we have confirmed that it works after 1909. (#11)

  • Windows 10/11 Single Language does not seem to be able to map toggle keys such as <Capslock>. (#40)

  • If you want to use word motion (e.g. w, B, e) in MS Office Word, it is recommended to disable Use smart paragraph selection.

How to build

Preparation

The dependencies required for the build are installed locally in the project directory. The system is not affected.

$ ./tools/setup_libs.bat -msvc 64

Debug

$ cmake -B debug -G "Visual Studio 16 2019" .
$ cmake --build debug
$ ./debug/Debug/win-vind.exe

Release

$ cmake -B release -DCMAKE_BUILD_TYPE=Release -G "Visual Studio 16 2019" .
$ cmake --build release --config Release
$ ./debug/Release/win-vind.exe

If you want to build with MinGW or create an installer, see here.

Contribute

If you would like to contribute to win-vind, see CONTRIBUTING.md.

The project is managed with GitHub Projects.

Related Pages

Similar Projects

License

This software is provided by MIT License.

Author

  • pit-ray