免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7448 | 回复: 26
打印 上一主题 下一主题

来自鸟哥非常好的文章,vim使用详解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-25 20:20 |只看该作者 |倒序浏览
看了鸟哥的这vim命令使用详解,个人感觉非常不错,不敢独享,供大家一起参考,希望不要踩我!!
vim使用详解
vim使 用详解
转自:http://linux.vbird.org
2008年7月25日
感觉鸟歌写的文章详细,通俗,易懂,并且十分实用,先转载这篇供大家一起共享。
vi 的使用
基本上 vi 共分為三種模式,分別是『一般模式』、 『編輯模式』與『指令列命令模式』三種! 這三種模式的作用是:

    * 一般模式:
      以 vi 處理一個檔案的時後,一進入該檔案就是一般模式了。在這個模式中, 你可以使用『上下左右』按鍵來移動游標,您可以使用『刪除字元』或『刪除整行』來處理檔案內容, 也可以使用『複製、貼上』來處理您的文件資料。

    * 編輯模式:
      在一般模式中可以處理刪除、複製、貼上等等的動作,但是卻無法編輯的! 要等到您按下『i, I, o, O, a, A, r, R』等字母之後才會進入編輯模式。注意了!通常在 Linux 中,按下上述的字母時,在畫面的左下方會出現『 INSERT 或 REPLACE 』的字樣,才可以輸入任何字來輸入到您的檔案中!而如果要回到一般模式時, 則必須要按下『Esc』這個按鍵即可退出編輯模式。
    * 指令列命令模式:
      在一般模式當中,輸入『 : 或 / 或 ? 』就可以將游標移動到最底下那一行,在這個模式當中, 可以提供您『搜尋資料』的動作,而讀取、存檔、大量取代字元、離開 vi 、顯示行號 等等的動作則是在此模式中達成的!

簡單的說,我們可以將這三個模式想成底下的圖示來表示之:

vi 三種模式的相互關係
圖一、 vi 三種模式的相互關係

閒話不多說,我們底下以一個簡單的例子來進行說明吧!

小標題的圖示簡易執行範例
我們怎麼使用 vi 建立一個檔名為 test.txt 的資料呢?也是很簡單的啦, 整個步驟可以是這樣:

   1. 使用 vi 進入一般模式;

      [root@linux ~]# vi test.txt

      直接輸入『 vi 檔名』即可進入 vi 了!如下圖所示,左下角還會顯示這個檔案目前的狀態!如果是新建檔案會顯示 [New File],如果是已存在的檔案,則會顯示目前的檔名、行數與字元數,例如:『"/etc/man.config" 145L, 4614C』

      利用 vi 開啟一個檔案
      圖二、 利用 vi 開啟一個檔案

   2. 按下 i 進入編輯模式,開始編輯文字;

      在一般模式之中,只要按下 I, o, a 等字元,就可以進入編輯模式了!在編輯模式當中,您可以發現在左下角會出現 –INSERT- 的畫面,那就是可以輸入任意字元的提示囉!這個時候,鍵盤上除了 [Esc] 這個按鍵之外,其他的按鍵都可以視作為一般的輸入按鈕了,所以您可以進行任何的編輯囉! ( 註:在 vi 裡面, [tab] 這個按鈕所得到的結果與空白字元所得到的結果是不一樣的,特別強調一下! )

      進入 vi 的編輯模式
      圖三、 進入 vi 的編輯模式

   3. 按下 [ESC] 按鈕回到一般模式;

      好了,假設我已經按照上面的樣式給他編輯完畢了,那麼應該要如何退出呢?是的!沒錯!就是給他按下 [Esc] 這個按鈕即可!馬上你就會發現畫面左下角的 – INSERT – 不見了!

   4. 在一般模式中按下 :wq 儲存後離開 vi !

      OK,我們要存檔了,存檔並離開的指令很簡單,輸入『:wq』即可存檔離開!(注意了,按下 : 該游標就會移動到最底下一行去!)這時你在提示字元後面輸入『 ls -l 』即可看到我們剛剛建立的 test.txt 檔案啦!整個圖示有點像底下這樣:

      利用 vi 儲存檔案
      圖四、利用 vi 儲存檔案

如此一來,您的檔案 test.txt 就已經建立起來囉!很簡單吧!需要注意的是,如果您的檔案權限不對,例如為 -r--r--r-- 時,那麼可能會無法寫入,那麼可以使用『強制寫入』的方式嗎?可以!使用『:wq!』多加一個驚嘆號即可!不過,需要特別注意呦!那個是在『您的權限可以改變』的情況下才能成立的! 關於權限的概念,請參考一下 Linux 的檔案權限概念 囉!
小標題的圖示命令列內容說明
如前所述,所謂的命令列或命令模式,就是在最下面一行沒有顯示 『--INSERT--』或者『--REPLACE--』 字樣的時候。通常在命令列中的指令有下面幾種:(注意,當按下 『:』 時,游標會自動移動到螢幕的最下面一行!)

一般模式: 移動游標的方法
h 或 向左方向鍵(←)
        游標向左移動一個字元
j 或 向下方向鍵(↓)
        游標向下移動一個字元
k 或 向上方向鍵(↑)
        游標向上移動一個字元
l 或 向右方向鍵(→)
        游標向右移動一個字元
如果想要進行多次移動的話,例如向下移動 30 行,可以使用 "30j" 或 "30↓" 的組合按鍵, 亦即加上想要進行的次數(數字)後,按下動作即可!
[Ctrl] + [f]
        螢幕『向下』移動一頁,相當於 [Page Down]按鍵 (常用)
[Ctrl] +
        螢幕『向上』移動一頁,相當於 [Page Up] 按鍵 (常用)
[Ctrl] + [d]
        螢幕『向下』移動半頁
[Ctrl] +
        螢幕『向上』移動半頁
+
        游標移動到非空白字元的下一列
-
        游標移動到非空白字元的上一列
n<space>
        那個 n 表示『數字』,例如 20 。按下數字後再按空白鍵,游標會向右移動這一行的 n 個字元。例如 20<space> 則游標會向後面移動 20 個字元距離。
0
        這是數字『 0 』:移動到這一行的最前面字元處 (常用)
$
        移動到這一行的最後面字元處(常用)
H
        游標移動到這個螢幕的最上方那一行
M
        游標移動到這個螢幕的中央那一行
L
        游標移動到這個螢幕的最下方那一行
G
        移動到這個檔案的最後一行(常用)
nG
        n 為數字。移動到這個檔案的第 n 行。例如 20G 則會移動到這個檔案的第 20 行(可配合 :set nu)
gg
        移動到這個檔案的第一行,相當於 1G 啊! (常用)
n<Enter>
        n 為數字。游標向下移動 n 行(常用)
一般模式: 搜尋與取代
/word
        向游標之下尋找一個字串名稱為 word 的字串。例如要在檔案內搜尋 vbird 這個字串,就輸入 /vbird 即可! (常用)
?word
        向游標之上尋找一個字串名稱為 word 的字串。
n
        這個 n 是英文按鍵。代表『重複前一個搜尋的動作』的意思。舉例來說, 如果剛剛我們執行 /vbird 去向下搜尋 vbird 這個字串,則按下 n 後,會向下繼續搜尋下一個名稱為 vbird 的字串。如果是執行 ?vbird 的話,那麼按下 n 則會向上繼續搜尋名稱為 vbird 的字串!
N
        這個 N 是英文按鍵。與 n 剛好相反,為『反向』進行前一個搜尋動作。 例如 /vbird 後,按下 N 則表示『向上』搜尋 vbird 。
:n1,n2s/word1/word2/g
        n1 與 n2 為數字。在第 n1 與 n2 行之間尋找 word1 這個字串,並將該字串取代為 word2 !舉例來說,在 100 到 200 行之間搜尋 vbird 並取代為 VBIRD 則:
『:100,200s/vbird/VBIRD/g』。(常用)
:1,$s/word1/word2/g
        從第一行到最後一行尋找 word1 字串,並將該字串取代為 word2 !(常用)
:1,$s/word1/word2/gc
        從第一行到最後一行尋找 word1 字串,並將該字串取代為 word2 !且在取代前顯示提示字元給使用者確認 (confirm) 是否需要取代!(常用)
一般模式: 刪除、複製與貼上
x, X
        在一行字當中,x 為向後刪除一個字元 (相當於 [del] 按鍵), X 為向前刪除一個字元(相當於 [backspace] 亦即是倒退鍵) (常用)
nx
        n 為數字,連續向後刪除 n 個字元。舉例來說,我要連續刪除 10 個字元, 『10x』。
dd
        刪除游標所在的那一整列(常用)
ndd
        n 為數字。刪除游標所在的向下 n 列,例如 20dd 則是刪除 20 列 (常用)
d1G
        刪除游標所在到第一行的所有資料
dG
        刪除游標所在到最後一行的所有資料
d$
        刪除游標所在處,到該行的最後一個字元
d0
        那個是數字的 0 ,刪除游標所在處,到該行的最前面一個字元
yy
        複製游標所在的那一行(常用)
nyy
        n 為數字。複製游標所在的向下 n 列,例如 20yy 則是複製 20 列(常用)
y1G
        複製游標所在列到第一列的所有資料
yG
        複製游標所在列到最後一列的所有資料
y0
        複製游標所在的那個字元到該行行首的所有資料
y$
        複製游標所在的那個字元到該行行尾的所有資料
p, P
        p 為將已複製的資料在游標下一行貼上,P 則為貼在游標上一行! 舉例來說,我目前游標在第 20 行,且已經複製了 10 行資料。則按下 p 後, 那 10 行資料會貼在原本的 20 行之後,亦即由 21 行開始貼。但如果是按下 P 呢?那麼原本的第 20 行會被推到變成 30 行。 (常用)
J
        將游標所在列與下一列的資料結合成同一列
c
        重複刪除多個資料,例如向下刪除 10 行,[ 10cj ]
u
        復原前一個動作。(常用)
[Ctrl]+r
        重做上一個動作。(常用)
這個 u 與 [Ctrl]+r 是很常用的指令!一個是復原,另一個則是重做一次~ 利用這兩個功能按鍵,您的編輯,嘿嘿!很快樂的啦!
.
        不要懷疑!這就是小數點!意思是重複前一個動作的意思。 如果您想要重複刪除、重複貼上等等動作,按下小數點『.』就好了! (常用)
進入編輯模式
i, I
        插入:在目前的游標所在處插入輸入之文字,已存在的文字會向後退; 其中, i 為『從目前游標所在處插入』, I 為『在目前所在行的第一個非空白字元處開始插入』。 (常用)
a, A
        a 為『從目前游標所在的下一個字元處開始插入』, A 為『從游標所在行的最後一個字元處開始插入』。(常用)
o, O
        這是英文字母 o 的大小寫。o 為『在目前游標所在的下一行處插入新的一行』; O 為在目前游標所在處的上一行插入新的一行!(常用)
r, R
        取代:r 會取代游標所在的那一個字元;R會一直取代游標所在的文字,直到按下 ESC 為止;(常用)
上面這些按鍵中,在 vi 畫面的左下角處會出現『--INSERT--』或『--REPLACE--』的字樣。由名稱就知道該動作了吧!!特別注意的是,我們上面也提過了,你想要在檔案裡面輸入字元時, 一定要在左下角處看到 INSERT/REPLACE 才能輸入喔!
Esc
        退出編輯模式,回到一般模式中(常用)
指令列命令模式
:w
        將編輯的資料寫入硬碟檔案中(常用)
:w!
        若檔案屬性為『唯讀』時,強制寫入該檔案。不過,到底能不能寫入, 還是跟您對該檔案的檔案權限有關啊!
:q
        離開 vi (常用)
:q!
        若曾修改過檔案,又不想儲存,使用 ! 為強制離開不儲存檔案。
注意一下啊,那個驚嘆號 (!) 在 vi 當中,常常具有『強制』的意思~
:wq
        儲存後離開,若為 :wq! 則為強制儲存後離開 (常用)
:e!
        將檔案還原到最原始的狀態!
ZZ
        若檔案沒有更動,則不儲存離開,若檔案已經經過更動,則儲存後離開!
:w [filename]
        將編輯的資料儲存成另一個檔案(類似另存新檔)
:r [filename]
        在編輯的資料中,讀入另一個檔案的資料。亦即將 『filename』 這個檔案內容加到游標所在行後面
:n1,n2 w [filename]
        將 n1 到 n2 的內容儲存成 filename 這個檔案。
:! command
        暫時離開 vi 到指令列模式下執行 command 的顯示結果!例如
『:! ls /home』即可在 vi 當中察看 /home 底下以 ls 輸出的檔案資訊!
:set nu
        顯示行號,設定之後,會在每一行的字首顯示該行的行號
:set nonu
        與 set nu 相反,為取消行號!

特別注意,在 vi 中,『數字』是很有意義的!數字通常代表重複做幾次的意思! 也有可能是代表去到第幾個什麼什麼的意思。舉例來說,要刪除 50 行,則是用 『50dd』 對吧! 數字加在動作之前~那我要向下移動 20 行呢?那就是『20j』或者是『20↓』即可。

OK!會這些指令就已經很厲害了,因為常用到的指令也只有不到一半!通常 vi 的指令除了上面鳥哥註明的常用的幾個外,其他是不用背的,你可以做一張簡單的指令表在你的螢幕牆上, 一有疑問可以馬上的查詢呦!

小標題的圖示一個案例練習
來來來!測試一下您是否已經熟悉 vi 這個指令呢?請依照底下的需求進行您的指令動作。 (底下的操作為使用 FC4 的預設檔案來進行練習的。您可以在這裡下載: http://linux.vbird.org/linux_basic/0310vi/man.config。) 看看您的顯示結果與鳥哥的結果是否相同啊?!

   1. 請在 /tmp 這個目錄下建立一個名為 vitest 的目錄;
   2. 進入 vitest 這個目錄當中;
   3. 將 /etc/man.config 拷貝到本目錄底下(或由上述的連結下載 man.config 檔案);
   4. 使用 vi 開啟本目錄下的 man.config 這個檔案;
   5. 在 vi 中設定一下行號;
   6. 移動到第 58 行,向右移動 40 個字元,請問您看到的雙引號內是什麼目錄?
   7. 移動到第一行,並且向下搜尋一下『 bzip2 』這個字串,請問他在第幾行?
   8. 接著下來,我要將 50 到 100 行之間的 man 改為 MAN,並且一個一個挑選是否需要修改,如何下達指令?
   9. 修改完之後,突然反悔了,要全部復原,有哪些方法?
  10. 我要複製 51 到 60 行這十行的內容,並且貼到最後一行之後;
  11. 刪除 11 到 30 行之間的 20 行;
  12. 將這個檔案另存成一個 man.test.config 的檔名;
  13. 去到第 29 行,並且刪除 15 個字元;
  14. 儲存後離開吧!

整個步驟可以如下顯示:

   1. 『mkdir /tmp/vitest』
   2. 『cd /tmp/vitest』
   3. 『cp /etc/man.config .』
   4. 『vi man.config』
   5. 『:set nu』
   6. 先按下『58G』再按下『40→』會看到『/dir/bin/foo』這個字樣在雙引號內;
   7. 先執行『1G』或『gg』後,直接輸入『/bzip2』,則會去到第 116 行才對!
   8. 直接下達『 :50,100s/man/MAN/gc 』即可!
   9. (1)簡單的方法可以一直按『 u 』回復到原始狀態,(2)使用不儲存離開『 :q! 』之後,再重新讀取一次該檔案;
  10. 『51G』 然後再『 10yy 』之後按下『 G 』到最後一行,再給他『 p 』貼上十行!
  11. 『11G』 之後,再給他『 20dd 』即可刪除 20 行了;
  12. :w man.test.config
  13. 『29G』 之後,再給他『 15x 』即可刪除 15 個字元;
  14. 『:wq!』

如果您的結果都可以查的到,那麼 vi 的使用上面應該沒有太大的問題啦!剩下的問題會是在…..打字練習…。

小標題的圖示關於檔案的回復與暫存檔
另外,其實 vi 是具有『可回復』功能的呢!那麼 vi 憑什麼幫我們進行回復的功能呢? 很簡單啊!憑暫存檔啊!舉例來說,當我們編輯一個檔案時,假設名稱為 /tmp/passwd , 那麼在這個 /tmp 底下就會有一個暫存檔案,檔名為『 /tmp/.passwd.swp 』,這是一個隱藏檔, 我們所進行的一些修改都會暫時存在這個檔案當中,萬一在檔案修改過程中, 系統掛了,那麼下次你再重新 vi /tmp/passwd 時,系統就會告訴您,是否需要回復『Recovery』成修改過程中的模樣? 如果您按下 (R) ,嘿嘿!就可以將資料回復到修改過程的樣子,而不是原始檔案囉! 這是個很有用的功能喔! ^_^

這也就是說,如果有一天,您去 /tmp 底下,執行 ls -al 時,發現到底下有兩個檔案, 檔名分別為 passwd 與 .passwd.swp 的話,那麼 (1) 可能有人在編輯這個檔案; (2) 之前您在編輯這個檔案時,因為某些不知名的因素導致 vi 程式中斷,則該暫存檔就會存在。 如果是狀態 (2) ,則此時您可以將該 .passwd.swp 檔案刪除,或者是,直接 vi /tmp/passwd , 在 vi 出現是否回復時,選擇回復,然後儲存更新 /tmp/passwd ,之後再將這個 /tmp/.passwd.swp 檔案刪除即可!如果不刪除的話,那麼每次編輯這個檔案,都會告知您該檔案有問題啊! @_@

大標題的圖示vim 的額外功能
其實,目前大部分的 distributions 都以 vim 取代 vi 的功能了! 如果您使用 vi 後,卻看到畫面的右下角有顯示目前游標所在的行列號碼, 那麼您的 vi 已經被 vim 所取代囉~ 為什麼要用 vim 呢?因為 vim 具有顏色顯示的功能,並且還支援許多的程式語法 (syntax), 因此,當您使用 vim 編輯程式時( 不論是 C 語言,還是 shell script ), 我們的 vim 將可幫您直接進行『程式除錯 (debug)』的功能!真的很不賴吧!^_^

如果您在文字模式下,輸入 alias 時,出現這樣的畫面:

[root@linux ~]# alias
alias vi='vim'

這表示當您使用 vi 這個指令時,其實就是執行 vim 啦!如果您沒有這一行,那麼您就必須要使用 vim filename 來啟動 vim 囉!基本上, vim 的一般用法與 vi 完全一模一樣~沒有不同啦!那麼我們就來看看 vim 的畫面是怎樣囉!假設我想要編輯 /etc/man.config ,則輸入『vim /etc/man.config』

#
# Generated automatically from man.conf.in by the
# configure script.
#
# man.conf from man-1.5p
#
# For more information about this file, see the man pages man(1)
# and man.conf(5).
"man.config" 138L, 4506C                               1,1          Top

上面的圖示是 vim 一畫面一角~他有幾個特色要講:

   1. 最底下一行說明這個檔案的特色,包括 138 行,共 4506 字元等等。
   2. 那個 1,1 代表目前游標在第一行的第一個字元上。您可以看到第一行有個游標的存在啊!
   3. 那個 Top 則表示,這個畫面是整個檔案的最上方!

至少就有這些資訊。而在您移動游標時,那個 1,1 的游標定位也會跟著變動,是否很方便啊! 好了,底下我們就來談一談其他 vim 的用法吧!

小標題的圖示區塊選擇(Visual Block)
剛剛我們提到的簡單的 vi 操作過程中,幾乎提到的都是以行為單位的操作。那麼如果我想要搞定的是一個區塊範圍呢? 舉例來說,像底下這種格式的檔案:

192.168.1.1    host1.class.net
192.168.1.2    host2.class.net
192.168.1.3    host3.class.net
192.168.1.4    host4.class.net
.....中間省略......

這個檔案我將他放置到 http://linux.vbird.org/linux_basic/0310vi/hosts ,您可以自行下載來看一看這個檔案啊! 如果我想要複製的只是前面的 IP 數字部分,後面的主機名稱部分就不給他複製,那怎麼辦?這個時候就得需要使用區塊選擇(Visual Block)的功能了。當我們按下 v 或者 V 或者 [Ctrl]+v 時,這個時候游標移動過的地方就會開始反白,這三個按鍵的意義分別是:

區塊選擇的按鍵意義
v         字元選擇,會將游標經過的地方反白選擇!
V         行選擇,會將游標經過的行反白選擇!
[Ctrl]+v         區塊選擇,可以用長方形的方式選擇資料
y         將反白的地方複製起來
d         將反白的地方刪除掉

我們以上面的 IP 對應主機名稱為範例,如果想要複製的是 IP 的話,而且僅想要前面四行, 那麼我可以:

   1. 將游標移動到第一行的第一個字元 ( 1G );
   2. 然後按下 [Ctrl]+v (按著 [ctrl] 不放,再按下 v );
   3. 然後移動方向鍵,向下向右移動數格,讓整個反白區域涵蓋 191.168.1.1 到 192.168.1.4 ;
   4. 按下 y 複製 (此時反白會自動的不見) ;
   5. 移動到任何想要插入的區域,按下 p 就可以插入剛剛複製的區塊內容!舉例來說,移動到第 1 行的第 13 個字元處按下小寫的 p ,看看會怎樣?

這個區塊選擇在已經格式的檔案中,就會顯的很有幫助喔!尤其是我們想要大量複製其中一個區塊, 而不是整行複製的場合中,就會很有用的啦!

小標題的圖示多檔案編輯
假設一個例子,你想要將剛剛我們的 hosts 內的 IP 複製到您的 /etc/hosts 這個檔案去, 那麼該如何編輯?我們知道在 vi 內可以使用 :r filename 來讀入某個檔案的內容,不過,這樣畢竟是將整個檔案讀入啊!如果我只是想要部分內容呢?呵呵!這個時候多檔案同時編輯就很有用了。 我們可以使用 vim 後面同時接好幾個檔案來同時開啟喔!相關的按鍵有:

多檔案編輯的按鍵
:n         編輯下一個檔案
:N         編輯上一個檔案
:files         列出目前這個 vim 的開啟的所有檔案

這個功能也很棒啊!現在您可以做一下練習看看說!假設您要將剛剛鳥哥提供的 hosts 內的 IP 複製到您的 /etc/hosts 檔案內,那可以怎麼進行呢?可以這樣啊:

[root@linux ~]# vi hosts /etc/hosts
# 在這個檔案中利用上個小節提到的區塊選擇,按下 [ctrl]+v 來進行區塊選擇,並複製。
# 然後按下 :n 在指令列的地方輸入這玩意兒,就會轉到下一個檔案去,這個時候,
# 就可以按下 p 將剛剛複製的 IP 給貼到您的檔案中囉!如果您按下 :files ,則:

192.168.1.4    host4.class.net
192.168.1.5    host5.class.net
~
~
:files
  1 %a   "hosts"                        line 1
  2 #    "/etc/hosts"                   line 1
Hit ENTER or type command to continue

# 看到否?在指令列輸入 :files 就可以顯示目前所編輯的檔案資訊囉!

看到了吧?利用多檔案編輯的功能,可以讓您很快速的就將需要的資料複製到正確的檔案內。 當然囉,這個功能也可以利用視窗介面來達到,那就是底下要提到的多視窗功能。

小標題的圖示多視窗功能
想像兩個情況:

    * 當我有一個檔案非常的大,我查閱到後面的資料時,想要『對照』前面的資料, 是否需要使用 [ctrl]+f 與 [ctrl]+b 來跑前跑後查閱?
    * 我有兩個需要對照著看的檔案,不想使用前一小節提到的多檔案編輯功能;

這樣的情況下,開一個 vim 裡頭有兩個視窗的環境,就有需要啦!那麼如何開啟新視窗呢? 很簡單啊!在指令列模式輸入:『:sp {filename}』,那個 filename 可有可無, 如果想要在新視窗啟動另一個檔案,就加入檔名,否則僅輸入 :sp 時, 出現的則是同一個檔案在兩個視窗間!例如鳥哥使用 vim hosts 後,再以 :sp /etc/hosts , 結果出現如下圖示:

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       localhost.localdomain localhost
192.168.1.11    vbird-work
192.168.1.2     vbird-server
~
/etc/hosts                   5,1            All
192.168.1.1    host1.class.net
192.168.1.2    host2.class.net
192.168.1.3    host3.class.net
192.168.1.4    host4.class.net
192.168.1.5    host5.class.net
hosts                        1,1            Top

怎樣?帥吧!兩個檔案同時在一個螢幕上面顯示,您還可以利用『[ctrl]+w+j』及『[ctrl]+w+k』 在兩個視窗之間移動呢!這樣的話,複製啊、查閱啊等等的,就變的很簡單囉~ 指令的功能有很多,不過,您只要記得這幾個就好了:

多視窗情況下的按鍵功能
:sp [filename]         開啟一個新視窗,如果有加 filename, 表示在新視窗開啟一個新檔案,否則表示兩個視窗為同一個檔案內容(同步顯示)。
[ctrl]+wj         按鍵的按法是:先按下 [ctrl] 不放, 再按下 w 後放開所有的按鍵,然後再按下 j ,則游標可移動到下方的視窗。
[ctrl]+wk         同上,不過游標移動到上面的視窗。
[ctrl]+wq         其實就是 :q 結束離開啦! 舉例來說,如果我想要結束下方的視窗,那麼利用 [ctrl]+wj 移動到下方視窗後,按下 :q 即可離開, 也可以按下 [ctrl]+wq 啊!

论坛徽章:
0
2 [报告]
发表于 2008-07-25 22:51 |只看该作者
我下意识认为vim有两种模式:命令和编辑

其实几种模式又有多重要?重要是要掌握它!!

论坛徽章:
0
3 [报告]
发表于 2008-07-25 23:13 |只看该作者
三种吧,一种是编辑,hjkl移动,输入等,一种是操作(dd删除这一行),一种是ed模式,就是:g//s///g这种。

论坛徽章:
0
4 [报告]
发表于 2008-07-25 23:18 |只看该作者
何止三种模式,最少有6种!

论坛徽章:
0
5 [报告]
发表于 2008-07-25 23:18 |只看该作者
写的不错,感觉还不是很全。有些不常用,但是很实用的东西没有添加进去。

论坛徽章:
0
6 [报告]
发表于 2008-07-25 23:20 |只看该作者
原帖由 __lxmxn__ 于 2008-7-25 23:18 发表
何止三种模式,最少有6种!


哪六种?

论坛徽章:
0
7 [报告]
发表于 2008-07-25 23:50 |只看该作者

回复 #6 无声无息 的帖子

普通模式
插入模式
命令模式
普通选择模式
行选择模式
列选择模式
命令编辑模式
……

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2008-07-26 00:02 |只看该作者
原帖由 __lxmxn__ 于 2008-7-25 23:50 发表
普通模式
插入模式
命令模式
普通选择模式
行选择模式
列选择模式
命令编辑模式
……

学习`~~~~~~~~~~~~~~

论坛徽章:
0
9 [报告]
发表于 2008-07-26 00:06 |只看该作者
原帖由 __lxmxn__ 于 2008-7-25 23:50 发表
普通模式
插入模式
命令模式
普通选择模式
行选择模式
列选择模式
命令编辑模式
……



行选择模式
列选择模式

落后了,找资料看看

论坛徽章:
0
10 [报告]
发表于 2008-07-26 00:16 |只看该作者
稍微对比着原文写了一些
还有的下次再整理,不知道是不是有用:)

1,过滤
:1,$ !sort
这样你可以不用离开vi就可以对文本内容进行排序
同样的你可以把sort换成sed,awk。。。。

2,列出编辑文件名
:ar
这样你可以看到你正在编辑的文件,前面已经编辑了几个,后面还有几个

3,tags
如果已经用ctags创建了标签,可以用:ta xxx定位到xxx的定义
用:pop来返回(注,有些版本的vi不支持这个操作)

4,vi的版本
vi的版本man是man不出来的,一般是
:ve
来显示

5,空格vi打开时候文件格式
你可以在文件头或者尾都可以。比如在文件头加上如下两句
/* ex: set sw=2 : */
/* ex: set ts=2 : */
当然,某些版本的vi不支持。我遇到的大多数的都是支持的吧。

6,:g/pattern/ya A
我喜欢用它把定义收集到一起,放到文本顶端。当然你可以用其他的方法做到

7,\<pattern\>可以用来匹配一个词

8,s/pattern/~/[g]
~表示上一次你替换时候使用的串
比如:
文件中有
x char (5)
y varchar (6)
你可能用
:s/\([^  ]\{1,\}\)[      ]*char[       ]*(\([^)]\{1,\}\).*/char \1[\2+1]; \/*
this is defination of \1 *\//
把x char (5)变成了 char x[5+1]; /* thi is defination of x */
发现对于varchar也是需要变成char的定义,和之前一样的处理。
你肯定不希望
:s/\([^  ]\{1,\}\)[      ]*varchar[       ]*(\([^)]\{1,\}\).*/char \1[\2+1]; \/*
this is defination of \1 *\//
太罗嗦了,要是被替换的串更长????
有了~就方便多了
:s/\([^  ]\{1,\}\)[      ]*varchar[       ]*(\([^)]\{1,\}\).*/~/

9,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP