vim 我最常用的命令

Ñ代表任何數字, 例如0,1, 12,520,...etc.
Á代表所有英文字母


1. 游標移動

↓或j往下
↑或k
→或l
←或h
PgDn或Ctrl+F往下跳一頁
PgUp或Ctrl+B往回跳一頁
b往回跳一個單字
w往後跳一個單字
Home 或.跳到一行的開頭
End 或$跳到一行的結尾
跳到第N行
Ctrl+G跳到最後一行


2. 複製與貼上

yy複製游標在那行
yw複製游標所在的那個字 (例如 rock, 不論游標在r, o, c 或k, 按yw就會複製rock下來)
yÑ↓先按y再按數字 Ñ 再按上或下,可複製游標所在的行連同往下或上 Ñ 行,例如 y2↓, 總共會複製三行
p貼上刪除或複製的文字


3. 刪除與修改

i切換成文字編輯模式
o往下新增一行空白行,並同時切換成文字編輯模式
x刪除游標所在字器
Ñx從游標開始刪除Ñ個字
D

用大寫D刪除游標所在與其之後同行的所有字.
例如,游標在 "This is a test program..." 的 p 上, 按了D後,就剩下"This is a test "

J去掉這行的換行,也就是將下一行往上移到此行的後面.
例如, 游標在第一行的 u:
1: It is unbelievable that I
2: won the lottery!
這時按下大寫J後,就變成:
1: It is unbelievable that I won the lottery
dw刪除游標所在的單字
cw取代游標所在單字,即刪除並進去文字編輯模式
r取代一個字母;例如,ra會把游標位字的字母變成a
R取代一連串字母直到按Esc;例如, Rcroissant<Esc>會從游標開始八個字母換成croissant
uundo


4. 搜尋與取代

/coffee往下搜尋coffee字串; (找到後, 按 n 可以繼續往下找, 按大寫N則往反方向尋找)
/tea/;/cup先找到tea再往後找cup
?cigar往上搜尋cigar字串;(找到後, 按 n 可以繼續往上找)
*將游標移到某個字的任一位置, 然後按 * (shift+8),就會往下尋找同一個字;例如,游標目前在 surf 這個字, 按下 *後,游標就會跑到下一個 surf, 而且使用這個方式,不會尋找到 surfing, surfer...等, 它會尋找正確的surf這個字. 其實,它就等於用 /\ 這個方式一樣.
#如同 *,只是它是往上(回)尋找
:substitue

取代命令, 語法 :range substitute /from/to/flags
例如, :%s/strawberry/chocolate/ 是執行將所有行(%代表所有行)的strawberry換成chocolate.

range
可以為 "1,3"代表第一行到第三行; ".,$"代表游標所在行(.)到最後行($); "'a,'b"代表mark a 到mark b
(Note: 用mÁ可以在特定行給mark, 例, ma就在游標行給mark a, 按'a則可跳到該mark; mb則是給mark b)

from
可以為 regular expression, 例如, "199\d" 代表1990到1999

flags

(1) g 代表 global, 以前例,有些行可以超過一個strawberry, 用g flag代表每行的所有strawberry都會換成chocolate,不是只會換一次.
(2) i 代表case insensitive, 不分大小寫
(3) c 代表confirm, 每個置換都要尋問是否確定. (用y確定, n跳過該字, a 確定所有剩餘, q來結束
(4) p 代表print, 把被置換的字印出來

More examples:
:10,'bs/beauty/beauties/g 第10行到mark b中所有的beauty換成beauties

:%s/
\(\w\+\) loves \(\w\+\)/\2 loves \1/g 將所有的 A loves B,換成 B loves A. \(...\) 是用來把match到的pattern記下來以供使用, 第一個\(...\)存到\1, 第二個存到\2, 依此類推.

:grep

:g/pattern/ 可以秀出有pattern字串的行
:g/pattern/d 可以刪除有pattern字串的所有行

?
?
?

沒有留言: