> For the complete documentation index, see [llms.txt](https://kanneg881.gitbook.io/workspace/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kanneg881.gitbook.io/workspace/vim/she-ding-huan-jing-zhi-ling/kuai-jie-jian.md).

# 映射

## 說明

介紹映射的使用方式，這些指令都可以寫在設定檔裡。

`:help index`\
查看內建按鍵綁定列表

`:map {command}`\
查看 :map 指令 command 開頭的映射\
例如：\
`:map g`\
查看 :map g 開頭的映射

## 每個映射命令包含的模式

| 命令   | 一般 | 可視 | 選擇 | 插入 | 操作元等待 | 命令行 | Lang-Arg |
| ---- | -- | -- | -- | -- | ----- | --- | -------- |
| cmap |    |    |    |    |       | ✓   |          |
| imap |    |    |    | ✓  |       |     |          |
| lmap |    |    |    | ✓  |       | ✓   | ✓        |
| map  | ✓  | ✓  | ✓  |    | ✓     |     |          |
| map! |    |    |    | ✓  |       | ✓   |          |
| nmap | ✓  |    |    |    |       |     |          |
| omap |    |    |    |    | ✓     |     |          |
| smap |    |    | ✓  |    |       |     |          |
| vmap |    | ✓  | ✓  |    |       |     |          |
| xmap |    | ✓  |    |    |       |     |          |

後面每個映射指令都會使用前綴字加上映射指令\
例如\
刪除 map 指令為 unmap\
刪除 nmap 指令為 nunmap\
刪除 vmap 指令為 vunmap\
以此類推

## 映射指令說明

| 語法     | 說明                                                                                                             |
| ------ | -------------------------------------------------------------------------------------------------------------- |
| {cmd}  | 如上表中的 map, nmap, vmap 等                                                                                        |
| {lhs}  | 映射鍵                                                                                                            |
| {rhs}  | 映射鍵執行的功能                                                                                                       |
| Leader | 此為設定鍵值的變數，預設為 \\                                                                                               |
| silent | <p>要在定義一個映射時不在命令行上回顯該映射<br>可以使用 silent 作為第一個參數</p><p>例如：</p><p><code>:map \<silent> ,h /Header\<CR></code></p> |

## 設定 Leader

預設 leader 為 \\

### 更改 leader

`:let mapleader = ","`

如上 Leader 變成 ,

使用 leader 範例\
`:map <Leader>a i`

輸入 \a 會變成 i \
假如 Leader 變數為 \\\
i 為插入模式

若要加在 .vimrc 需在頂部新增\
因為此設定只在定義後有效

若要設定為特殊字元，需要轉義

{% code title=".vimrc" %}

```
" 將 leader 設定為空白鍵
let mapleader = "\<space>"
```

{% endcode %}

## 設定遞迴映射語法

{cmd} {lhs} {rhs}

前面指定模式英文加上 map\
map, nmap, vmap...

舉例

`:imap a b`\
插入模式輸入 a 輸出 b

`:imap b a`\
插入模式輸入 b 輸出 a

因為遞迴的關係\
輸入 a 會輸出 b\
又因為輸入 b 會輸出 a\
造成無限循環，導致設定失敗\
這時就要用避免遞迴映射語法

## 設定避免遞迴映射語法

{cmd} {lhs} {rhs}

前面指定模式英文加上 noremap\
noremap, nnoremap, vnoremap...

舉例

`:inoremap a b`\
插入模式輸入 a 輸出 b

`:inoremap b a`\
插入模式輸入 b 輸出 a

因為避免遞迴的關係\
輸入 a 會輸出 b\
輸入 b 會輸出 a\
兩者不互相影響

## 刪除映射語法

### 刪除一個映射

{cmd} {lhs}

前面指定模式英文加上 unmap\
unmap, nunmap ,vunmap...

舉例

`:unnmap gq`\
刪除 gq 映射

### 刪除所有映射

`:mapclear`\
清除所有映射

## 常用指令

`:map`\
顯示映射指令表

`:h key-notation`\
查看按鍵英文名稱

## 特殊按鍵

特殊按鍵的符號表

| 符號               | 按鍵          |
| ---------------- | ----------- |
| \<bs>            | 退隔鍵         |
| \<cr> 或 \<enter> | Enter 鍵     |
| \<del>           | Delete 鍵    |
| \<down>          | 箭頭下         |
| \<end>           | End 鍵       |
| \<esc>           | Esc 鍵       |
| \<f1> \~ \<f12>  | F1 \~ F12 鍵 |
| \<home>          | Home 鍵      |
| \<insert>        | Insert 鍵    |
| \<nop>           | 無操作         |
| \<pagedown>      | 下翻鍵         |
| \<pageup>        | 上翻鍵         |
| \<right>         | 箭頭右         |
| \<space>         | 空白鍵         |
| \<tab>           | Tab 鍵       |
| \<up>            | 箭頭下         |
