diff --git a/content/docs/preferences/code-edit/_index.md b/content/docs/preferences/code-editing/_index.md
similarity index 75%
rename from content/docs/preferences/code-edit/_index.md
rename to content/docs/preferences/code-editing/_index.md
index cef820c5a..1b4957e50 100644
--- a/content/docs/preferences/code-edit/_index.md
+++ b/content/docs/preferences/code-editing/_index.md
@@ -1,5 +1,5 @@
---
-title: "Code Edit"
+title: "Code Editing"
weight: 10
---
@@ -41,3 +41,15 @@ You can choose the parentheses to jump out by Tab in the [Parentheses](../langua
When you insert an indent, insert spaces instead of a tab character. The number of spaces is equal to the [Tab Width](#tab-width).
Note that this won't replace the existing tab characters. In [Auto Indent](#auto-indent), the tab characters in the old line will remain in the new line (however, the new indent inserted after `{` will be spaces).
+
+### Highlight Current line
+
+If enabled, the current line number will be highlighted from the rest of the lines. In vim mode current line is never highlighted.
+
+### Enable Vim emulation
+
+If enabled, code editor will emulate vim behaviour. In vim emulation, Control Key such as Ctrl+N will not be intercepted by CP Editor but by Code Editor. We provide some custom commands that can perform various tasks like opening new tab, running testcases etc. [Here](../general/_index.md#custom-vim-commands) is a list of all supported custom vim commands.
+
+### Vim configuration
+
+The configuration to use in vim mode. The list of all supported vim commands are listed [here](../general/_index.md#vim-commands)
diff --git a/content/docs/preferences/code-edit/_index.ru.md b/content/docs/preferences/code-editing/_index.ru.md
similarity index 99%
rename from content/docs/preferences/code-edit/_index.ru.md
rename to content/docs/preferences/code-editing/_index.ru.md
index d605fac8c..27de7e243 100644
--- a/content/docs/preferences/code-edit/_index.ru.md
+++ b/content/docs/preferences/code-editing/_index.ru.md
@@ -1,5 +1,5 @@
---
-title: "Code Edit"
+title: "Code Editing"
weight: 10
---
diff --git a/content/docs/preferences/code-edit/_index.zh.md b/content/docs/preferences/code-editing/_index.zh.md
similarity index 100%
rename from content/docs/preferences/code-edit/_index.zh.md
rename to content/docs/preferences/code-editing/_index.zh.md
diff --git a/content/docs/preferences/general/_index.md b/content/docs/preferences/general/_index.md
index 31f3bf379..e2f62f2c8 100644
--- a/content/docs/preferences/general/_index.md
+++ b/content/docs/preferences/general/_index.md
@@ -18,3 +18,152 @@ The [regular expression](https://en.wikipedia.org/wiki/Regular_expression) is us
You can find many online regex cources, for example: .
In CP Editor, you can use `\1`, `\2`, etc. for the content of the first/second capture group in the replacement patterns.
+
+### Vim Commands
+
+#### 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
+
+```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
+```
+
+### Custom Vim commands
+
+In this section we present a list of all custom vim commands that are supported to perform different operation in CP Editor.
+
+| Command | Shorthand | Description | Usage |
+| :----------: | :-------: | :-----------------------------------------------------------------------------------------------------------------------: | :-------------------------: |
+| `new` | `new` | Opens a new tab, if no langauge is specified, a tab in default editor langauge will open | `new cpp` or `new` |
+| `open` | `opn` | Opens a new file, Only C++/Java/Python files will be opened. Without arguments it is same as open in Action menu. | `open` or `opn ~/cf/a.cpp` |
+| `compile` | `cmp` | Compiles the code, It is like clicking "Compile" button in a tab. | `compile` or `cmp` |
+| `crun` | `crn` | Compiles and run, It is like clicking "Compile and Run" button in a tab. | `crun` or `crn` |
+| `run` | `run` | Run, if no argument is provided all testcases are ran, otherwise nth testcase is ran. Counting includes hidden testcases. | `run` or `run 2` |
+| `drun` | `drn` | Detached run, It is same as clicking "Detached Run" in menu. | `drun` or `drn` |
+| `killall` | `kap` | Kill all process, It is same as clicking "Kill Process" in menu | `killall` or `kap` |
+| `format` | `fmt` | Format Code, It is same as clicking "Format Code" in menu | `format` or `fmt` |
+| `snippet` | `snp` | Open snippet dialog, It is same as clicking "Use Snippets" in menu | `snippet` or `snp` |
+| `vmode` | `vmd` | View mode, Changes the view mode. It can only toggle to "edit" and "split" mode | `vmode edit` or `vmd split` |
+| `preference` | `prf` | Preferences, It is same as clicking "Preference" in menu | `preference` or `prf` |
+| `chlang` | `chl` | Language, It can be used to change the language of a tab. | `chlang cpp` or `chl java` |
+| `clear` | `clr` | Clear Message logger text | `clear` or `clr` |
+| `exit` | `ext` | Exit, It is same as pressing "Quit" in menu. | `exit` or `ext` |
diff --git a/content/docs/preferences/language/_index.md b/content/docs/preferences/language/_index.md
index d73af1390..1e7f19156 100644
--- a/content/docs/preferences/language/_index.md
+++ b/content/docs/preferences/language/_index.md
@@ -142,16 +142,16 @@ When choosing a snippet, you can enter the first few characters of the snippet n
You can set the parentheses settings for each language and each parenthesis.
-Each setting has three states: enable, disable and default. If it's default, it uses the settings in the [Code Edit](../code-edit/_index.md) page. Otherwise, it overwrites the settings in the [Code Edit](../code-edit/_index.md) page.
+Each setting has three states: enable, disable and default. If it's default, it uses the settings in the [Code Editing](../code-editing/_index.md) page. Otherwise, it overwrites the settings in the [Code Editing](../code-editing/_index.md) page.
### Auto Complete
-See [Code Edit/Auto Complete Parentheses](../code-edit/_index.md#auto-complete-parentheses).
+See [Code Editing/Auto Complete Parentheses](../code-editing/_index.md#auto-complete-parentheses).
### Auto Remove
-See [Code Edit/Auto Remove Parentheses](../code-edit/_index.md#auto-remove-parentheses).
+See [Code Editing/Auto Remove Parentheses](../code-editing/_index.md#auto-remove-parentheses).
### Tab Jump Out
-See [Code Edit/Jump out of a parenthesis by pressing Tab](../code-edit/_index.md#jump-out-of-a-parenthesis-by-pressing-tab).
+See [Code Editing/Jump out of a parenthesis by pressing Tab](../code-editing/_index.md#jump-out-of-a-parenthesis-by-pressing-tab).
diff --git a/content/docs/preferences/language/_index.ru.md b/content/docs/preferences/language/_index.ru.md
index 6e21f9432..364c2d0ff 100644
--- a/content/docs/preferences/language/_index.ru.md
+++ b/content/docs/preferences/language/_index.ru.md
@@ -142,16 +142,16 @@ When choosing a snippet, you can enter the first few characters of the snippet n
You can set the parentheses settings for each language and each parenthesis.
-Each setting has three states: enable, disable and default. If it's default, it uses the settings in the [Code Edit](../code-edit/_index.ru.md) page. Otherwise, it overwrites the settings in the [Code Edit](../code-edit/_index.ru.md) page.
+Each setting has three states: enable, disable and default. If it's default, it uses the settings in the [Code Editing](../code-editing/_index.ru.md) page. Otherwise, it overwrites the settings in the [Code Editing](../code-editing/_index.ru.md) page.
### Auto Complete
-See [Code Edit/Auto Complete Parentheses](../code-edit/_index.ru.md#auto-complete-parentheses).
+See [Code Editing/Auto Complete Parentheses](../code-editing/_index.ru.md#auto-complete-parentheses).
### Auto Remove
-See [Code Edit/Auto Remove Parentheses](../code-edit/_index.ru.md#auto-remove-parentheses).
+See [Code Editing/Auto Remove Parentheses](../code-editing/_index.ru.md#auto-remove-parentheses).
### Tab Jump Out
-See [Code Edit/Jump out of a parenthesis by pressing Tab](../code-edit/_index.ru.md#jump-out-of-a-parenthesis-by-pressing-tab).
+See [Code Editing/Jump out of a parenthesis by pressing Tab](../code-editing/_index.ru.md#jump-out-of-a-parenthesis-by-pressing-tab).
diff --git a/content/docs/preferences/language/_index.zh.md b/content/docs/preferences/language/_index.zh.md
index 061f4278a..d812733a3 100644
--- a/content/docs/preferences/language/_index.zh.md
+++ b/content/docs/preferences/language/_index.zh.md
@@ -142,16 +142,16 @@ int main()
你可以为各编程语言设置相应的括号补全选项。
-每个设置有三种状态:开启,关闭或默认。如果处于默认状态,将应用 [代码编辑](../code-edit/_index.zh.md) 中的设置,否则将会使用这里的设置。
+每个设置有三种状态:开启,关闭或默认。如果处于默认状态,将应用 [代码编辑](../code-editing/_index.zh.md) 中的设置,否则将会使用这里的设置。
### 自动补全
-详见 [代码编辑/自动补全括号](../code-edit/_index.zh.md#自动补全括号)。
+详见 [代码编辑/自动补全括号](../code-editing/_index.zh.md#自动补全括号)。
### 自动删除
-详见 [代码编辑/自动删除括号](../code-edit/_index.zh.md#自动删除括号)。
+详见 [代码编辑/自动删除括号](../code-editing/_index.zh.md#自动删除括号)。
### 按 Tab 键跳出
-详见 [代码编辑/在按下 Tab 键时跳出括号](../code-edit/_index.zh.md#在按下-tab-键时跳出括号)。
+详见 [代码编辑/在按下 Tab 键时跳出括号](../code-editing/_index.zh.md#在按下-tab-键时跳出括号)。
diff --git a/content/docs/tips/_index.md b/content/docs/tips/_index.md
index dead37169..f7c881b57 100644
--- a/content/docs/tips/_index.md
+++ b/content/docs/tips/_index.md
@@ -14,6 +14,12 @@ You can use Ctlr+Tab and Ctlr+Shift+Tab to go through the
Besides the shortcuts in the menu, you can use the [Read-only Key Bindings](https://doc.qt.io/qt-5/qtextedit.html#read-only-key-bindings) and the [Editing Key Bindings](https://doc.qt.io/qt-5/qtextedit.html#editing-key-bindings). There are also some hidden shortcuts: Tab (when there's a selection) and Shift+Tab for indent and unindent, Ctrl+Enter and Ctrl+Shift+Enter for inserting line after and before, Shift+Delete for deleting the current line.
+## Vim Emulation
+
+You can enable vim emulation in code editor. Most [basic vim commands](../preferences/general/_index.md#vim-commands) and some [custom vim commands](../preferences/general/_index.md#custom-vim-commands) to perform various actions are supported. Many code editor settings like Tab width, Indentation, Current Line Highlight etc are disabled when using vim mode, you have to customize them from [Vim Configuration](../preferences/code-editing/_index.md#vim-configuration).
+
+You can switch to next or previous tab using `tabn` and `tabp` respectively.
+
## Drag and Drop
You can drag files and drop them into the main editor or the input/expected part of test cases.