在每個使用者的主目錄下,都有一個 vi 的設定檔".vimrc"或".exrc",使用者可以編輯它,使這些設定在每次啟動 vi 時,都有效。 例如,加入如下設定行: set nu 顯示行號 set nonu 不顯示行號 set ic 尋找時不考慮大小寫 set noic 尋找時考慮大小寫 說明: 在文本中[]表示選項或者簡寫掉的文字,但除了模式比對裡面的[],可參見模式比對。 源碼: vi vim 使用 vim 編輯器 首先簡單的說一下vi編輯器──unix的通用編輯器, 讀作vee-eye (visual editor的簡寫)。 (這裡的vim,是改進的vi, Vi Improved簡寫,Vim 由Bram Moolenaar編寫) vi的工作模式 分為命令模式和插入模式 以及 : ex模式; 按esc鍵就可以讓vi進入命令模式; 插入模式就是你輸入文本的模式了。 vi的一些簡單操作: 普通操作: 插入文本 命令 i 、a、I、A、o、O i 進入命令模式輸入 i ,這時候就是和普通的文字編輯器一般了; a 或者 輸入 a ,不同的是,a是在字元的後面插入追加文本,而i在字元的前面插入; I 行首插入; A 行尾插入。 o 游標下建立空行 O 游標上建立空行 修改刪除文本 命令 c、x、d、D cw 刪除當前位置到該位置單詞的末尾,外加插入文本; cw刪除的是英文單詞,中文不行的。 c$ or C 刪除當前位置到行末,外加插入文本。 x 只刪除當前字元 如果要刪一個中文字的話請用 2x (當然也可以用4x 8x) 因為一個漢字佔兩個字元。 cc 刪除一行,外加可以插入文本。 r 刪除當前字元,外加可以插入文本。 dw 只刪除當前位置到這個單詞末。 [n]dd 刪除[n]一行。 當然可以用 2dd 3dd 刪除兩行,三行。 D 刪除到行尾。 粘貼,複製,合并 命令 p、y、J、"(引號) p 當你執行上面的刪除操作後,你所刪除的文本會留在緩衝中,當你輸入 p 後會把這些刪除的文本粘貼到當前游標後面。 y 組合有(yw,4yy,y$等) //複製單詞,複製四行,複製到行末 複製後可用p進行粘貼 J 把下一行合并到當前行,注意J大寫 "[x]yy 命名你的緩衝區 在複製命令前加上冒號和名稱(a到z) 例如 "ryy "d2dd "zd)複製一行到r緩衝區,刪除2行到d緩衝區,刪除游標到句尾到z緩衝區。 "[x]p 粘貼x緩衝區到當前位置後。 預設有1~9緩衝區 為前9次刪除操作。 可視操作 命令 v、V、Ctrl+v 當用gvim可以用滑鼠選擇你需要複製,刪除的文本,然後按d(刪除)、p(粘貼)、y(複製)操作你的文本, 當然也可以和其他程式通過粘貼板進行共用資料。 v 對於xterm中的vim 則輸入命令 v 進入可視狀態,這時候你可以用右鍵進行複製粘貼操作 重複操作與撤消 命令 . (點號) 、 u 、U . 重複上一次的操作,當並不是那種重作,他只是重複你上次輸入的命令。 Ctrl+R 重做 u 撤消上次操作 U 撤消當前行進行的任意修改。 尋找文本 命令 /、?、n、N / 向後尋找文本進入命令模式輸入 /[你要尋找的文本]; 例如找edit 輸入 /edit ; ? 而向前尋找文本就是輸入 ?[你要尋找的文本] ; n 當有許多搜尋結果時,命令模式下輸入 n 就可以找下一個搜尋結果,而輸入 N N 則是反向下一個搜尋結果。 開啟,儲存與退出 先進入ex模式,就是在命令模式下輸入 : 再輸入命令。 命令 ZZ、 q、 w、 e、r :ZZ 進入命令模式 輸入 ZZ (大寫)就是儲存+退出; :w 儲存文本 進入命令模式 輸入 w 就是儲存; :q! 強行退出是輸入 q! ; :e! 撤消當前所有編輯,返回原始狀態的話,請輸入 e! ; :w [filename] 另存新檔就是 w [filename] 。 :e [filename] 開啟另外一個檔案(開啟新檔案前,請先儲存檔案。 :r [filename] 讀入filename內容到當前檔案的當前位置後 移動游標 命令 hjkl、(、)、{、}、e、w、b、gg、G hjkl 一般可直接用鍵盤上的方向鍵進行游標的移動。而page up/down 鍵就是前後翻頁了; 或者,命令模式下 按 h(左) j(下) k(上) l(右) 或者在這個基礎加上數字,進行幾行幾行的移動,例如 4j就表示向下移動四行。 nG 例如200G 就是移動200行了。而Ctrl+G就是顯示當前行資訊(多少行,在文本的位置); G 到檔案尾 gg 到檔案頭 e 另外 輸入 e 可以一單詞的移動游標, ( 當前句首 ) 下一句開始 例如 2) 向前移動兩個句子 { 段開始 } 下一段頭 b、w 後前以單詞為單位移動。 標記命令 m、‘(單引號)、`(反引號也就是 ~ 那裡那個鍵) m[x] 標記x(a~z)位置 例如 mb 標記當前游標位置為標誌b ’x 移動游標到x標記行的行首 `x 移動游標到x標記的原始游標位置 '' 移動到上一標記行首 `` 移動到上一標記原游標位; zl zh zs ze 視窗左滾 右滾 左開始 右結束 //可設定 :set sidescroll=32 設定滾動長度(我好象用不了這個命令) 其他 Ctrl+L 刷屏 return 到下一行行首 -、+ 移動游標上下一行,上下一行的行首(好象+號要用小鍵盤的+號才行); Ctrl+G 顯示當前行資訊 H 螢幕起點 M 螢幕中間 L 螢幕尾 組合使用例子 命令模式下 例子:現有文本 aaabbb cccdddeeefff (游標在第一行) 輸入 /aab斷行符號 d /ccc斷行符號 那就會刪除掉當前位置aab(包括aab), 到ccc前所有資料並複製資料到緩衝(和剪下差不多)。當然d也可用改成y做複製用途,再用p粘貼。 vim的ex狀態 當在: ex模式下可以用tab進行自動補齊命令(用: set nu 顯示行數) 並可以利用 | 可以將多個命令組合在同一提示符下 文本搜尋,替換,移動,刪除,複製 命令 :g/、:s/ 、:m 、:d、:co (或者:t) :g :g/[文本] 全域搜尋文本,游標移動到最後一個搜尋文本,並顯示所有資料加所在行。 :g!/[文本] 沒有[文本]的行 :s :[第n行],[到第m行]s/[要替換的]/[替換的] n-m行之間進行替換,如果沒有n,m那麼就進行當前行的替換 :%/s/[要替換的]/[替換的]/g 進行全域替換。 %表示每一行, 另外有 . 表示當前行, $ 表示最後一行,另外可用+-號表示該行的上下n行,例如.-2 表示當前行上面第二行 :m :[要移動的資料]m[移動的地方] 例子 :20,30m100 20-30行移動到100行前(最後一行是100行) 例子: :g/^$/d 刪除所有空行 d加上刪除動作 搜尋模式 .(點號) 任一個單字元,漢字用兩個點 .. * 匹配前面字元零個或者多個任意(並不表示任一字元) 例如 /abcdl* 就會尋找abcdl或者以abcd開始的,而尋找所有是 /.* ^ 表示從行首開始 $ $在運算式末表示以Regex要在行末。 / 轉義 /.表示找. /*表示找* //表示找/ [ ] [0~9]表示匹配0~9之間任意一個數字 同理有[A~Z]和[a~z],而[AB3a]表示找有A,B, 3,a其中任意一個字元。 /< , /> 單詞開始或者末尾以空格或者標點符號開始或者結束。 例如 inux/> 匹配linux. /r 斷行符號 /t 定位字元 執行sh命令 :![shell command] 例如 :!ls 添加資料到檔案末 >> 例子 :1,10w>>newfile 需要注意的是vim可以把一些命令組合起來應用 :1,3d | s/they/she/ 一到三行刪除,並把當前行they替換為she :.,/while/d 刪除當前行到匹配while行所有資料(包括當前行和含有while所在行) :/aaa/,/bbbb/d aaa到bbbb之間行刪除(包括這兩行) :/aaa/,/bbb/m. aaa到bbb行move到當前行 分屏 :[N]sp[lit] [filename] 另開視窗,高度是N行,並開啟filename檔案。 Ctrl+w [x] 準備進行視窗操作,其中x是按Ctrl+w後,需要選擇的功能鍵(可參見下一行) 例如Ctrl+w 再按t就會到頂端視窗 Ctrl+w [s/w/t/b/c/q/r/i/=] s 再分屏,w下一個視窗,t頂視窗,b底端視窗,c關閉視窗 q退出視窗 r迴圈視窗 i開啟並進入新視窗 =所有視窗同高 :hide 隱藏當前視窗,當不關閉該檔案緩衝(也就是說再次用 :e [filename] 開啟後依然是先前的檔案) :q 關閉視窗,並釋放緩衝。 :qa[!] 關閉所有視窗並強行退出vim; :on[ly] 只顯示當前視窗 :new [filename] 建立檔案並開啟新視窗。 :res[ize][n] :res[ize][+ -n] 改變視窗大小,或者增加減少行數 用vim編程 :make [arguments] 運行make 然後移動到第一個錯誤, :cf[ile] [!] [errorfile]讀取錯誤檔案,並移動到第一個錯誤處,!強迫vim移動到另外的緩衝區, :cl[ist] [!] 列出含有檔案名稱的錯誤,有!就列出所有錯誤, :cc[!] [n] 如果有n就顯示錯誤n,否則重新顯示當前錯誤, :cn[ext] 移動到下一個錯誤。 :cp 移動到上一個錯誤。 另外一個有用的編程功能是使用ctags(unix命令,給C語言中的函數打標記。這個命令與vi的tags結合使用) 先用ctags命令 :!ctags file.c 建立該c程式tags檔案,再在vi中使用 :tag [函數名] ,那麼vi就直接調出該c原檔案並跳到函數定義處。 例如: :!ctags *.c :tag aaa 其中bbb.c 中有aaa函數,那麼就跳到aaa的定義處 :tn 跳到下一個匹配標誌 :tp 上一個標誌 設定vim :set all 顯示所有選項。 :set nu[mber] 顯示行數。 :set binary 可讀二進位檔案 :syntax on 文法高亮 :set taglength=4 設定tag長度 記不住可使用tab鍵補齊命令(也可以顯示可以選擇的命令) vim的設定檔 .vimrc 在vim的安裝目錄下有一個vimrc_example.vim檔案,你可以copy到你的工作目錄上作為你的原始vim設定檔(檔案改名為.vimrc) vi引證 最後,這裡有關vi的認證:vi是完美的 論證:VI在羅馬數字中是六,小於六的自然數可以整除6的是1,2,3, 6=1X2X3; 而6有可以表示為6=1+2+3,可見VI是個完美的數字,從而VI也是完美的。 對於vim 羅馬數字中VIM可能表示為(1000-(5+1))=994,而剛好等於2×496+2,而496剛好可以被1,2,4,8,16,31,62,124,248等整除,而且1+2+4+8+16+31+62+124+248=496 因此496是個更完美的數字,可見vim比vi更加完美了。 |