
如果你正使用vim easymotion快速定位插件 ,或者 Vimium Chrome插件。那么对于这款windows下的软件就会很好理解 ,它可以像Vim easymotion 一样通过绑定按键来操作Windows。
知识库
https://pit-ray.github.io/win-vind/cheat_sheet/
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 ------------
"EasyClick 字体设置. 改为类似Vimium的黑黄配色
set easyclick_fontsize=37
set easyclick_fontweight=800
set easyclick_fontname = MSYH "微软雅黑字体
set easyclick_fontcolor=#000000
set easyclick_bgcolor=#fae26b
" 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.
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.
Note
:exit
is the recommended termination.<F8> + <F9>
is safe forced termination.- win-vind could not operate some windows given high-rank authorization than itself. For example, if you start Task Manager having the highest authorization and select its window, you cannot move, click or scroll the mouse cursor by win-vind. If you want to operate all windows, I recommend giving win-vind the administrator authorization. (Please use Task Scheduler).
快速教程
1. Mode Transition
The basic concept is the same as Vim, but there are two Normal Mode and two Visual Mode, and Resident Mode.
Default mode layer overview
两组模式: GUI模式和编辑模式。GUI模式允许我们控制窗口和鼠标光标等。后者编辑模式允许我们在网页、Microsoft Office Word等的输入形式中模拟Vim。
There are two groups: GUI mode and Editor mode. The former allows us to control windows and mouse cursor, etc. The latter allows us to emulate Vim in input forms of web pages, Microsoft Office Word, etc.
Concepts of GUI Mode and Editor Mode
驻留模式是一种疏散模式,以防止绑定与快捷键在蒸汽或使用Vim时使用快捷键碰撞。例如,如果您已将<Esc>添加到插入模式的keymap以进行忠实的Vim仿真,则可以使用驻留模式来防止Vim的<Esc>调用Win-Vind。
Resident Mode is an evacuation mode to prevent bindings from being collisions with shortcut keys while gaming on Steam or using Vim. For example, if you have added <Esc>
into the keymap of Insert Mode for faithful Vim emulation, you can use Resident Mode to prevent win-vind from being called by Vim’s <Esc>
.
Insert Mode and Resident Mode pass all key messages to Windows, while GUI Normal Mode, GUI Visual Mode, Edi Normal Mode, Edi Visual Mode, and Command Mode block them.
Visual Concepts of Mode
After the boot, win-vind will be in Insert Mode. Let’s make transitions of mode!
2. GUI Operation and Window Operation
- Switch to GUI Normal Mode with
<Esc-Left>
. - Please inputs
:!mspaint
to launch Microsoft Paint. - You can call EasyClick with
FF
.EasyClick Demo
- Let’s select windows with
<C-w>h
or<C-w>l
. - Please select Microsoft Paint and close it with
:close
.
3. Customize win-vind
win-vind uses Run Commands style configuration method. If you’ve ever written a .vimrc
, it’s easy to make it your win-vind.
Generally, there are three levels of key mapping: key2key, keyset2keyset, and cmd2cmd. key2key assigns one key to another. keyset2keyset assigns one key combination to another, such as <c-s>
to <m-h>
. cmd2cmd is a mapping scheme that generates another command in response to a sequential command input, such as qq
to <c-w>e
.
The keyset syntax uses the same expression as in Vim, where keys are connected by -
between <
and >
. However, there is no limit to the number of combinations, and you can connect as many as you like. (e.g. <Esc-b-c-a-d>
).
The following commands are supported. By the way, {
and }
themselves are not part of the syntax.
Syntax | Effects |
---|---|
set {option} |
Set the value of the option to true. |
set no{option} |
Set the value of the option to false. |
set {option} = {val} |
Set a value of the option. The value can be a string or a number that allows floating points. The string does not need quotation marks, and any character after the non-white character will be handled as the value. White spaces at both ends of the equals sign are ignored. |
{mode}map {in-key} {out-key} |
It performs cmd2cmd mapping with low-level. The defined low-level map is actually propagated to Windows as keystroke. By the way, only the key2keyset format can synchronize the key state without delay. |
{mode}noremap {in-cmd} {func-id} |
It defines the map to call the function. |
{mode}noremap {in-keyset} {out-keyset} |
It performs cmd2cmd mapping in win-vind scope. However, since the {func-id} definition has higher priority than its syntax, it may result in exactly one level of recursive mapping. |
{mode}unmap {in-cmd} |
Remove the map corresponding to the {in-cmd} . |
{mode}mapclear |
Delete all maps. |
command {in-cmd} {func-id} |
It defines the command to call the function. |
delcommand {in-cmd} |
Remove the command corresponding to the {in-cmd} . |
comclear |
delete all commands. |
source |
Load another .vindrc. Either fill in the path to the .vindrc or use the syntax user/repo to load the .vindrc in the root directory of the GitHub repository. |
{mode}
is the Mode Prefix. And only UTF-8 format is supported for .vindrc
.
Let’s do the last tutorial!
- Go to Insert Mode.
- This time, we will try Instant GUI Normal Mode with
<F8>
. It allows us to temporarily switch to the GUI Normal Mode.Instant GUI Normal Demo
- Open your
.vindrc
with:e
.Edit .vindrc Demo
- Write following commands into
.vindrc
.set cmd_fontname = Times New Roman imap <Capslock> <ctrl> inoremap <Alt> easy_click_left imap <ctrl-a> Vim is the best editor. gnnoremap <ctrl-1> :!notepad<cr>
- If you done, try reloading
.vindrc
with:source
of win-vind. (No arguments are needed.)Reload Demo
- In Insert Mode, you can use
<Capslock>
instead of<Ctrl>
and call EasyClick with a single<Alt>
. And, you can insert a fixed form text with pressing Ctrl and A at the same time. In GUI Normal Mode, pressing Ctrl and 1 at the same time will open Notepad.
特点
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
Download
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
Note
-
If you want to use word motion (e.g.
w
,B
,e
) in MS Office Word, it is recommended to disableUse smart paragraph selection
.
Insert Mode
Bindings | ID |
---|---|
<Esc-Down> |
to_resident |
<Esc-Left> |
to_gui_normal |
<Esc-Right> |
to_edi_normal |
<F8> |
to_instant_gui_normal |
Resident Mode
Bindings | ID |
---|---|
<Esc-Left> |
to_gui_normal |
<Esc-Right> |
to_edi_normal |
<Esc-Up> |
to_insert |
GUI Normal Mode
Mode
Bindings | ID |
---|---|
: |
to_command |
<Esc-Down> |
to_resident |
I , <Esc-Right> |
to_edi_normal |
i |
to_insert |
v |
to_gui_visual |
Mouse
Bindings | ID |
---|---|
$ , <End> |
jump_cursor_to_right |
0 , ^ , <Home> |
jump_cursor_to_left |
<C-b> |
scroll_up_onepage |
<C-d> |
scroll_down_halfpage |
<C-e> , <C-j> |
scroll_down |
<C-f> |
scroll_down_onepage |
<C-u> |
scroll_up_halfpage |
<C-y> , <C-k> |
scroll_up |
FF , Fo |
easy_click_left |
Fa |
easy_click_right |
Fh |
easy_click_hover |
Fm |
easy_click_mid |
G |
jump_cursor_to_bottom |
M |
jump_cursor_to_vcenter |
a , A |
click_right |
f |
jump_cursor_with_keybrd_layout |
gg |
jump_cursor_to_top |
gm |
jump_cursor_to_hcenter |
h , <BS> , <Left> |
move_cursor_left |
j , + , <Down> |
move_cursor_down |
k , - , <Up> |
move_cursor_up |
l , <Space> , <Right> |
move_cursor_right |
o , O |
click_left |
t |
jump_cursor_to_active_window |
zH |
scroll_left_halfpage |
zL |
scroll_right_halfpage |
zh , <C-h> |
scroll_left |
zl , <C-l> |
scroll_right |
Hotkey
Bindings | ID |
---|---|
/ , ? |
search_pattern |
<C-r> |
redo |
<gt> |
goto_next_page |
<lt> |
goto_prev_page |
<win> |
open_startmenu |
V |
select_all |
X |
hotkey_backspace |
dd , D |
hotkey_cut |
p , P |
hotkey_paste |
u , U |
undo |
x , <Del> |
hotkey_delete |
y , yy , Y |
hotkey_copy |
Virtual Desktop
Bindings | ID |
---|---|
<C-v>h |
switch_to_left_vdesktop |
<C-v>l |
switch_to_right_vdesktop |
<C-v>n |
create_new_vdesktop |
<C-v>q |
close_current_vdesktop |
<C-v>s |
taskview |
Tab
Bindings | ID |
---|---|
gT |
switch_to_left_tab |
gt |
switch_to_right_tab |
Window
Bindings | ID |
---|---|
<C-w>+ |
increase_window_height |
<C-w>- |
decrease_window_height |
<C-w><gt> |
increase_window_width |
<C-w><lt> |
decrease_window_width |
<C-w>= |
arrange_windows |
<C-w>H , <C-w><Left> |
snap_current_window_to_left |
<C-w>J |
snap_current_window_to_bottom |
<C-w>K |
snap_current_window_to_top |
<C-w>L , <C-w><Right> |
snap_current_window_to_right |
<C-w>R |
rotate_windows_in_reverse |
<C-w>d |
minimize_current_window |
<C-w>e |
window_resizer |
<C-w>h |
select_left_window |
<C-w>j |
select_lower_window |
<C-w>k |
select_upper_window |
<C-w>l |
select_right_window |
<C-w>n |
open_new_window |
<C-w>q , <C-w>c |
close_current_window |
<C-w>r |
rotate_windows |
<C-w>s |
switch_window |
<C-w>u |
maximize_current_window |
<C-w>x |
exchange_window_with_nearest |
GUI Visual Mode
Mode
Bindings | ID |
---|---|
<Esc-Down> |
to_resident |
<Esc-Left> |
to_gui_normal |
Mouse
Bindings | ID |
---|---|
$ , <End> |
jump_cursor_to_right |
0 , ^ , <Home> |
jump_cursor_to_left |
<C-b> |
scroll_up_onepage |
<C-d> |
scroll_down_halfpage |
<C-e> , <C-j> |
scroll_down |
<C-f> |
scroll_down_onepage |
<C-u> |
scroll_up_halfpage |
<C-y> , <C-k> |
scroll_up |
G |
jump_cursor_to_bottom |
M |
jump_cursor_to_vcenter |
gg |
jump_cursor_to_top |
gm |
jump_cursor_to_hcenter |
h , <BS> , <Left> |
move_cursor_left |
j , + , <Down> |
move_cursor_down |
k , - , <Up> |
move_cursor_up |
l , <Space> , <Right> |
move_cursor_right |
zH |
scroll_left_halfpage |
zL |
scroll_right_halfpage |
zh , <C-h> |
scroll_left |
zl , <C-l> |
scroll_right |
Hotkey
Bindings | ID |
---|---|
X |
hotkey_backspace |
dd , D |
hotkey_cut |
p , P |
hotkey_paste |
x , <Del> |
hotkey_delete |
y , yy , Y |
hotkey_copy |
Editor Normal Mode
Mode
Bindings | ID |
---|---|
: |
to_command |
<Esc-Down> |
to_resident |
<Esc-Left> |
to_gui_normal |
V |
to_edi_visual_line |
i |
to_insert |
v |
to_edi_visual |
Mouse
Bindings | ID |
---|---|
<C-b> |
scroll_up_onepage |
<C-d> |
scroll_down_halfpage |
<C-e> , <C-j> |
scroll_down |
<C-f> |
scroll_down_onepage |
<C-u> |
scroll_up_halfpage |
<C-y> , <C-k> |
scroll_up |
zH |
scroll_left_halfpage |
zL |
scroll_right_halfpage |
zh , <C-h> |
scroll_left |
zl , <C-l> |
scroll_right |
Hotkey
Bindings | ID |
---|---|
/ , ? |
search_pattern |
<C-r> |
redo |
u , U |
undo |
Tab
Bindings | ID |
---|---|
gT |
switch_to_left_tab |
gt |
switch_to_right_tab |
Vim Emulation
Mode
Bindings | ID |
---|---|
A |
to_insert_EOL |
I , gI |
to_insert_BOL |
O |
to_insert_nlabove |
a |
to_insert_append |
o |
to_insert_nlbelow |
Move
Bindings | ID |
---|---|
h , <C-h> , <BS> , <Left> |
move_caret_left |
j , + , gj , <C-n> , <Down> , <Enter> , <C-m> |
move_caret_down |
k , - , gk , <C-p> , <Up> |
move_caret_up |
l , <Space> , <Right> |
move_caret_right |
w |
move_caret_word_forward (Deprecated in 4.4) |
W |
move_caret_nonblank_word_forward (Deprecated in 4.4) |
b |
move_caret_word_backward (Deprecated in 4.4) |
B |
move_caret_nonblank_word_backward (Deprecated in 4.4) |
w |
move_fwd_word (in 4.4) |
b |
move_bck_word (in 4.4) |
W |
move_fwd_bigword (in 4.4) |
B |
move_bck_bigword (in 4.4) |
e |
move_end_word (in 4.4) |
E |
move_end_bigword (in 4.4) |
ge |
move_bckend_word (in 4.4) |
gE |
move_bckend_bigword (in 4.4) |
Jump
Bindings | ID |
---|---|
$ , <End> , g$ |
jump_caret_to_EOL |
0 , <Home> , g0 |
jump_caret_to_BOL |
G |
jump_caret_to_EOF |
gg |
jump_caret_to_BOF |
Edit
Bindings | ID |
---|---|
C |
change_until_EOL |
D |
delete_line_until_EOL |
J |
join_next_line |
P |
put_before |
R |
replace_sequence |
X |
delete_before |
c |
change_with_motion |
cc , S |
change_line |
d |
delete_with_motion |
dd |
delete_line |
p |
put_after |
r |
replace_char |
s |
change_char |
x , <Del> |
delete_after |
y |
yank_with_motion |
yy , Y |
yank_line |
~ |
switch_char_case |
Editor Visual Mode
Mode
Bindings | ID |
---|---|
: |
to_command |
<Esc-Down> |
to_resident |
<Esc-Left> |
to_gui_normal |
<Esc-Right> |
to_edi_normal |
Mouse
Bindings | ID |
---|---|
<C-b> |
scroll_up_onepage |
<C-d> |
scroll_down_halfpage |
<C-e> , <C-j> |
scroll_down |
<C-f> |
scroll_down_onepage |
<C-u> |
scroll_up_halfpage |
<C-y> , <C-k> |
scroll_up |
zH |
scroll_left_halfpage |
zL |
scroll_right_halfpage |
zh , <C-h> |
scroll_left |
zl , <C-l> |
scroll_right |
Vim Emulation
Move
Bindings | ID |
---|---|
h , <C-h> , <BS> , <Left> |
move_caret_left |
j , + , gj , <C-n> , <Down> , <Enter> , <C-m> |
move_caret_down |
k , - , gk , <C-p> , <Up> |
move_caret_up |
l , <Space> , <Right> |
move_caret_right |
w |
move_caret_word_forward (Deprecated in 4.4) |
W |
move_caret_nonblank_word_forward (Deprecated in 4.4) |
b |
move_caret_word_backward (Deprecated in 4.4) |
B |
move_caret_nonblank_word_backward (Deprecated in 4.4) |
w |
move_fwd_word_simple (in 4.4) |
b |
move_bck_word_simple (in 4.4) |
Jump
Bindings | ID |
---|---|
$ , <End> , g$ |
jump_caret_to_EOL |
0 , <Home> , g0 |
jump_caret_to_BOL |
G |
jump_caret_to_EOF |
gg |
jump_caret_to_BOF |
Edit
Bindings | ID |
---|---|
c , s , S |
change_highlight_text |
d , x , X |
delete_highlight_text |
y |
yank_highlight_text |
Command Mode
Mode
Command | ID |
---|---|
::guinormal , :gn |
to_gui_normal |
:edinormal , :en |
to_edi_normal |
:edivisual , :ev |
to_edi_visual |
:edivisualline , :evl |
to_edi_visual_line |
:guivisual , :gv |
to_gui_visual |
:insert , :i |
to_insert |
:resident |
to_resident |
Virtual Desktop
Command | ID |
---|---|
:closev |
close_current_vdesktop |
:taskview |
taskview |
:vdnext |
switch_to_right_vdesktop |
:vdprev |
switch_to_left_vdesktop |
Tab
Command | ID |
---|---|
:q , :q! , :tabclose |
close_current_tab |
:tabnew |
open_new_tab |
:tabnext |
switch_to_right_tab |
:tabprevious |
switch_to_left_tab |
Window
Command | ID |
---|---|
:arrange |
arrange_windows |
:bsplit , :bsp |
snap_current_window_to_bottom |
:cl , :close |
close_current_window |
:exchange |
exchange_window_with_nearest |
:lsplit , :lsp |
snap_current_window_to_left |
:max , :on , :only |
maximize_current_window |
:min , :hi , :hide |
minimize_current_window |
:new |
open_new_window |
:reload |
reload_current_window |
:rerotate , :rerot |
rotate_windows_in_reverse |
:resize +<num> , :res +<num> |
increase_window_height |
:resize -<num> , :res -<num> |
decrease_window_height |
:resize <num> , :res <num> |
resize_window_height |
:resizer , :winresizer |
window_resizer |
:rotate , :rot |
rotate_windows |
:rsplit , :rsp |
snap_current_window_to_right |
:sp , :split |
open_new_window_with_hsplit |
:sw , :switch |
switch_window |
:tsplit , :tsp |
snap_current_window_to_top |
:vertical resize +<num> , :vert res +<num> |
increase_window_width |
:vertical resize -<num> , :vert res -<num> |
decrease_window_width |
:vertical resize <num> , :vert res <num> |
resize_window_width |
:vs , :vsplit |
open_new_window_with_vsplit |
File
Command | ID |
---|---|
:mkdir<any> , :md<any> |
makedir |
Process
Command | ID |
---|---|
:!<any> |
start_external |
:e <any> , :edit <any> , :execute <any> |
execute |
:exit |
exit_config_gui |
:sh , :shell , :terminal , :term |
start_shell |
Hotkey
Command | ID |
---|---|
:backward |
backward_ui_navigation |
:decide |
decide_focused_ui_object |
:ex , :explorer |
start_explorer |
:find , :open |
open |
:forward |
forward_ui_navigation |
:w |
save |
:win , :start |
open_startmenu |
Option
Command | ID |
---|---|
:target |
enable_targeting_of_dedicate_to_window |
:untarget |
disable_targeting_of_dedicate_to_window |
System Command
Command | ID |
---|---|
:comclear |
system_command_comclear |
:command<any> |
system_command_command |
:delcommand<any> |
system_command_delcommand |
:set<any> |
system_command_set |
:source<any> |
system_command_source |
:{mode-prefix}map<any> |
system_command_map |
:{mode-prefix}mapclear |
system_command_mapclear |
:{mode-prefix}noremap<any> |
system_command_noremap |
:{mode-prefix}unmap<any> |
system_command_unmap |
Vim Emulation
Command | ID |
---|---|
:+<num> |
move_caret_down |
:-<num> |
move_caret_up |
:<num> |
jump_caret_to_BOF |
Default Mappings End
Related Pages
Similar Projects
License
This software is provided by MIT License.
Author
- pit-ray