# FakeVim **Repository Path**: flydilong/FakeVim ## Basic Information - **Project Name**: FakeVim - **Description**: No description available - **Primary Language**: Unknown - **License**: LGPL-2.1 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-03-10 - **Last Updated**: 2021-03-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README FakeVim ======= FakeVim is library to emulate Vim in QTextEdit, QPlainTextEdit and possibly other Qt widgets. Build ----- To build the library and simple example editor (in `example` directory), run following commands. qmake make Preferably use **CMake to install** the library. cmake -DCMAKE_INSTALL_PREFIX=/usr/local . make install Build and run **example with **QMake**: cd example qmake && make ./example Build and run **example with **CMake**: cd example fakevim_DIR=/usr/local/lib/cmake/fakevim cmake && make ./fakevim_example Build and run **tests with QMake**: cd tests qmake && make ./tests Build and run **tests with CMake**: cd tests fakevim_DIR=/usr/local/lib/cmake/fakevim cmake && make ./fakevim_tests Supported Features ------------------ Most of supported commands can be followed by motion command or executed in visual mode, work with registers or can be prefixed with number of repetitions. Here is list of emulated commands with description where it can diverge from Vim in functionality. ### Modes * normal * insert and replace * visual * command line (`:`) ### Normal and Visual Modes * basic movement -- `h`/`j`/`k`/`l`, ``, ``, ``, ``, `gg`, `G`, `0`, `^`, `$` etc. * word movement -- `w`, `e`, `b` etc. * "inner/a" movement -- `ciw`, `3daw`, `ya{` etc. * `f`, `t` movement * `[`, `]` movement * `{`, `}` -- paragraph movement * delete/change/yank/paste with register * undo/redo * ``, `` -- increase or decrease number in decimal/octal/hexadecimal format (e.g. `128` on or before "0x0ff" changes it to "0x17f") * `.` -- repeat last change * `/search`, `?search`, `*`, `#`, `n`, `N` -- most of regular expression syntax used in Vim except `\<` and `\>` just is the same as `\b` in QRegExp * `@`, `q` (macro recording, execution) -- special keys are saved as `` * marks * `gv` -- last visual selection; can differ if text is edited around it * indentation -- `=`, `<<`, `>>` etc. with movement, count and in visual mode * "to upper/lower" -- `~`, `gU`, `gu` etc. * `i`, `a`, `o`, `I`, `A`, `O` -- enter insert mode * scroll window -- `zt`, `zb`, `zz` etc. * wrap line movement -- `gj`, `gk`, `g0`, `g^`, `g$` ### Command Line Mode * `:map`, `:unmap`, `:inoremap` etc. * `:source` -- very basic line-by-line sourcing of vimrc files * `:substitute` -- substitute expression in range * `:'<,'>!cmd` -- filter through an external command (e.g. sort lines in file with `:%!sort`) * `:.!cmd` -- insert standard output of an external command * `:read` * `:yank`, `:delete`, `:change` * `:move`, `:join` * `:20` -- go to address * `:history` * `:registers`, `:display` * `:nohlsearch` * `:undo`, `:redo` * `:normal` * `:<`, `:>` ### Insert Mode * `` -- execute single command and return to insert mode * `` -- insert raw character * `` -- toggle replace mode ### Options (:set ...) * `autoindent` * `clipboard` * `backspace` * `expandtab` * `hlsearch` * `ignorecase` * `incsearch` * `indent` * `iskeyword` * `scrolloff` * `shiftwidth` * `showcmd` * `smartcase` * `smartindent` * `smarttab` * `startofline` * `tabstop` * `tildeop` * `wrapscan` Example Vimrc ------------- " highlight matched set hlsearch " case insensitive search set ignorecase set smartcase " search while typing set incsearch " wrap-around when searching set wrapscan " show pressed keys in lower right corner set showcmd " tab -> spaces set expandtab set tabstop=4 set shiftwidth=4 " keep a 5 line buffer for the cursor from top/bottom of window set scrolloff=5 " X11 clipboard set clipboard=unnamed " use ~ with movement set tildeop " mappings nnoremap ; : inoremap jj " clear highlighted search term on space noremap :nohls " reselect visual block after indent vnoremap < >gv " MOVE LINE/BLOCK nnoremap :m+== nnoremap :m-2== inoremap :m+==gi inoremap :m-2==gi vnoremap :m'>+gv=gv vnoremap :m-2gv=gv Implementation -------------- There are appropriate signals emitted for command which has to be processed by the underlying editor widget (folds, windows, tabs, command line, messages etc.). See example in `example/` directory or implementation of FakeVim plugin in Qt Creator IDE. Python Bindings --------------- To install Python bindings for FakeVim see "python/README.md" file.