廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 3089 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
tailin! 手機
個人頭像
個人文章 個人相簿 個人日記 個人地圖
小有名氣
級別: 小有名氣 該用戶目前不上站
推文 x0 鮮花 x13
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x0
文章表情[Linux] [教學] 輕鬆學 vi
輕鬆學 vi 第一課 : 打好基礎
-------------------------------

我們現在將花約10到15分鐘來教你一些簡單的編輯方法.有[實作]的部份請你務
必跟著實地演練一次.如果你想離開這門課程請按大寫的Z兩次離開.

請注意:你在vi裏所打的指令(command)並不會出現在螢幕上,如果你所打的
    指令出現在螢幕上,那麼請按一下 ESC 鍵.

基本的游標移動方法
---------------------

在這門課裏,你可以按 ^D (Ctrl+D) 或 ^U(Ctrl+U) 來移動你的游標

    ^D     游標往下移動半個螢幕(按住 Ctrl 鍵不放再按 d 鍵)

    ^U     游標往上移動半個螢幕(按住 Ctrl 鍵不放再按 u 鍵)

[實作]現在請你試著按 ^D 和 ^U 來移動你的游標

在整個課程中,當你讀完了一頁的內容以後,請按 ^D 繼續閱讀下一頁的
課程內容.

如果你想一行一行或一個字母一個字母的移動游標,請按 h , j , k 和 l

    h     向左移動一個字元
    j     向下移動一行
    k     往上移動一行
    l     向右移動一個字元

或許你有注意到這幾個按鍵在鍵盤上是一字排開的,請看下面這個圖.

                          上
          .......   .......   .......   .......
          :   :   :   :   :   :   :   :
      左   : h :   : j :   : k :   : l : 右
          :.....:   :.....:   :.....:   :.....:

                  下

[實作]現在按幾次 j 或 k 把游標移動到這行上面.

[實作]1. 現在試著按 l 鍵幾次把游標移到這行的最右邊.請注意vi不允許你
      按 l 將游標移動超過每一行的行尾.同樣的,你也不能在空白行按
      h 和 l .
    2. 接下來請你按 j 將游標往上移動,請注意看看畫面是怎麼向下捲動的


刪掉文字/刪除一整行 DELETION
-----------------------------
在vi裏,用 x 和 dd 來刪字母和一整行.

    x     刪掉目前游標所在位置的那個字母
    dd     刪掉目前游標所在位置的那一行

如果想救回(undo)剛才所刪掉的東西,按 u

    u     救回最後一次所刪除的東西.

[實作]現在我們來試試砍掉這一行. 先按j或k把游標移到這行上面,再按dd
    (按兩次d).再按 u 救回上一行
   
[實作]把游標移到這行上面,按 x 把下面句子中的 Y 刪掉
    "whY ask whY?"
    現在試著按 u 救回剛剛刪掉的文字. 多按幾次 u ,你會發現 u 只能
    救回最後一個被刪掉的字母

下面這幾行文字讓你練習 刪除 和 救回 的動作( 用 dd x u )

    Emacs is an evil creation. Emacs is an evil creation.
    Emacs is an evil creation. Emacs is an evil creation.
    Emacs is an evil creation. Emacs is an evil creation.


如何離開vi
----------

(只是說明,先暫時不要按下面的指令離開)

如果你剛才有更改檔案的內容(舉例來說,你剛才按過 dd 或 x 就算是更動過
檔案內容) 卻不想存起來,你可以按 :q!<RETURN> .如果要存的話,請按 ZZ
如果你在編輯自己的檔案,一般來說都是按 ZZ 離開

:q!<RETURN>   離開vi,不儲存剛才對檔案所作的變動
          (先按冒號,再打q,驚嘆號,再按Enter)

    ZZ     離開並儲存剛才對檔案所作的變動
          (大寫Z按兩次)

插入文字
--------

你可以按 i 或 o 進入"插入"模式,輸入完畢後要按 ESC 離開"插入" 模式.
在插入模式中,你所打的任何東西都會出現在畫面上(還記得剛才才說過
vi裏所打的指令(command)並不會出現在螢幕上嗎?)如果你的電腦鍵盤上沒有
ESC這個按鍵,請按 ^[ 代替 ( Ctrl + [ )

    o     OPEN : 插入一個新的空白行輸入文字
    i     INSERT :從現在游標所在位置開始插入文字

    ESC   ESCAPE : 離開 "插入" 模式

在"插入"模式中,你可以用倒退鍵來更正錯誤(一般來說,是Backspace鍵或Delete
鍵).你所刪除的字母將會一直停留在螢幕上直到你下次按ESC鍵才會真正刪去.

[實作]在下面的空白行中輸入你的名字和電話號碼.請照下面的步驟:
    1.按 o 插入一個空白行
    2.輸入你的名字後按enter
    3.輸入你的電話後按esc
    4.按 x 刪掉一部份的電話號碼

[實作]在你的電話號碼下輸入今天的日期.
    1.按 o 插入一個新的空白行.
    2.輸入日期後按ESC

[實作]按 u 取消剛才所插入的文字

[實作]按 i 在你的名字間插入你的小名或暱稱.
    步驟: 用剛剛教過的 h j k l 把游標移到你名字的中間再按 i
        輸入你的小名或暱稱.用 DELETE 或 BACKSPACE 更正錯誤的地方
        再按 ESC 離開插入模式.

注意:
    在某些電腦裏,一行文字可以比螢幕畫面能顯示的字數還多,也就是在這
    種電腦上很長的一行文字在螢幕上可能顯示出來時會被截成兩行以上.
    為了避免這種困擾,在你插入文字時請記得當游標已經跑到畫面邊緣時要
    按一下enter換行.

關於檔案
-----------
在UNIX指令行下用vi編輯一個檔案的方法是打:

    vi filename

"filename" 指的是你想編輯檔案的檔名.若這個檔案原本就不存在於磁碟內(也就
是"新檔"),那麼vi不會馬上就建立這個新檔.vi會等到你第一次下存檔的指令時才
會一併建檔並存檔.在這之前這個檔案一直都放在暫存區內.如果你在輸入檔名時不
小心打錯了,只要打 :q!<RETURN> 就可以避免這新的檔案被建立.


總結    
-------  
結束第一課後,你應該已經懂得這些指令了...

    ^D     游標往下移動半個螢幕(按住 Ctrl 鍵不放再按 d 鍵)

    ^U     游標往上移動半個螢幕(按住 Ctrl 鍵不放再按 u 鍵)

    h     向左移動一個字元
    j     向下移動一行
    k     往上移動一行
    l     向右移動一個字元

    dd     刪除一整行
    x     刪掉一個字元.

    u     取消剛才所做的動作

:q!<RETURN>   離開vi,不儲存剛才對檔案所作的變動
          (先按冒號,再打q,驚嘆號,再按Enter)

    ZZ     離開並儲存剛才對檔案所作的變動
          (大寫Z按兩次)

    o     OPEN : 插入一個新的空白行輸入文字
    i     INSERT :從現在游標所在位置開始插入文字

    ESC   離開(ESCAPE) "插入" 模式

若要在在UNIX指令行(command line)下使用vi請打 :

    vi [要編輯的檔名]

現在你已經會對檔案作一些基本的編輯工作了.請你繼續練習使用vi,接下
來再進行第二部份的課程,學習更多好用的vi指令


--------------------------------------------------------------------

輕鬆學 vi 第二課 : 快速有效的穿梭於檔案間
-----------------------------------------

接下來的這門課將花約15到20分鐘.在這門課裏所教的內容將用在第三課中:
vi的剪貼功能.有[實作]的部份請你務必跟著實地演練一次.如果你想離開
這門課程請按大寫的Z兩次離開.


WORDS
-----

有不少的方法可以讓游標從一個word跳到其他的word.

    w     游標跳到下個word的開頭
    e     游標跳到下個word的字尾
    b     游標回到上個word的開頭

大寫的 W E B也有著相同的功能.大寫和小寫的 w e b 指令的差別在於小寫的
w e b 指令把任何非數字或字母的字元當成一個新word的開始,而大寫的 W E B
則是用空白字元來區隔兩個word.

[實作]現在用下面兩行來試試 w b e 和 B W E 這些指令

  EX-PER-IMENT on these lines;test moving back &forth.
  EX-PER-IMENT on these lines;test moving back &forth.


ON THE LINE
-----------
你可以很快的將游標移到所在行的任何位置

    $     移到游標所在行的行尾
    ^     移到該行第一個非空白的字元

    0     移到該行的開頭位置
    #|     移到該行的第 # 個位置   例: 5| 12|

[實作]現在試試 $ 和 ^ 這兩個指令,請注意 ^ 會移到第一個非空白的字元,並
    不是那一行的開頭位置

  This is a PRACTICE LINE. There is white space at the front. END

0 (zero) 會把游標移到該行的最左邊.

#| ( | 和 \ 在同一鍵上) 是用來直接移動游標到該行的第 # 個位置
先按 # (範圍介於 1-80 之間) 再按 | . 舉例來說: 5|   20|   30|


尋找字元
--------
有時你可能須要尋找一行中的某個字元.

  f char     尋找(FIND) 本行中下一個 char 字元
  t char     將游標移到本行中下一個 char 字元之前

  F char     尋找本行中前一個char所在的位置
  T char     移到本行中前一個 char 字元之後

    ;     重覆上一個 f, t, F, 或 T 的動作
    ,     反向重覆上一個 f, t, F, 或 T 的動作

f 和 F 會讓游標停在找到的字元上,t 和 T 將游標停在找到的字元旁.
f 和 t 往後找,F 和 T 往前找.
如果要找的字元找不到,vi會發出聲音告訴你.

[實作]現下下面有一行文字,試試 f t F T ; , 這些指令

  "PRACTICE line?" "Each and Every?" "Find thE char@cter and move to it.END


MATCHING
--------

vi有一個很方便的功能,尤其對寫C程式的人來說更是好用.它可以幫你判斷
() {} [] 有沒有成對,如果找不到對應的括號,vi會發出聲音告訴你,如果有找
到就直接跳到對應的括號上.

    %     尋找有無對應的 () {} 或 []

[實作]在下面的練習中,移動你的游標到(,),[,],{,}上面,再按 %

  [TRY THIS. ((Whether) the pairs match up is the question.) [One]
  pair is incomplete]. Can you tell {which one? ]} END


WINDOW POSITIONS
----------------
在vi裏你可以移動游標到畫面的上方,中間,和下方.

    H   移到游標到畫面的最上方 (HIGHEST)
    M   移到游標到畫面的中間 (MIDDLE)
    L   移到游標到畫面的最下方

[實作]好,現在試試 H M 和 L 這三個指令.


標示位置
--------

你可以在檔案裏做些標記再隨時返回被標記的位置.

  m char   (MARK) 把這個地方標示成 char
  ' char   (quote character) 跳到被標為 char的那一行    
  ''       (按兩次') 回到剛才的位置

char 可以是小寫的 a-z中的任一個 . 一個標記在除了下面的這兩種情況
外會一直存在

  1) 重覆使用相同的標示 char .
或 2) 刪掉了被標示的那一行.

[實作]
>>> 移到這一行,按 ma 把這行標成 a
>>> 移到這一行,按 mb 把這行標成 b
>>> 移到這一行,按 mz 把這行標成 z
>>> 移到這一行,按 mb 把這行標成 b
>>> 移到這一行,按 mz 把這行標成 z
>>> 現在按 'a 讓vi回到標示為 a 的那一行.
>>> 現在按 'b 讓vi回到標示為 b 的那一行.
>>> 現在按 'z 讓vi回到標示為 z 的那一行.

這些指令可以讓你來回切換於檔案中兩個相距很遠的地方.
vi會記住你剛才是從那一行跳躍過來,你可以按 '' 來回的切換

[實作]按 'b 回到標示為 b 的那行,再按 '' 回到這行


跳到某一行
------------

      G     (GO) 跳到檔案的最後一行.
    #G     (GO to line #). 跳到第 # 行 (例: 3G , 5G , 124G )

[實作]按 1G 跳到檔頭,再按 '' 回到這行.再來按 G 跳到檔尾再按 ''回到這行


文字段落
--------------

有時候一段一段的移動游標會比較方便.我們可以用 {,},(,) 來達到這些功能

    {     (左大括號) 跳到上一段的開頭
    }     (右大括號) 跳到下一段的的開頭.

    (     (左小括號) 移到這個句子的開頭
    )     (右小括號) 移到下一個句子的開頭

[實作]現在試著利用下面兩段文字來學習使用 { 和 }的功能.

    EXPERIMENT on this first paragraph. The quick brown fox jumped
  over the seven lazy dogs. The fox must have been very large to
  jump over seven dogs!

    EXPERIMENT on this second paragraph. The quick brown dog
  jumped over the seven lazy foxes. The dog didn't have to be nearly
  as large, since foxes aren't too big.

[實作]現在用上面的兩段文字來試試 ( 和 )

C的程式設計者對接下來的這兩個指令可能會感興趣.
C的函式(function)都是用 { 和 } 括起來的,如果你把各函式的 { 都放在一行
的第一個位置那麼vi便可以讓你用 [[ 和 ]] 輕鬆穿梭於各函式之間

    [[   跳往上一個函式
    ]]   跳往下一個函式

若vi在整個檔裏都找不到最左邊是行首是 { 的符號時, 按[[ 和 ]] 就會跳到
檔頭和檔尾

[實作] 現在下面有幾個函式,試著用 ]] 和 [[ 來回切換於各函式間.

main()
{
  helloworld();
}

helloworld()
{
  printf( "Hello world\n" );
}


搜尋
-----

  /string     向後尋找 string 這個字串
  ?string     往前尋找 string 這個字串

    n     重覆上一個 / 或 ? 的指令,繼續尋找
    N     重覆上一個 / 或 ? 的指令,反向繼續尋找

vi may search past the bottom of the file and then start again at the top.
(Or, vi may search past the top and then start again at the bottom.)

[實作]現在請你詢找 "the" 這個字串三次,再反向找三次回到這個位置
步驟如下
    先按   /the   再按 RETURN.
    按三次 n
    按 N 直到你再次回到這個位置


總結
-------

    w     游標跳到下個word的開頭
    e     游標跳到下個word的字尾
    b     游標回到上個word的開頭

    $     移到游標所在行的行尾
    ^     移到該行第一個非空白的字元

    0     移到該行的開頭位置
    #|     移到該行的第 # 個位置   例: 5| 12|

  f char     尋找(FIND) 本行中下一個 char 字元
  t char     將游標移到本行中下一個 char 字元之前

  F char     尋找本行中前一個char所在的位置
  T char     移到本行中前一個 char 字元之後

    ;     重覆上一個 f, t, F, 或 T 的動作
    ,     反向重覆上一個 f, t, F, 或 T 的動作

    %     尋找有無對應的 () {} 或 []

    H   移到游標到畫面的最上方 (HIGHEST)
    M   移到游標到畫面的中間 (MIDDLE)
    L   移到游標到畫面的最下方

  m char   (MARK) 把這個地方標示成 char
  ' char   (quote character) 跳到被標為 char的那一行    
  ''       (按兩次') 回到剛才的位置

      G     GO to the last line in the file
    #G     GO to line #. (e.g., 3G , 5G , 175G )

      G     (GO) 跳到檔案的最後一行.
    #G     (GO to line #). 跳到第 # 行 (例: 3G , 5G , 124G )

    {     (左大括號) 跳到上一段的開頭
    }     (右大括號) 跳到下一段的的開頭.

    (     (左小括號) 移到這個句子的開頭
    )     (右小括號) 移到下一個句子的開頭

    [[   跳往上一個函式
    ]]   跳往下一個函式

  /string     向後尋找 string 這個字串
  ?string     往前尋找 string 這個字串

    n     重覆上一個 / 或 ? 的指令,繼續尋找
    N     重覆上一個 / 或 ? 的指令,反向繼續尋找

現在你應該已經能夠很順暢的在檔案中自由的移動游標了.尤其是若你的數
據機(modem)速度很慢時,這些指令更加顯的有用.請你繼續練習這些指令,
接下來再進行第三課: vi的剪貼功能 或第四課: vi的一些其他特殊的插入
技巧.加油!


-----------------------------------------------------------------------------------------------


[ 此文章被andyz在2005-05-18 19:57重新編輯 ]



Best Regard ... \(^o^)/ ... ﹒‧°∴°﹒☆°.
獻花 x0 回到頂端 [樓 主] From:台灣數位聯合 | Posted:2005-02-22 13:57 |

首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.062677 second(s),query:15 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言