Honesty

 

EverybodyVIM

Page history last edited by Anonymous 3 yrs ago


本文內容節錄自大家來學 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

  • command-line 開檔: vim test.txt
  • 先進入 vim 後再開檔: 進入vim 後,使用 :e test.txt (edit)
  • 編寫文件: 進入 vim 後,按 i 進入 insert mode

    (原始vi 是不能在 insert mode 隨意移動游標的,得進入 normal mode 才能移動,因此就常常要按 Esc 來變換模式,vim 打破了這個規矩)

  • 存檔、離開:
    • :w (write): 存檔
    • :q (quit): 離開
    • :wq: 合在一起用,存檔並離開

 

Top


Chap 2 游標的移動

本節所述皆是在 normal-mode,(就是剛進入vim,不能輸入文字的狀態) 下的移動

基本的游標移動

上一頁下一頁
簡單的

保持在同一欄位

保持同一欄位

到行首不會折行

到行尾不會折行

PageUpPageDown
特殊的

(手指可留原處)

k

保持在同一欄位

j

保持同一欄位

h

到行首不會折行

l

到行尾不會折行

ctrl+F

(forward)

ctrl+b

(backword)

不同的-

上一行的第一個非空白字元

enter+

下一行的第一個非空白字元

backspace

到行首會折行

space

到行尾會折行

 

進階的游標移動

行首行尾第 n 行第 n 位元檔首檔尾次一字前一字螢幕頂螢幕中間螢幕底
一般的0 or homeend:nn|gg

1G (goto)

Gw (字首)

e (字尾)

b (字首)HML
不同的^

(regexp 匹配行首)

$

(regexp 匹配行尾)

nGW (忽略標點)

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 linedw: del wordD (d$): 刪至行尾d0 (d^): 刪至行首dG: 刪至檔尾d1G: 刪至檔首

 

取代

r 系列

(replace)

r: 取代游標所在處之字元

(就一個字元)

R: 進入 replace mode

取代字元至按 ESC 為止

c 系列

(change)

cc: 取代整行

(dd: 刪除整行)

cw: change wordC (c$): 取代至行尾
s 系列

(substitute)

s: 替換游標所在一個字元

然後轉為 insert mode

S: 取代整行
其他~: 游標所在處字元之大小寫互換

 

還原

  • u: undo
  • ctrl+r: redo

 

加上數目字

在大部份的指令前加上數目字,代表要處理幾次的意思,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 緩衝區,用dcsxy 等指令改變或刪除的內容都是放在 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

  • range: 範圍,x, y

    1, 7: 第一行至第七行;1, $: 第一行至最後一行;%:整篇文章

  • pattern: 要被替換掉的字串,可用 regexp 表示
  • string: 替換成此字串
  • c: confirm,每次替換都要詢問
  • e: 不顯示 error
  • g: global,幾乎都是要加的,不加 g 的話只會替換每一行的第一個符合字串
  • i: ignore 大小寫

 

書籤功能

可以在文章中的某處做個 marks,然後跑 到其它地方去編輯,再呼叫這個 mark 時又會回到原處

  • mx: mark 游標所在處給小寫字母 x
  • `x: 回到 x 所 mark 之處
  • 'x: 回到 x 所 mark 之處的行首
  • ctrl+O: 再回到跳至 mark 前之位置
  • :marks: 得知所有 mark 列表

mark 緩衝區的種類

  • 小寫字母: 作用於單一檔案內
  • 大寫字母: 可作用於各檔案間,利用 viminfo 記錄相關檔案及位置

    ex: 標記 mA 後結束 vim 再開啟 (不開任何檔),直接輸入 `A,即可回到原檔原位置 (vim 會自動開啟所有做有 A 標記的檔案)

  • 數字:
    • `0: 前一次編輯檔案離開前的最後位置
    • `1: 前二次編輯檔案離開前的最後位置
    • 依此類推
    • 不必使用 m 標記,vim 自動會利用 viminfo 記錄 (當然 viminfo 要有開啟)

 

Top


Comments (0)

You don't have permission to comment on this page.