2005-06-13

VIM: Vi 中一些常用的使令

vi 一個 unix 中的文字編輯器。近日在 bbs 上看到一些相關的介紹,就順手留了一份下來了。

移動

a     : 游標後開始插入
A     : 行尾插入
i     : 游標位置前開始插入
I     : 行前插入
o     : 游標所在行的下一行騰出一行空行
O     : 上一行騰出一空行
:#: 跳到第#行
$     : 跳到行尾(其實我很討厭它用這個字元,應該換個比較好按的)
0     : 跳到行首(至少也應該像這樣的)

變更

x     : 砍一字元(看用的語言,vim可以看語言決定要砍一個byte或是兩個byte)
#dd   : 砍#行
D     : 從游標後砍到行尾
dG    : 從所在行砍到檔案尾
.     : 重覆剛剛指令

尋找/取代

/xxx  : 往後找xxx這個字串
?xxx  : 往前找xxx這個字串
:g/patten/command: 對整個檔案做處理,凡含該patten的就會做該command
example: 把檔案中所有含有 patten 的那行砍掉
:g/patten/d

:1,$s/A/B/g : 從第一行開始,把有A的全部換成B,(1,第一行,$s, 取代, g, global)
:abbr xxx yyyy: 以後打xxx 都要變成 yyyy (簡寫失@能)

讀寫檔案

ctrl-g: 表示現在狀態
:wq   : 寫入並跳出
:w!   : 強制寫入
:r xxx: 從所在行開始讀 xxx 這個file


p : 把在register裡面的東西貼出來(像是你剛剛砍的東西就會被放進register)
c# : 從游標所在取代#個字元(先砍了#個字元然後Insert)
vy : 按v之後就可以動游標,就會mark一些地方,決定好之後,按y就會把mark的地方放進register中,以後可以按p來做貼上的工作
vd : 把mark的地方都砍掉
u : 回復剛才的動作(undo)
ctrl-r: 把剛剛回復的動作再取消。

example:
exampple 用 x 砍了一個p,變成 example
按 u 之後變成 exampple
再按ctrl-r 又變成 example
ctrl-f: 捲一頁(其實還是會重覆兩行)
ctrl-b: 回捲一頁(也是一樣會重覆)

e xxxx: edit xxxx 這個file
split xxx :把視窗分成兩半,其中一個編輯xxx這個file。視窗之間的切換用ctrl-w

search 在 vim 裡面算是很不錯的工具,如果你還會用 regular expression 的話,
那就更完美了。

不過,在這裡將不介紹 regular expression,
我們將介紹的是幾個簡單好用的小指令。

最簡單的 search 莫過於打 '/' 後面接上你要找的東西,
例如
/found
不過這是從現在所在位置往下找。
如果你要往上找,就會變成
?found
而當你作過一次 pattern search 之後,想要再找下一個,
你可以用 n 來達到要求,也就是說,不用再打 / <CR> 或是 / '你要找的pattern'
而是一個 'n' 就可以往你剛剛找的方向,尋找下一個符合的字。

那如果你想往回找,也就是反方向。那也不用重打,直接使用 'N' 就可以了。

通常,你在一份文件搜尋的時候,你明明看到某個字,
可是要搜尋還要打出完整的東西,比方說你看個程式,
程式裡面寫了一個 function name 叫 BF_algo_fromsrc_pathcost
難道就真的要打一遍,還有大小寫的差異呢老天﹗
有個小東西可以幫你的忙,
'*'
也就是說,你只要把游標移到這個 function name 的上面,按一下 '*' 這個符號, vim
就會幫你往下尋找BF_algo_fromsrc_pathcost ,這個可以幫你省下不少力氣,不過它找尋的時候是根據游標移到位置的前後,有沒有
word 的邊界,比方說,空白就是一種邊界,諸如 ( { 等等都是。而且如果你用 '*' 來搜尋的話,這代表的是要 exactly
和你要找的東西一樣才行。
這是什麼意思呢?

你可以仔細看一下用 '*' , vim 所給的 pattern ,你會發現前後多了 \< \>,舉例來說,如果你找的是 \<link\>,那麼, min_links 就不會符合, 同樣,linknode也不會符合。
這是什麼意思?

\< 表示的是一個字的頭,而 \> 代表的是一個字的尾,當你寫 \<link 的時候,
表示你要找的字,是以 link 開頭的,同理, link\> 就是以 link
結尾的字,所以用兩個夾起來,就代表要字串的的確確是所要的那個字。

而既然有了 '*' 往下找的,就有往回找的,按鍵是 '#' ,你懶得記那麼多的話, 就用 '*' 然後搭配 'N' 吧﹗ :P

到這裡,你可能會想,如果我不想打那麼多字,可是我想要的又不要完全是一樣的, 怎麼辦? vim 也有這樣的東西,就是在你打 '*' 之前,先加一個 'g' ,也就是
g*
這樣 vim 在做搜尋的時候,就不會包含 \< \> 這兩個東西在前後了。
郭@多更 powerful 的失@能,你可以打 :h pattern 看到更詳細的資料。

像我們在前面所介紹的那些,都是你可以設定在 ~/.vimrc 裡面的。 那 .vimrc 裡面,我們還可以設定什麼東西呢?
根據<精通vi>這本書裡面所講的,有關設定,會影響到你編輯的,大約有一百七十餘種。不過這些都不重要,因為真的會用到的失@能其實也不多。
(我自己在用的大概也不超過十個...)

如果說 vim 複雜的話,其實你真正需要的,也不過就是 a i o <ESC> :w :q :q!
而已。

現在我們要介紹的是 .vimrc 裡面的一些小設定,可以幫忙你一點忙的。
set ru
通常在 vim 裡面,我們很難從現在的狀態上看出:
我們現在編輯到檔案的第幾行,如果你設定了這個選項,你就可以在右下角的地方看到現在在第幾行的第幾個字上面。
set ai
則是可以自動幫你沿著你上一行的格式幫你自動縮排,
這是滿不錯的失@能,不過如果你要從滑鼠 paste 東西到上面去的時候,你可能需要把這東西關掉,或是經由其他的選項來控制 paste 的動作。
(不過... 另外控制的選項,個人覺得不太直覺就是了.. )
set hls
是幫你在 search 的時候可以把 search pattern 標明出來
syntax on
這個會根據檔案的 type 讀進適當的格式,讓你檔案的內容會根據格式的不同,而有不同的色彩設定,或是有底線等等的變化
set viminfo
則是告訴 vim 你的 viminfo 放在什麼地方,並且有關 viminfo 的設定是什麼
set secure
則是怕你在不同的目錄下編輯的時候,有人在該目錄作了某些設定,因為 .vimrc
如果也出現在該目錄的話, vim 會把兩者(你 home 目錄下,和現在目錄下) 的設定都讀進來,設定這個選項可以讓有關寫入的 autocmd 的指令不會被執行。
詳細的資料你可以打 :h secure 看到
set ic
這是 ignore case 的意思,比方說你 search 某個 pattern 的時候,
如果設了這個選項,則打 /end 找到的東西,END 和 end eNd,EnD,這些不管大小寫都會被 match。個人不推薦這個選項,因為在做 pattern 代換的時候,也同樣有用...


發表 VIM 的相關文章:

  1. VIM: Vi 中一些常用的使令
  2. VIM: vba套件的安裝與移除
  3. VIM: 製作 vimball 的 vba 安裝檔
  4. VIM: GVim 亂碼的問題
  5. VIM: Vim 中的萬能補全 (Omni Complete)
  6. VIM 七個有效率的文本編輯習慣


Related Posts Plugin for WordPress, Blogger...

沒有留言 :

張貼留言

,,