本文內容節錄自大家來學 Vim
Chap 1 進來先看看
需要用到的先學,其它的就放一邊,只要能善用一些常用到的功能,又何必那麼深入?
為什麼選 Vim?
- 可以正確處理中文
- 不僅是 Free Software,也是 CharityWare (得獎獎金救助烏干達 AIDS 孤兒)
- regular expression 支援頗完整
何處抓 Vim?
http://www.vim.org/
編譯安裝
- configure 時:
- --enable-multibyte
- --enable-xim
- --enable-fontset
- --enable-gui=gtk (GUI 可有好幾種選擇,但建議使用 gtk+,比較穩定)
- --enable-perlinterp (需嵌入perl 的話)
- --enable-pythoninterp (需嵌入python 的話)
- ~/.vimrc (Windows: \Program Files\Vim\_vimrc)
- set enc=big5
- set guifontset=英文字型,中文字型
- locale 要設成 zh_TW.Big5
- unset LC_ALL
- export LC_CTYPE=zh_TW.Big5
6 種 basic mode
(反正使用 Vim 的無上心法就是,有問題先考慮按 Esc 鍵回到 normal mode 再說)
- normal mode (common mode, c-mode): 一進入 vim 就是處於這模式,只能下按鍵指令,不能輸入編輯文字
(通常處於此模式,才不會把您辛苦打字的文章給隨便搞亂掉)
- insert mode: 按 i 就會進入插入模式,此時才可以鍵入文字; 按 Esc 又會回到 normal mode 狀態列會有 - INSERT - 字樣
- cmdline mode: 按冒號 : 就會進入命令列模式,左下角會有一個冒號:出現可下 ex 指令; 按 Esc 回 normal mode
(搜尋時的 / 及 ? 按鍵也是屬於 cmdline mode)
- visual mode: 把需要處理的文字反白起來,等待處理的模式,底部狀態最會有 - VISUAL - 字樣
- select mode: 和 visual mode 的異同待瞭解
- ex mode: 和 cmdline mode 是一樣的,但下了命令後不會返回,會留在行編輯器 ex 的狀態
(由 gQ 按鍵可以進入 ex mode,輸入 visual 可以返回 normal mode)
基本教練:step by step
Top
Chap 2 游標的移動
本節所述皆是在 normal-mode,(就是剛進入vim,不能輸入文字的狀態) 下的移動
基本的游標移動
| 上 | 下 | 左 | 右 | 上一頁 | 下一頁 |
| 簡單的 | ↑ 保持在同一欄位 | ↓ 保持同一欄位 | ← 到行首不會折行 | → 到行尾不會折行 | PageUp | PageDown |
| 特殊的 (手指可留原處) | k 保持在同一欄位 | j 保持同一欄位 | h 到行首不會折行 | l 到行尾不會折行 | ctrl+F (forward) | ctrl+b (backword) |
| 不同的 | - 上一行的第一個非空白字元 | enter 或 + 下一行的第一個非空白字元 | backspace 到行首會折行 | space 到行尾會折行 | | |
進階的游標移動
| 行首 | 行尾 | 第 n 行 | 第 n 位元 | 檔首 | 檔尾 | 次一字 | 前一字 | 螢幕頂 | 螢幕中間 | 螢幕底 |
| 一般的 | 0 or home | end | :n | n| | gg 1G (goto) | G | w (字首) e (字尾) | b (字首) | H | M | L |
| 不同的 | ^ (regexp 匹配行首) | $ (regexp 匹配行尾) | nG | | | | W (忽略標點) E (忽略標點) | B(忽略標點) | | | |
特殊的移動
- 句子的移動 (句子是以 . ! ? 來區隔)
- 段落的移動 (段落是以「空白行」區隔)
- () [] {} 之匹配
- %: 游標在某一括號上按 % 即會自動跳到相匹配之括號位置
Top
Chap 3 基本編輯指令
進入 insert mode 的指令
| a (append) | i (insert) | o (open) | J (joint) |
| 小寫 | 所在字元後開始輸入 | 所在字元前開始輸入 | 下開新行輸入 | |
| 大寫 | 行尾開始輸入 | 行首 (第一非空白字元) 開始輸入 | 上開新行輸入 | 將下一行接至本行 |
刪除指令 (在 normal mode,非 insert mode)
| x 系列 | x (del): 刪除游標所在處之字元 | X: 刪除游標前之字元 | | | | |
| d 系列 | dd: del line | dw: del word | D (d$): 刪至行尾 | d0 (d^): 刪至行首 | dG: 刪至檔尾 | d1G: 刪至檔首 |
取代
| r 系列 (replace) | r: 取代游標所在處之字元 (就一個字元) | R: 進入 replace mode 取代字元至按 ESC 為止 | |
| c 系列 (change) | cc: 取代整行 (dd: 刪除整行) | cw: change word | C (c$): 取代至行尾 |
| s 系列 (substitute) | s: 替換游標所在一個字元 然後轉為 insert mode | S: 取代整行 | |
| 其他 | ~: 游標所在處字元之大小寫互換 | | |
還原
加上數目字
在大部份的指令前加上數目字,代表要處理幾次的意思,ex:
- 5dd: del 5 lines (dd: del lines)
- 3r: replace 3 characters (r: replace one character)
- 5J: joint 5 lines (J: 將下一行接至本行)
- 3x: del 3 characters (x: del one character)
- 5i A ESC:inser 5 As (i: insert mode)
- 5l: move right 5 characters (l: move right)
簡單的重排功能
| 方向系列 | >>: 整行向右移一個 shiftwidth | <<: 整行向左移一個 shiftwidth | :set shiftwidth? 可得知 shiftwidth 的值 :set shiftwidth=4 可將 shiftwidth 設為 4 字元 shiftwidth 可簡寫成 sw |
| 文字系列 | :ce(nter): 本行文字置中 | :ri(ght): 本行文字靠右 | :le(ft):本行文字靠左 |
| 重排系列 | gqap (gqip): 整段重排 | gqq: 本行重排 | gqQ: 全文重排 |
| gq2ap: 重排兩個段落 | gq3q: 重排三行 gq5j: 重排以下五行 | gq}:重排一個段落 |
- 重排的依據是 textwidth
- 這裡的重排是指鍵入文字時沒有按 Enter 鍵,就一直在keyin,這樣會形成一個很長的一行(雖然螢幕上會替您做假性折行),重排後,則會在每一行最後加入 EOL
- 如果是利用 visual mode 所標記起來的部份,只要按 gq 就會只重排被標記的部份
Top
Chap 4 複製 (yank)
yank 好像是中醫治療中的「拔罐」的意思啦,
在 Vim 的思考邏輯裡,就是「拔」yank 起來,「放」put 上去
指令說明
| 複製 | yy (Y): 複製整行 2yy: 複製兩行 | yw: 複製一個 word y2w: 複製兩個 word | y$: 複製至行尾 | y^ (y0): 複製至行首 | yG:複製至檔尾 | y1G: 複製至檔首 | "ayy: 將本行文字複製至 a 緩衝區 |
| 貼上 | p: 貼至游標後(下) | P: 貼至游標前(上) | | | | | "ap: 將 a 緩衝區內容貼上 |
Registers
- registers 緩衝區,用d、c、s、x、y 等指令改變或刪除的內容都是放在 registers中的
- 只要是在緩衝區的內容都可以使用 p 來貼上,不是一定要 y 起來的內容才能用 p
ex:dd 之後可以使用 p 貼上
- registers 的名稱可以為英文 26 個字母,刪除複製的內容是放在 0-9 的緩衝區
- :reg : 列出所有 registers 的代號及內容
緩衝區種類:
- buffers 緩衝區: 置放一整個檔案
- registers 緩衝區: 檔案內容操作,如刪除、yank、置換,給 Put 要用的
- marks 緩衝區: 給 bookmark 用的
這些內容不一定是放在 RAM 記憶體內,有的是置於硬碟檔案上,需要時才從檔案存取,但這裡通通把他當做是緩衝區,以方便理解
天大的指令
. (英文句點): 重複前次的編輯動作
只要是編輯動作(移動游標不算,冒號命令也不算)都可以按英文句點來重複,要重複幾次都可以
Top
Chap 5 搜尋、替換
搜尋
(在 c-mode (common mode, normal mode) 下)
| 向下找: | /: 向下找所輸入之字串 | *: 向下尋找游標所在處之word (要完全符合) | g*: 向下尋找游標所在處之word (部分符合即可) |
| 向上找: | ?: 向上找所輸入之字串 | #: 向上尋找游標所在處之word (要完全符合) | g#: 向上尋找游標所在處之word (部分符合即可) |
| 繼續尋找: | n: 繼續尋找下一個同樣的字 (同向) | N: 繼續尋找下一個同樣的字 (反向) | |
替換
| :[range]s/pattern/string/[c,e,g,i] ex: :%s/Edwin/Edward/g |
書籤功能
可以在文章中的某處做個 marks,然後跑 到其它地方去編輯,再呼叫這個 mark 時又會回到原處
- mx: mark 游標所在處給小寫字母 x
- `x: 回到 x 所 mark 之處
- 'x: 回到 x 所 mark 之處的行首
- ctrl+O: 再回到跳至 mark 前之位置
- :marks: 得知所有 mark 列表
mark 緩衝區的種類
Top
Comments (0)
You don't have permission to comment on this page.