---
# System prepended metadata

title: Vimrc 小技巧
tags: [note]

---

# Vimrc 小技巧
###### tags: `note`
contributed by <`HYISABUG`>

## Highlight python 的 self
python 的 `self` 在 vim 裡面預設不會被標色
這是因為 `self` 不是一個關鍵字, 只是個慣例命名
因為覺得太多 self 在程式碼裡不標色容易找不到
所以就去找了點方法讓 vim 幫忙標色

### syntax 設定
vim 的 syntax 設定長這樣 ```syn keyword {group-name} {keywords}```
(或 ```syntax keyword {group-name} {keywords}```)

`group-name` 可以是任意自訂的名字, 也可以是 vim 內建的組別 (e.g. `pythonBuiltin`)
內建的組別可以到 vim 的資料夾底下去找設定 `*.vim`
(e.g. `/usr/share/vim/vim74/syntax/python.vim` 就是 python 相關的 vim 設定)

這個 `group-name` 跟標色是什麼顏色有關
舉個例子, `group-name` 用 `pythonBuiltin` 會讓顏色變得跟那些內建 function 一樣 (e.g. `abs`, `print`)

`keywords` 當然就是指哪些詞要標色啦

當然, 也可以選擇用 regular expression 來決定標色部份
像 ```syn match {group-name} {regex}``` 一樣把 `keyword` 換成 `match` 就行了

### Highlight Group
如果是用自訂 `group-name`, 那麼做完 syntax 設定還不夠
接下來有兩條路能選擇

1. 自訂顏色
2. 套用已有組別的顏色

第一種用 ```hi {group-name} ctermfg={color-nr}```
`color-nr` 是色碼, 詳細[自己去查](http://vimdoc.sourceforge.net/htmldoc/syntax.html#:highlight)

第二種用 ```hi link {from-group} {to-group}```
`from-group` 是你的自訂組別, `to-group` 是要套用的組別

在這裡我用的是第二種, 並且將組別連接到 `Keyword` 這個預設組別上
```hi link myPythonKeyword Keyword```

### 自動執行
上面兩個設定如果直接寫在 `.vimrc` 里會發現「ㄟ怎麼沒變？」
這是因為設定被預設的 syntax file 洗掉了

所以我用 `autocommand` 來解決這問題

```
augroup python
    au!
    au FileType python
                \ syn keyword myPythonKeyword self |
                \ hi link myPythonKeyword Keyword
augroup end
```

像這樣設定好, 就能看見設定生效了

### 參考資料
[How can I fix 'missing' syntax highlighting for Python keywords such as 'self' ?](https://vi.stackexchange.com/questions/8772/how-can-i-fix-missing-syntax-highlighting-for-python-keywords-such-as-self)
[Vim documentation: syntax](http://vimdoc.sourceforge.net/htmldoc/syntax.html)