Skip to content
This project group all the things needed to make Vim more accessible for people.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Creative Commons License License GPLv3

Vim accessible for every human

(Cats doesn't need Vim, they only need a non-hostile environment.)

This project group all the things needed to make Vim more accessible for people.

  • Remanent keys : for keeping your pinkies safe

      " Map `<Space>` to be the remanent key for Shift, and `<Space><Space>` to be the remanent key for Ctrl.
      " ['n'] is for normal mode
       let g:sticky_map = {
        \'shift': { '<Space>':['n'] },
        \'ctrl': { '<Space><Space>':['n'] },
  • Documented keymapping : to force yourself to document your keybind and allow to create tutorials
    In short, it can be written like that :

    " Here 8 simples mapping in 2 lines
    " Keys     ''Description ''        Vim action                      % modes
    <C-l> <A-l> "Enter command line"   :                               % I n v
    <A-Right>   "Compl. filename " pumvisible()?"<Cr>":"%1%<C-x><C-f>" % i -n-%i%
    " Want more ? you forgot your shortcuts ? do you want to see the list.
    " You can ':call KeyMap#PrintCurrentLayer()',
    " But why not grouping shortcuts by categories ?
    " -> a tutorial mode for <C-w>
    <C-w>       "C-w"                  <OneShot=wincmd>                %  n
    T           ":Move to a new tab"   T                               %
    " -> an emacs like layer
    <C-x>       "~Emacs C-x"           <Layer>                         % n
    <C-f>       ":Search file"         <ExitLayer>:e! %:p:h/*          % n
    See the details about keymapping Every lines above are a short format the following lines:
    " <C-l> enter in command line mode from insert, normal, and visual mode
    " cal ..Map('Description', keys, action, modes_and_things_related_to_the_mode)
    cal KeyMap#Map('Enter command line' , ['<C-l>','<A-l>']   , ':' , ['I','n','v'])
    " I is for insert mode, to use a one-shot normal mode key. (equivalent to '<C-o>:')
    " <A-Right> complete filename in insert and normal mode
    " 'i' is for insert mode 
    " '-n-%i%'  is for normal mode; but force the use of <C-x><C-f> in insert mode
    "           another way to say it : '%1%<C-x><C-f>' is replaced by 'i<C-x><C-f>'
    cal KeyMap#Map('Complete filename' , '<A-Right>' , 'pumvisible()? "<Cr>":"%1%<C-x><C-f>"'   , ['i' , '-n-%i%'])
    " Following example is usefull for re-discovering keys
    " When you hit <C-w>, a window with 'T -> Move to a new tab' is shown
    " If you hit 'T' then ':wincmd T' is applied
    " Too, if you hit 'w' then ':wincmd w' is applied (no need to document everything)
    cal KeyMap#Map('C-w'            , '<C-w>' , "<OneShot=wincmd>"  , ['n'])
    cal KeyMap#Map(':Move to a new tab' , 'T'       , "T" , [])
    " Here a way to have a thousand of keybinds
    " It define a new keybind temporary layer,
    " '~' just say to not show the window which shows activated keybinds
    cal KeyMap#Map('~Emacs C-x'    , '<C-x>' , '<Layer>' , ['n'])
    cal KeyMap#Map(':Search file'    , '<C-f>' , '<ExitLayer>:e! %:p:h/*' , ['n'])

  • Text to Speech dispatcher : keybinds and commands to make Vim speak
    (require speech-dispatcher on linux - if you use Orca it shall be already installed)

    "let g:speak_lang = "fr" " automatically set  by detecting the spell lang
    "let g:speak_voice_type = "female1" " default

    :SpeakLine speak (send text at) the current line (to speech-dispatcher).
    :SpeakWORD speak the following word in the text; intended to be followed by W in order to read text word by word.

    Anyway, in a GVim just hit <C-s> (Ctrl + s) to toggle a screen reader mode.


Get the repository.

# 'ui' is abitrary chosen for 'user interface'
mkdir -p ~/.vim/pack/ui/start
git clone ~/.vim/pack/ui/start/accessibility

" Examples
let mapleader=","
KeyMap $VIMPLUGINS/vim-accessibility/doc/samples/common.vimkm
KeyMap $VIMPLUGINS/vim-accessibility/doc/samples/bepo.vimkm
My Vim doesn't support +packages If you have an old version of Vim (< 8), it is useless to create `~/.vim/pack/`. Just use the path where you install your plugins.
" let $VIMPLUGINS = <Path to directory containing your plugins>
" [Optional]
" This allows to access to documentation and some syntax sugar.
" Add to runtime path
set rtp+=$VIMPLUGINS/vim-accessibility
" Activate plugins
filetype indent plugin on

" [Required]
" Given plugins commands are only usable after initialization
" Sourcing the files, ensure KeyMap is known.
so $VIMPLUGINS/vim-accessibility/loader.vim
" Examples
let mapleader=","
KeyMap $VIMPLUGINS/vim-accessibility/doc/samples/common.vimkm
KeyMap $VIMPLUGINS/vim-accessibility/doc/samples/bepo.vimkm


Vim is distributed under GPL-compatible Charityware License.
The content of this project itself is licensed under the Creative Commons Attribution-ShareAlike 4.0 license,
and source code contained in this repository is licensed under the GPLv3 license.

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.