本章提供足夠的信息使你用夠使用 Vim 來做基本的編輯。這裏提供的方法不一定是高效 |02.1| 第一次運行 Vim 下一章:|usr_03.txt| 移動 -------------------------------------------------------------------------------- *02.1* 第一次運行 Vim 啓動 Vim 的命令如下: gvim file.txt 在 UNIX 操作系統中,你可以在任意命令提示符下輸入這個命令。如果你用的是 Microsoft +---------------------------------------+ 以波紋線(~)開頭的行表示該行在文件中不存在。換句話說,如果 Vim 打開的文件不能充滿 gvim 命令建立一個新窗口用於編輯。如果你用的是這個命令: vim file.txt 則編輯在命令窗口內進行。換句話說,如果你在 xterm 中運行,編輯器使用 xterm 窗口。 -------------------------------------------------------------------------------- *02.2* 插入文本 Vim 是一個多模式的編輯器。就是說,在不同模式下,編輯器的響應是不同的。在普通模式 iA very intelligent turtle 輸入"turtle"後,你通過輸入回車開始一個新行。最後,你輸入 <Esc> 鍵退出插入模式而 +---------------------------------------+ 要看到你在什麼模式,輸入如下命令: :set showmode 你會發現當你敲入冒號後,Vim 把光標移到窗口的最後一行。那裏是你輸入“冒號命令” +---------------------------------------+ 如果你輸入<Esc>回到普通模式,最後一行又變成空白。 Vim 新手常常遇到的一個問題是不知道自己在什麼模式下,可能是因爲忘了,也可能 -------------------------------------------------------------------------------- *02.3* 移動光標 回到普通模式後,你可以使用如下命令移動光標: h 左 *hjkl* 這些命令看起來是隨便選的。無論如何,誰聽說過用 l 表示右的?但實際上,作這些選擇 Note: 記住這些命令的一個方法是:h 在左邊,l 在右邊,j 指着下面。用圖表示如下: k 學習這些命令的最好方法是使用它。用 "i" 命令輸入更多的文字。然後用 hjkl 鍵移動 -------------------------------------------------------------------------------- *02.4* 刪除字符 要刪除一個字符,把光標移到它上面然後輸入 "x"。(這是對以前的打字機的一種迴歸, +---------------------------------------+ 現在你可以輸入新的字符了,例如,通過輸入: iA young <Esc> 這個命令啓動一次插入操作(那個"i"),並插入 "A young",然後退出 +---------------------------------------+ 要刪除一整行,使用 "dd" 命令,後一行會移上來填掉留下的空行: +---------------------------------------+ 刪 除 一 個 分 行 符 在 Vim 中你可以把兩行連起來,這意味着兩行間的換行符被刪除了。"J" 命令 A young intelligent 把光標移到第一行,然後按 "J": A young intelligent turtle -------------------------------------------------------------------------------- *02.5* 撤銷與重做 假設現在你刪得太多了。當然,你可以重新輸入需要的內容。不過,你還有一個更簡單的 A young intelligent turtle 現在輸入 xxxxxxx 刪除 "A young"。結果如下: intelligent turtle 輸入"u" 撤銷最後一個刪除操作。那個刪除操作刪除字符 g,所以撤銷命令恢復這個字符: g intelligent turtle 下一個 u 命令恢復倒數第二個被刪除的字符: ng intelligent turtle 下一個 u 命令恢復 u,如此類推: ung intelligent turtle Note: 如果你撤銷得太多,你可以輸入CTRL-R(redo)回退前一個命令。換句話說,它撤銷 young intelligent turtle 有一個特殊版本的撤銷命令:"U" (行撤銷)。行撤銷命令撤銷所有在前一個編輯行 A very intelligent turtle A intelligent turtle A intelligent "U" 命令本身就是一個改變操作,"u" 命令撤銷該操作,CTRL-R 命令重做該操作。 -------------------------------------------------------------------------------- *02.6* 其它編輯命令 Vim 有大量的命令可以修改文本。參見|Q_in|和下文。這裏是一些經常用到的: 添 加 "i" 命令在光標所在字符前面插入字符。一般情況下,這就夠用了,但如果你剛好想在 and that's not saying much for the turtle. 把光標移到行尾的句號上。然後輸入 "x" 刪除它。現在光標處於一行的尾部了,現在輸入 a!!!<Esc> 添加三個感嘆號到 turtle 的 "e" 後面: and that's not saying much for the turtle!!! "o" 命令在光標下方建立一個新的空行,並把 Vim 切換到插入模式。然後你可以在這個 A very intelligent turtle 如果你現在用 "o" 命令並輸入新的文字: 結果會是: A very intelligent turtle "O" 命令(大寫)在光標上方打開一個新行。 假定你想向上移動 9 行,你可以輸入 "kkkkkkkkk" 或者你可以輸入"9k"。實際上, -------------------------------------------------------------------------------- *02.7* 退出 使用 "ZZ" 命令可以退出。這個命令保存文件並退出。 有時你會做了一系列的修改才突然發現還不如編輯之前。不用擔心,Vim 有“放棄修改 :q! 別忘了按回車使你的命令生效。 這個命令執行的細節是:命令有三部分,包括冒號(:),它使 Vim 進入命令模式, E37: No write since last change (use ! to override) 通過指定強制執行,你實際上在告訴 Vim:“我知道我所做的看起來很傻,但我長大了, 如果你放棄修改後還想重新編輯,用 ":e!" 命令可以重新裝載原來的文件。 -------------------------------------------------------------------------------- *02.8* 尋求幫助 所有你想知道的東西,都可以在 Vim 幫助文件中找到答案,隨便問! :help 你還可以用第一個功能鍵 <F1>。如果你的鍵盤上有一個 <Help> 鍵,可能也有效。 當你閱讀幫助的時候,你會發現有一些文字被一對豎線括起來了(例如|help|)。這表示 要獲得特定主題的幫助,使用如下命令: :help {主題} 例如,要獲得 "x" 命令的幫助,輸入如下命令: :help x 要知道如何刪除文本,使用如下命令: :help deleting 要獲得所有命令的幫助索引,使用如下命令: help index 如果你需要獲得一個包含控制字符的命令的幫助(例如 CTRL-A),你可以在它前面 help CTRL-A Vim 有很多模式。在默認情況下,幫助系統顯示普通模式的命令。例如,如下命令顯示 :help CTRL-H 要表示其他模式,可以使用模式前綴。如果你需要插入模式的命令幫助,使用 "i_" 前 :help i_CTRL-H 當你啓動 Vim,你可以使用一些命令行參數。這些參數以短橫線開頭(-)。例如知道要-t :help -t Vim 有大量的選項讓你定製這個編輯器。如果你要獲得選項的幫助,你需要把它括在一個 :help 'number' 如果你看到一個你不能理解的錯誤信息,例如: E37: No write since last change (use ! to override) 你可以使用使用E開頭的錯誤號找關於它的幫助: :help E37 |03.1| 詞移動 下一章:|usr_04.txt| 做小改動 -------------------------------------------------------------------------------- *03.1* 詞移動 要移動光標向前跳一個詞,可以使用 "w" 命令。象大多數 Vim 命令一樣,你可以在命令前 This is a line with example text 要注意的是,如果光標已經在一個單詞的詞首,"w" 移動到下一個單詞的詞首。 This is a line with example text 還有一個 "e" 命令可以移到下一個單詞的詞末,而 "ge" 則移動到前一個單詞的末尾: This is a line with example text 如果你在一行的最後一個單詞,"w" 命令將把你帶到下一行的第一個單詞。這樣你可以 一個詞以非單詞字符結尾,例如 ".","-" 或者 ")"。要改變 Vim 使用的 "分詞符", ge b w e 組合運用這些大寫和小寫的命令,你可以很快地在一段中前後移動。 -------------------------------------------------------------------------------- *03.2* 移動到行首或行尾 "$" 命令把光標移動到當前行行尾。如果你的鍵盤上有 <End> 鍵,也可以完成相同的功能。 "^" 命令把光標移動到當前行的第一個非空字符,而 "0" 命令則移到一行的第一個字符, ^ (這裏 "....." 表示空白字符) 象大多數移動命令一樣,"$" 命令接受個次數前綴。但是 "移動到一行的行尾n次" 沒 -------------------------------------------------------------------------------- *03.3* 移動到一個指定的字符 單字符查找命令是最有用的移動命令之一。"fx" 命令向前查找本行中的字符 x。提示: To err is human. To really foul up you need a computer. 這個例子還演示了用 "fy" 命令移動到 "really" 的詞尾。 To err is human. To really foul up you need a computer. "F" 命令用於向左查找: To err is human. To really foul up you need a computer. "tx" 命令與 "fx" 相似,但它只把光標移動到目標字符的前一個字符上。提示:"t" To err is human. To really foul up you need a computer. 這四個命令可以通過 ";" 命令重複,"," 命令則用於反向重複。無論用哪個命令,光標 有時你啓動了一個查找命令後才發現自己執行了一個錯誤的命令。例如,你啓動了一個 -------------------------------------------------------------------------------- *03.4* 括號匹配 當你寫程序的時候,你經常會遇到嵌套的()結構。這時,"%" 是一個非常方便的命令 % 這個命令也可適用於 [] 和 {}。(可用'matchpairs'選項定義) 當光標不在一個有用的字符上,"%" 會先向前找到一個。比如當光標停留在上例中的行 if (a == (b * c) / d) -------------------------------------------------------------------------------- *03.5* 移動到指定的行 如果你是一個 C 或者 C++ 程序員,你對下面這樣的錯誤信息應該非常熟悉: prog.c:33: j undeclared (first use in this function) 這表示你可能要移動到 33 行去作一些修改了。那麼怎樣找到 33 行?一個辦法是執行 | first line of a file ^ 另一個定位行的方法是使用帶數字前綴的 "%" 命令。例如,"50%" 移動到文件的中間, 前面的描述假定你想移動到文件中的某一行,而不在乎它是否可見。那麼如何移動到視野 +---------------------------+ 提示:"H" 表示 "Home","M" 表示 "Middle" 而 "L" 表示 "Last"。 -------------------------------------------------------------------------------- *03.6* 確定當前位置 要確定你在文件中的位置,有三種方法: 1. 使用 CTRL-G 命令,你會獲得如下消息(假定 'ruler' 選項已經被關閉): "usr_03.txt" line 233 of 650 --35%-- col 45-52 這裏顯示了你正在編輯的文件的名稱,你所處的當前行的行號,全文的總行數,光標 2. 設置 'number' 選項。這會在每行的前面加上一個行號: :set number 要重新關閉這個選項: :set nonumber 由於'number'是一個布爾類型的選項,在它前面加上 "no" 表示關閉它。布爾選項只會 3. 設置 'ruler' 選項。這會在 Vim 窗口的右下角顯示當前光標的位置: :set ruler 使用 'ruler' 的好處是它不佔多少地方,從而可以留下更多的地方給你的文本。 -------------------------------------------------------------------------------- *03.7* 滾屏 CTRL-U 命令向下滾動半屏。想象一下通過一個視口看着你的文本,然後把這個視口向上移動 +----------------+ 每次滾一行的命令是 CTRL-E(上滾)和 CTRL-Y(下滾)。可以把 CTRL-E 想象爲是多給你 向前滾動一整屏的命令是 CTRL-F(實際上會留下兩行不滾動)。反向的命令是 CTRL-B。 移動中的一個常見問題是,當你用 "j" 向下移動的時候,你的光標會處於屏幕的底部, +------------------+ +------------------+ "zt" 把光標所在行移動到屏幕的頂部,而 "zb" 則移動到屏幕的底部。Vim 中還有另外 -------------------------------------------------------------------------------- *03.8* 簡單查找 查找命令是 "/String"。例如,要查找單詞 "include",使用如下命令: /include 你會注意到,當你輸入 "/" 的時候,光標移到了 Vim 窗口的最後一行,這與 "冒號命令" Note: 要查找下一個匹配可以使用 "n" 命令。用下面命令查找光標後的第一個 #include: /#include 然後輸入 "n" 數次。你會移動到後面每一個 #include。如果你知道你想要的是第幾個, "?" 命令功能與 "/" 的功能類似,但是是反方向查找: ?word "N" 命令在反方向重複前一次查找。因此,在 "/" 命令後執行 "N" 命令是向後查找, 通常,你必須區分大小寫地輸入你要查找的內容。但如果你不在乎大小寫。可以設置 :set ignorecase 如果你現在要查找 "word",它將匹配 "word" 和 "WORD"。如果想再次區分大小寫: :set noignorecase 假設你執行了三個查找命令: /one 現在,讓我們輸入 "/" 啓動一次查找,但先不按下回車鍵。現在按 <Up>(上箭頭),Vim 如果你知道前面用過的一個模式以什麼開頭,而且你想再使用這個模式的話,可以在輸入 冒號開頭的命令也有歷史記錄。這允許你取回前一個命令並再次執行。這兩種歷史記錄 假設你在文本中看到一個單詞 "TheLongFunctionName" 而你想找到下一個相同的單詞。 如果你輸入 "/the",你也可能找到 "there"。要找到以 "the" 結尾的單詞,可以用: /the> "/>" 是一個特殊的記號,表示只匹配單詞末尾。類似地,"/<" 只匹配單詞的開頭。 /<the> 這不會匹配 "there" 或者 "soothe"。注意 "*" 和 "#" 命令也使用了 "詞首" 和 "詞尾" 當你編輯一個程序的時候,你看見一個變量叫 "nr"。你想查一下它在哪被用到了。你可以 :set hlsearch 現在如果你查找 "nr",Vim會高亮顯示所有匹配的地方。這是一個很好的確定變量在哪被使 :set nohlsearch 然後你又需要在下一次查找的時候又切換回來。如果你只是想去掉高亮顯示的東西,用如下 :nohlsearch 這不會復位 hlsearch 選項。它只是關閉高亮顯示。當你執行下一次查找的時候,高亮功能 調 節 查 找 方 式 有一些選項能改變查找命令的工作方式。其中有幾個是最基本的: :set incsearch 這個命令使 Vim 在你輸入字符串的過程中就顯示匹配點。用這個可以檢查正確的地方是否已經 :set nowrapscan 這個選項在找到文件結尾後停止查找。或者當你往回查找的時候遇到文件開頭停止查找。默認 如果你喜歡前面的選項,而且每次用 Vim 都要設置它,那麼,你可以把這些命令寫到 :scriptnames 編輯這個文件,例如,象下面這樣: :edit ~/.vimrc 然後在文中加一行命令來設置這些選項,就好像你在 Vim 中輸入一樣,例如: Go:set hlsearch<Esc> "G" 移動到文件的結尾,"o" 開始一個新行,然後你在那裏輸入 ":set" 命令。 ZZ 現在如果你重新啓動 Vim,'hlsearch' 選項就已經被設置了。 -------------------------------------------------------------------------------- *03.9* 簡單的查找模式 Vim 用正則表達式來定義要查找的對象。正則表達式是一種非常強大和緊湊的定義查找模式 行 首 與 行 尾 ^字符匹配行首。在美式英文鍵盤上,它在數字鍵 6 的上面。模式 "include" 匹配一行中 我們在下面的例子中用 "x" 標記出被 "the" 模式匹配的位置: the solder holding one of the chips melted and the 用 "/the$" 則匹配如下位置: the solder holding one of the chips melted and the 而使用 "/^the" 則匹配: the solder holding one of the chips melted and the 你還可以試着用這個模式: "/^the$",它會匹配僅包括 "the" 的行。並且不包括空格。 匹 配 任 何 單 個 字 符 點 "." 字符匹配任何字符。例如,模式 "c.m" 匹配一個第一個字符是c,第二個字符是 We use a computer that became the cummin winter. 如果你確實想匹配一個點字符,你可以在前面加一個反斜槓去消除它的特殊含義。 We use a computer that became the cummin winter. 但如果你查找 "ter/.",你只會匹配第二個位置。 -------------------------------------------------------------------------------- *03.10* 使用標記 當你用 "G" 命令跳到另一個地方,Vim 會記住你從什麼地方跳過去的。這個位置成爲一個 `` ` 用單引號 ' 也可以。 33G 你首先跳到第 33 行,然後查找以 "The" 開頭的一行,然後用 CTRL-O 你會跳回到 33 行。 Note: ":jumps" 命令能輸出一個你可以跳往的位置的列表。最後一個你使用的到的標記會用 Vim 允許你在文本中放置自定義的標記。命令 "ma" 用 a 標記當前的光標位置。你可以在 `a 命令 'mark(單引號加上一個標記)會移到標記所在行的行首。這與 `mark 命令是不同的, 標記在需要處理一個文件的兩個相關地方的時候非常有用。假設你在處理文末的時候需要 ms 然後移動到你需要處理的地方,再設置一個標記 e (end): me 現在你可以隨意移動,當你需要看開頭的地方,可以使用這個命令移到那裏: 's 然後使用 '' 跳回來。或者用 'e 跳到你正在處理的文尾的地方。 你可以用如下命令取得所有的標記的列表: :marks 你會注意到有一些特殊的標記,包括: ' 跳轉前的位置 |04.1| 操作符與動作 下一章: |usr_05.txt| 選項設置 -------------------------------------------------------------------------------- *04.1* 操作符與動作 在第二章你已經學過使用 "x" 命令來刪除一個字符以及通過個數前綴,例如 "4x" 去刪 To err is human. To really foul up you need a computer. To err is human. you need a computer. Vim 只刪除從當前位置到 "動作" 把光標移動到的位置的前一個位置。這是因爲 Vim 認爲 To err is human. you need a computer. To err is human. a computer. 是否包括光標所在的字符取決與你使用的移動命令。在參考手冊中,當不包括這個字符時, "$" 命令移動到行尾。所以,"d$" 命令從當前的位置一直刪除到本行行尾。這是一個 To err is human. a computer. To err is human 以上定義了一個命令組合模式:操作符-動作。你首先輸入一個操作符命令,例如,"d" -------------------------------------------------------------------------------- *04.2* 修改文本 另一個操作符命令是 "c",表示修改,change。它的作用方式與 "d" 操作符相似,只 To err is human To be human 這裏 "c2wbe<Esc>" 包括如下操作: c 修改操作符 如果你留意,你會發現一個奇怪的地方:human 前面的空格沒有被刪除。有一句諺語說道: 像 "dd" 可以刪除一行一樣,"cc" 修改一整行。但它會保留這一行的下縮進 (前面的 "d$" 刪除到行尾;"c$" 則修改到行尾。這就象先用 "d$" 刪除一行再用 "a" 啓動 有些 "操作符-動作" 命令由於經常被使用,所以被設置爲單字符命令: x 表示 dl (刪除當前光標下的字符) 命令 "3dw" 和 "d3w" 都是刪除3個單詞。如果你非要尋根問底,那麼:"3dw" 表示 "r" 命令不是操作符。它只是等你輸入一個字符然後用這個字符替換當前光標上的字 there is somerhing grong here There is something wrong here 通過個數前綴,"r" 命令可以使多個字符被同一個字符替換,例如: There is something wrong here There is something xxxxx here 要用換行符替換一個字符可以用命令 "r<Enter>"。這會刪除一個字符並插入一個換行 -------------------------------------------------------------------------------- *04.3* 重複一個修改 "." 是 Vim 中一個非常簡單而有用的命令。它重複最後一次的修改操作。例如,假設你在 To <B>generate</B> a table of <B>contents "." 命令重複任何除 "u" (undo),CTRL-R (redo) 和冒號命令外的修改。 再舉一個例子:你想把 "four" 修改成"five"。有好幾個地方都要作這種修改。你可 /four<Enter> 找到第一個 "four" -------------------------------------------------------------------------------- *04.4* 可視模式 要刪除一些簡單的東西,用 "操作符-動作" 命令可以完成得很好。但很多情況下,並 你可以用 "v" 命令啓動可視模式。你可以移動光標到需要的地方。當你這樣做的時候, This is an examination sample of visual mode This is an example of visual mode 但你這樣做的時候,你不需要真的算要按l多少次,你可以在按 "d" 前清楚得看到哪些東西 如果任何時候你改了注意,只用按一下 <Esc> 就能退出可視模式。 如果你想對行做操作,可以使用 "V" 命令來啓動可視模式。你會發現在你作任何移動之 +------------------------+ 塊 選 擇 如果你要處理一個矩形塊內的文本,可以使用 CTRL-V 啓動可視模式。這在處理表格時 name Q1 Q2 Q3 要刪除中間 "Q2" 這一欄,把光標移動到 "Q2" 的 "Q" 上面。按 CTRL-V 啓動塊可視模式。 如果你在可視模式下選中了一些文字,然後你又發現你需要改變被選擇的文字的另一端, 當使用塊可視模式的時候,你會有四個角,"o" 只是把你移到對角上。而用 "O" 則能 Note: "o" 和 "O" 在可視模式下與在普通模式下的作用有很大的不同;在普通模式下, -------------------------------------------------------------------------------- *04.5* 移動文本 當你用 "d","x" 或者其它命令刪除文本的時候,這些文字會被存起來。你可以用 p 命 a line a line a line 由於你刪除的是一整行,"p" 命令把該行插入到光標下方。如果你刪除的是一行的一部 Some more boring try text to out commands. Some more boring text to out commands. Some more boring text to try out commands. "P" 命令象 "p" 一樣也是插入字符,但插入點在光標前面。當你用 "dd" 刪除一行, 你可以執行這個命令多次,每次會插入相同的文本。 "p" 和 "P" 命令接受個數前綴,被插入的文本就會被插入指定的次數。所以 "dd" 後 經常發生這樣的情況,當你輸入字符的時候,你的手指比你的腦子轉得快(或者相反?)。 teh th the -------------------------------------------------------------------------------- *04.6* 拷貝文本 要把文本從一個地方拷貝到另一個地方,你可以先刪除它,然後用 "u" 命令恢復,再用 由於 "y" 是一個操作符,所以 "yw" 命令就是拷貝一個單詞了。當然了,個數前綴也是 let sqr = LongVariable * let sqr = LongVariable * let sqr = LongVariable * LongVariable 注意:"yw" 命令包括單詞後面的空白字符。如果你不想要這個字符,改用 "ye" 命令。 "yy" 命令拷貝一整行,就像 "dd" 刪除一整行一樣。出乎意料地是,"D" 刪除到行尾而 a text line yy a text line a text line -------------------------------------------------------------------------------- *04.7* 使用剪貼板 如果你使用 Vim 的 GUI 版本 (gvim),你可以在 "Edit" 菜單中找到 "Copy" 項。你可以 如果你已經從其它程序中拷貝了一些文字到剪貼板,你可以在 Vim 中用 Edit/Paste 菜單 "Cut" 菜單項會在把文字拷進剪貼板前刪除它。"Copy","Cut" 和 "Paste" 命令在彈出 如果你用的不是 GUI,或者你根本不喜歡用菜單,你只能用其它辦法了。你還是可以用普通 "*yy 要粘貼回來: "*p 這僅在支持剪貼板的 Vim 版本中才能工作。關於剪貼板的更多內容請參見 |09.3| 和 -------------------------------------------------------------------------------- *04.8* 文本對象 如果你在一個單詞的中間而又想刪掉這個單詞,在你用 "dw" 前,你必須先移到這個單詞的 this is some example text. this is some text. "daw" 的 "d" 是刪除操作符。"aw" 是一個文本對象。提示:"aw" 表示 "A Word" 使用文本對象是 Vim 中執行修改的第三種方法。我們已經有 "操作符-動作" 和可視模式 用 "cis" 可以改變一個句子。看下面的句子: Hello there. This 移動到第二行的開始處。現在使用 "cis": Hello there. Just 現在你輸入新的句子 "Another line.": Hello there. Another line. Just "cis" 包括 "c"(change,修改)操作符和 "is" 文本對象。這表示 "Inner 你還可以在可視模式下使用文本對象。這樣會選中一個文本對象,而且繼續留可視模式, 你可以在這裏找到一個詳細的文本對象的列表:|text-objects|。 -------------------------------------------------------------------------------- *04.9* 替換模式 "R" 命令啓動替換模式。在這個模式下,你輸入的每個字符都會覆蓋當前光標上的字符。 This is text. This is interesting. 你可能會注意到,這是用十二個字符替換一行中的五個字符。如果超出行的範圍,"R" 命 你可以通過 <Insert> 在插入模式和替換模式間切換。 但當你使用 <BS>(退格鍵)進行修正時,你會發現原來被替換的字符又回來了。這就好像 -------------------------------------------------------------------------------- *04.10* 結論 操作符,移動命令和文本對象可以有各種組合。現在你已經知道它是怎麼工作了,你可以 你可以在這裏找到一個操作符的列表:|operator| 還有很多方法可以刪除文本。這是一些經常用到的: x 刪除光標下的字符("dl"的縮寫) 如果你用 "c" 代替 "d",這會變成修改命令;而改用 "y",則變成拷貝命令,等等等等。 還有一些常用的命令,放在哪一章都不合適,列在這裏: ~ 修改光標下字符的大小寫,並移動到下一個字符。這不是一個操作符 I 移到當前行的第一個非空字符並啓動插入模式 A 移動到行尾並啓動插入模式 Vim 可以按你的需要進行設置。本章告訴你怎樣使 Vim 用你指定的選項啓動,怎樣增加插件 |05.1| vimrc 文件 下一章:|usr_06.txt| 使用語法加亮 -------------------------------------------------------------------------------- *05.1* vimrc 文件 可能你已經厭倦了輸入那些經常用到的命令了。要讓 Vim 用你習慣的設置啓動,你可以 如果你不知道你的 vimrc 在什麼地方,可以使用如下命令: :scriptnames 命令列出的文件列表開頭的幾個中應該有一個叫 ".vimrc" 或者 "_vimrc" 的文件在你的 對於 Unix 系統,肯定是如下文件: ~/.vimrc 對於 MS-DOS 和 MS-Windows,常常使用下面其中一個文件: $HOME/_vimrc vimrc 文件可以包含任何冒號命令。最簡單的是設置選項命令。例如,如果你想 Vim 啓動 set incsearch 要使這個命令生效,你需要重啓動 Vim。後面我們還會學到如何不退出 Vim 就能讓它生效。 這一章只解釋最基本的東西。要學習更多關於寫 Vim 腳本的知識,請參見|usr_41.txt|。 -------------------------------------------------------------------------------- *05.2* vimrc 示例解釋 在第一章中,我們曾經介紹過怎樣用 vimrc 示例文件(包括在 Vim 發佈中)使 Vim 以非 $VIMRUNTIME/vimrc_example.vim 我們在這一節中介紹這個文件中用到的一些命令。這會對你自行參數設置有一定的幫助。 如第一章所述,這個命令人爲地告訴 Vim 工作在 vi 增強模式,因此與 Vi 不完全兼容。 這指明在插入模式下 <BS> 如何刪除光標前面的字符。逗號分隔的三個值分別指:行首的 這使 Vim 在啓動一個新行的時候使用與前一行一樣的縮進。就是說,新行前面會有同樣 這告訴 Vim 當覆蓋一個文件的時候保留一個備份。但 VMS 系統除外,因爲 VMS 系統會 這個命令保存 50 個命令和 50 個查找模式的歷史。如果你想 Vim 記住多些或者少些 總在 Vim 窗口的右下角顯示當前光標位置。 在 Vim 窗口右下角,標尺的右邊顯示未完成的命令。例如,當你輸入 "2f",Vim 在等 +-------------------------------------------------+ 在查找模式輸入完前顯示匹配點。 這定義一個鍵映射。下一節會介紹更多的相關內容。這將定義 "Q" 命令用來完成與 "gq" 這是一個複雜映射。這裏不介紹它是怎麼工作的。它的作用是使 "p" 命令在可視模式下 這激活語法加亮功能,但僅在顏色功能有效的時候纔有效。而 'hlsearch' 選項告訴 *vimrc-filetype* 這啓動三個非常靈巧的機制: 2. 使用文件類型相關的插件 3. 使用縮進文件 這使 Vim 在一行長於 78 個字符的時候自動換行,但僅對純文本文件中有效。這裏包括 這是又一個自動命令。這回它設置爲在讀入任何文件之後自動執行。後面那堆複雜的東 -------------------------------------------------------------------------------- *05.3* 簡單鍵盤映射 映射可以使你把一系列 Vim 命令綁定爲一個單鍵。假設你要用一個大括號將一個特定的 :map <F5> i{<Esc>ea}<Esc> Note: 讓我們來分解一下這個命令: i{<Esc> 插入 { 字符。<Esc> 鍵用於退出插入模式。 e 移動到詞尾。 a}<Esc> 插入 } 到單詞尾。 執行 ":map" 命令後,要在單詞兩端加上 {},只需要移到單詞上的第一個字符並按 F5。 在這個例子中,觸發器是一個單鍵;它還可以是任何字符串。但若你使用一個已經存在 :map /p i(<Esc>ea)<Esc> 你需要在敲入/後,立即敲入p,以便 Vim 知道它們組成一個命令。 ":map" 命令(無參數)列出當前已定義的映射,至少會包括普通模式下的那些。更多的內 -------------------------------------------------------------------------------- *05.4* 增加插件 *add-plugin* *plugin* Vim 可以通過插件增強功能。插件其實是一個當 Vim 啓動的時候能被自動執行的腳本。 Vim 中有兩種插件: 我們將先討論全局插件,然後涉及文件類型插件 |add-filetype-plugin|。 當你啓動 Vim,它會自動加載一些插件。你不需要爲此做任何事。這些插件增加一些 *add-global-plugin* 在什麼地方可以找到插件? 首先閱讀插件包括的說明文字,看看有沒有什麼特殊的限制。然後拷貝到你的插件 以 Unix 系統爲例(假設你還沒有 plugin 目錄): mkdir ~/.vim 就是這樣了!現在你可以用這個插件定義的命令調整文字了。 Vim 的發佈中包括一套針對不同文件類型的插件。你可以用如下命令啓用它們: :filetype plugin on 這樣就行了! 參閱 |vimrc-filetype|。 如果你缺少某種文件類型的插件,或者你找到一個更好的,你可以自行添加一個。這也 你可以在找全局插件的相同地方找到文件類型插件。注意一下插件有沒有註明文件 你可以通過把插件文件放到合適的目錄中來增加一個插件。目錄的名字與前面提過的全局 mv thefile ~/.vim/ftplugin/stuff.vim 如果這個文件已經存在,你可以檢查一下兩個插件有沒有衝突。如果沒有,你可以用另 mv thefile ~/.vim/ftplugin/stuff_too.vim 這裏,下劃線用來分開文件類型和其它部分(這些部分可以由任意字符組成)。但如果你 在 MS-DOS 中不能使用長文件名。如果你增加第二個插件,而這個插件超過 6 個字符, mkdir $VIM/vimfiles/ftplugin/fortran 總的來說,一個文件類型相關的插件的名稱是: ftplugin/<filetype>.vim 這裏 "<name>" 可以是任何你喜歡的名字。例如,在 Unix 下,"stuff" 文件類型的插件 ~/.vim/ftplugin/stuff.vim 這裏, <filetype> 部分是相應文件類型的名稱。只有對應文件類型的文件纔會用這個 -------------------------------------------------------------------------------- *05.5* 增加幫助 *add-local-help* 如果幸運的話,你安裝的插件還會包括幫助文件。我們這裏解釋如何安裝這個幫助文件, 我們以 "matchit.vim" 插件爲例(包括在 Vim 中)。這個插件使 "%" 命令可以在兩個 :!mkdir ~/.vim 現在在某個 'runtimepath' 目錄中建立一個 doc 目錄。 :!mkdir ~/.vim/doc 再把幫助文件拷貝進去: :!cp $VIMRUNTIME/macros/matchit.txt ~/.vim/doc 現在開始玩技巧了,怎樣使 Vim 允許你跳轉到新的主題上?用 |:helptags| 命令產生 :helptags ~/.vim/doc 現在,你可以用這個命令 :help g% 來獲得 "g%" 的幫助了。在使用如下命令的時候,可以看見一個新的條目: :help local-additions 本地幫助的標題行被自動的加入到該節了。在那裏你可以看到 Vim 添加了那些本地的 要寫一個本地幫助文件,請參考 |write-local-help|。 -------------------------------------------------------------------------------- *05.6* 選項窗口 如果要找一個選項,你可以查找這個位置的幫助:|options|。另一個方法是用如下命 :options 這會打開一個新窗口,其中給出一個選項的列表,並對每個選項提供一行解釋。這些選項 你可以通過這個窗口改變一個選項的值。例如,移到 "displaying text" 主題。然後把 set wrap nowrap 當你在上面鍵入回車,這行會改變爲: set nowrap wrap 現在,這個選項被關閉了。 這行的上面是對這個選項的簡要描述。將光標向上移動一行,然後按 <Enter>,你可以 對於那些值爲數字或者字符串的選項,你可以編輯它的值,然後按 <Enter> 來啓用該 set so=0 用 $ 移到行尾,再用 "r5" 命令修改爲五,然後按 <Enter> 使修改生效。現在如果你 -------------------------------------------------------------------------------- *05.7* 常用選項 Vim 中有很多選項。大部分你很少用得上。我們在這個介紹一些常用的。別忘了你可以 :help 'wrap' 如果你搞亂了一個選項,你可以通過在選項後加上一個 & 號把它恢復到默認值。例如: :set iskeyword& 禁 止 折 行 Vim 通常會對長行自動換行,以便你可以看見所有的文字。但有時最好還是能讓文字在一 :set nowrap 當你移到到那些不能顯示的文字上,Vim 會自動向右滾動讓你看到後面的文字,要一次滾 :set sidescroll=10 這個命令不改變文件中的文字,只改變顯示方式。 很多命令只能在一行中移動。你可以通過 'whichwrap' 選項改變它。如下命令把這個選項 :set whichwrap=b,s 這樣,當光標處於行首時用 <BS> 鍵可以回到前一行的結尾;當處於行尾時用 <Space> 要允許 <Left> 和 <Right> 鍵也能這樣,可以用這個命令: set whichwrap=b,s,<,> 這隻在普通模式中有效,要在插入模式中也有效,可以: :set whichwrap=b,s,<,>,[,] 還有一些可以用的標誌,參見 'whichwrap'。 文件中有 TAB 鍵的時候,你是看不見的。要把它顯示出來: :set list 現在 TAB 鍵顯示爲 ^I,而 $顯示在每行的結尾,以便你能找到可能會被你忽略的空白 :set listchars=tab:>-,trail:- 現在,TAB會被顯示成 ">---" 而行尾多餘的空白字符顯示成 "-"。看起來好多了,是 'iskeyword' 選項指定那些字母可以出現在一個單詞中: :set iskeyword "@" 表示所有字母。"48-57" 表示 ASCII 字符 48-57 ,即數字 0 到 9。"192-255" :set iskeyword+=- 看一下新的值,你會發現 Vim 自動在 "-" 前面加了一個逗號。 :set iskeyword-=_ 這回,逗號自動被刪除了。 當 Vim 啓動的時候,在屏幕底部有一行被用於顯示消息。當消息很長的時候,多餘的部分 :set cmdheight=3 這樣意味着你用於編輯文字的空間少了,所以這實際上是一種折衷。 使用語法加亮 |06.1| 功能激活 下一章:|usr_07.txt| 編輯多個文件 -------------------------------------------------------------------------------- *06.1* 功能激活 一切從一個簡單的命令開始: :syntax enable 大多數情況下,這會讓你的文件帶上顏色。Vim 會自動檢測文件的類型,並調用合適的 如果你希望總能看到語法加亮,把 "syntax enable" 命令加入到 |vimrc| 文件中。 如果你想語法加亮只在支持色彩的終端中生效,你可以在 |vimrc| 文件中這樣寫: if &t_Co > 1 如果你只想在 GUI 版本中有效,可以把 ":syntax enable" 放到你的 |gvimrc| 文件中。 -------------------------------------------------------------------------------- *06.2* 顏色顯示不出來或者顯示出錯誤的顏色怎麼辦? 有很多因素會讓你看不到顏色: - 你的終端不支持彩色。 - 你的終端其實支持顏色,可是 Vim 不知道 setenv TERM xterm-color 或者(基於你用的控制檯終端) TERM=xterm-color; export TREM 終端名必須與你使用的終端一致。如果這還是不行,參考一下 |xterm-color|, - 文件類型無法識別 :set filetype :set filetype=fortran 要知道那些類型是有效的,查看一下 $VIMRUNTIME/syntax 目錄。對於 GUI 版本, # vim: syntax=make 你可能知道怎麼檢測自己的文件類型,通常是文件的擴展名(就是點後面的 - 你的文件類型沒有語法高亮定義 - 彩色的文字難以辨認 :set background=dark 而對於淺色: :set background=light 這兩個命令必須在 ":syntax enable" 命令前調用,否則不起作用。如果要在 - 在自下往上滾屏的過程中顏色顯示不對。 -------------------------------------------------------------------------------- *06.3* 使用不同顏色 *:syn-default-override* 如果你不喜歡默認的顏色方案,你可以選另一個配色方案。在 GUI 版本中可以使用 :colorscheme evening "evening" 是配色方案的名稱。還有幾種備選方案可以試一下。在 $VIMRUNTIME/colors 等你確定了一種喜歡配色方案,可以把 ":colorscheme" 命令加到你的 |vimrc| 文件中。 你可以自己編寫配色方案,下方如下法面: 1. 選擇一種接近你的理想的配色方案。把這個文件拷貝到你自己的 Vim 目錄中。在 Unix !mkdir ~/.vim/colors 在 Vim 中完成的好處是可以利用 $VIMRUNTIME 變量。 2. 編輯這個配色方案,常用的有下面的這些條目: term 黑白終端的屬性 例如,要用綠色顯示註釋: :highlight Comment ctermfg=green guifg=green 屬性是 "bold"(粗體)和 "underline" (下劃線)可以用於 "cterm" 和 "gui"。 3. 告訴 Vim 總使用你這個配色方案。把如下語句加入你的 |vimrc| 中: colorscheme mine 如果你要測試一下常用的配色組合,用如下命令: :edit $VIMRUNTIME/syntax/colortest.vim 這樣你會看到不同的顏色組合。你可以很容易的看到哪一種可讀性好而且漂亮。 -------------------------------------------------------------------------------- *06.4* 是否使用色彩 使用色彩顯示文本會影響效率。如果你覺得顯示得很慢,可以臨時關掉這個功能: :syntax clear 當你開始編輯另一個文件(或者同一個文件),色彩會重新生效。 *:syn-off* :syntax off 這個命令會停止對所有緩衝的所有語法加亮。 *:syn-manual* :syntax manual 這個命令激活語法加亮功能,但不會在你開始編輯一個緩衝時自動生效(譯者注:Vim :set syntax=ON -------------------------------------------------------------------------------- *06.5* 帶顏色打印 *syntax-printing* 在 MS-Windows 版本中,你可以用如下命令打印當前文件: :hardcopy 這個命令會啓動一個常見的打印對話框,你可以通過它選擇打印機並作一些必要的設置。 下面幾個選項可以改變 Vim 的打印行爲: 要僅打印一定範圍內的行,可以用可視模式選擇需要打印的行在執行打印命令,例如: v100j:hardcopy "v" 啓動可視模式,"100j" 向下選中100行,然後執行 ":hardcopy" 打印這些行。當 如果你有一臺 PostScript 打印機,上面的方法也適合 Unix 系統。否則,你必須做一些額 如下命令把當前文件轉換成 HTML 格式: :source $VIMRUNTIME/syntax/2html.vim 你發現它會嘎吱嘎吱執行一陣子,(如果文件很大,這可能要花點時間)。之後, :write main.c.html 用你喜歡的瀏覽器打開這個文件,並通過它打印這個文件。如果一切順利,這個輸出應 除了打印,你還可以把這個 HTML 文件,放到 WEB 服務器上,讓其他人可以通過彩色
快捷的。但起碼是有效的。花些時間去練習這些命令,這是後面的知識的基礎。
|02.2| 插入文本
|02.3| 移動光標
|02.4| 刪除字符
|02.5| 撤銷與重做
|02.6| 其它編輯命令
|02.7| 退出
|02.8| 尋求幫助
前一章:|usr_01.txt| 關於本手冊
目錄:|usr_toc.txt|
Windows, 啓動一個 MS-DOS 窗口,再輸入這個命令。
無論哪一種方式,現在 Vim 開始編輯一個名爲 file.txt 的文件了。由於這是一個新建
文件,你會得到一個空的窗口。屏幕看起來會象下面這樣:
|# |
|~ |
|~ |
|~ |
|~ |
|"file.txt" [New file] |
+---------------------------------------+
('#"是當前光標的位置)
這個顯示的屏幕,它就會顯示以波紋線開頭的行。在屏幕的底部,有一個消息行指示文件
名爲 file.txt 並且說明這是一個新建的文件。這行信息是臨時的,新的信息可以覆蓋它。
VIM 命 令
如果你用的是 Microsoft Window 的 MS-DOS 窗口,編輯器使用這個 MS-DOS 窗口。兩個
版本顯示出來的文本看起來是一樣的。但如果你用的是 gvim,就會有其他特性,如菜單條。
後面會有更多的描述。
下,你敲入的字符只是命令;而在插入模式,你敲入的字符就成爲插入的文本了。
當你剛剛進入 Vim,它處在普通模式。通過敲入"i"命令(i是 Insert 的縮寫)可以啓動
插入模式,這樣你就可以輸入文字了,這些文字將被插入到文件中。不用擔心輸錯了, 你還
能夠隨後修正它。要輸入下文的程序員打油詩,你可以這樣敲:
Found programming UNIX a hurdle
回到普通模式。現在在你的 Vim 窗口中就有兩行文字了:
|A very intelligent turtle |
|Found programming UNIX a hurdle |
|~ |
|~ |
| |
+---------------------------------------+
我 在 什 麼 模 式?
(以冒號開頭的命令)的地方,敲入回車結束這個命令的輸入(所有的冒號命令都用
這種方式結束)。
現在,如果你輸入 "i" 命令,Vim 會在窗口的底部顯示 --INSERT--(中文模式
顯示的是--插入-- —— 譯者注),這表示你在插入模式。
|A very intelligent turtle |
|Found programming UNIX a hurdle |
|~ |
|~ |
|-- INSERT -- |
+---------------------------------------+
解 決 問 題
是因爲不小心敲了一個切換模式的命令。無論你在什麼模式,要回到普通模式,只
要敲 <Esc> 就可以了。有時你需要敲兩次,如果 Vim 發出“嘀”一聲,就表示你已經
在普通模式了。
j 下
k 上
l 右
是有理由的:移動光標是最常用的編輯器命令。而這些鍵位是在你本位的右手。也就是說:
這種鍵位的設定使你可以以最快的速度執行移動操作(特別是當你用十指輸入的時候)。
你還可以用方向鍵移動光標,但這樣會減慢你輸入的速度,因爲你必須把你的手從
字母鍵移動到方向鍵。想象一下,你在一個小時內可要這樣做幾百次,這可要花
相當多的時間的。
而且,有一些鍵盤是沒有方向鍵的,或者放在一些很特別的地方。所以,
知道 hjkl 的用法在這些情況下就很有幫助了。
h l
j
光標並在某些地方輸入一些單詞。別忘了用 <Esc> 切換回普通模式。|vimtutor|也是一個
練習的好辦法。
那時你通過在字符上輸入xxxx刪除它) 例如,把光標移到行首,然後輸入xxxxxxx(七個x)
可以刪除 "A very"。結果看起來這樣:
|intelligent turtle |
|Found programming UNIX a hurdle |
|~ |
|~ |
| |
+---------------------------------------+
插入模式(最後一個<Esc>)。結果是:
|A young intelligent turtle |
|Found programming UNIX a hurdle |
|~ |
|~ |
| |
+---------------------------------------+
刪 除 一 行
|Found programming UNIX a hurdle |
|~ |
|~ |
|~ |
| |
+---------------------------------------+
用於完成這個功能。
以下面兩行爲例子:
turtle
選擇。"u" 命令撤銷上一個編輯操作。看看下面這個操作:先用 "dd" 刪除一行,再敲
"u",該行又回來了。
再給一個例子:把光標移到第一行的 A 上:
oung intelligent turtle
young intelligent turtle
young intelligent turtle
A young intelligent turtle
如果你輸入 "u" 兩次,你的文本恢復原樣,那應該是你的 Vim 被配置在 Vi 兼容
模式了。看這裏修正這個問題:|not-compatible|。
本文假定你工作在 "Vim 的方式"。你可能更喜歡舊的 Vi 的模式,但是你必須
小心本文中的一些小區別。
重 做
一個撤銷。要看執行的例子,輸入CTRL-R兩次。字符 A 和它後面的空格就出現了:
上的操作。 輸入這些命令兩次取消前一個 "U":
xxxx 刪除 very
xxxxxx 刪除turtle
用 "U" 恢復行
A very intelligent turtle
用 "u" 撤銷 "U"
A intelligent
有點亂吧, 但不用擔心,用 "u" 和 CTRL-R 命令你可以切換到任何你編輯過的狀態。
行尾加東西怎麼辦?要解決這個問題,你需要在文本後插入字符。這通過 "a" (append)
命令實現。
例如,要把如下行
改爲
and that's not saying much for the turtle!!!
開 始 一 個 新 行
新行內輸入文本了。
假定你的光標在下面兩行中第一行的某個地方:
Found programming UNIX a hurdle
oThat liked using Vim<Esc>
That liked using Vim
Found programming UNIX a hurdle
指 定 次 數
你可以在很多命令前面加一個數字。例如在這章的前面,你通過輸入 "a!!!<Esc>"
增加三個感嘆號。另一個方法是使用命令 "3a!<Esc>"。次數 3 要求把後面的命令
執行三次。同樣的,要刪除三個字符,可以使用 "3x"。次數總是放在要被處理多次
的命令的前面。
Note:
與其他編輯器不一樣,Vim 不會自動建立一個備份文件。如果你輸入 "ZZ",
你的修改立即生效並且不能恢復。你可以配置 Vim 讓它產生一個備份文件,
參見|07.4|。
放 棄 修 改
並退出”的命令,那就是:
q 命令,它告訴 Vim 退出,而感嘆號是強制命令修飾符。
這裏,強制命令修飾符是必要的,它強制性地要求 Vim 放棄修改並退出。如果你只是
輸入":q",Vim 會顯示一個錯誤信息並拒絕退出:
知道自己在做什麼。”
要獲得一般的幫助用這個命令:
如果你不指定主題,":help" 將命令顯示一個總攬的幫助窗口。Vim 的作者在幫助系
統方面使用了一個很聰明的方案(也許可以說是很懶惰的方案):他們用一個普通的編輯窗
口來顯示幫助。你可以在幫助窗口中使用任何普通的 Vim 命令移動光標。所以,h,j,k
和 l 還是表示左,下,上和右。
要退出幫助窗口,用退出一個普通窗口的命令:"ZZ"。這隻會退出幫助窗口,而不會
退出 Vim。
一個超級鏈接。如果你把光標移到這兩個豎線之間並按 CTRL-](標籤跳轉命令), 幫助
系統會把你引向這個超級鏈接指向的主題。(由於不是本章的重點,這裏不詳細討論,
Vim 對超級鏈接的術語是 "標籤"(tag),所以 CTRL-] 實際是跳轉到光標所在單詞爲名
的標籤所在的位置。)
跳轉幾次以後,你可能想回到原來的地方。CTRL-T(標籤退棧)把你送回前一個
跳轉點。CTRL-O (跳轉到前一個位置)也能完成相同的功能。
在幫助屏幕的頂上,有一個符號: *help.txt*。這個名字被幫助系統用來定義一個標籤
(也就是超級鏈接的目標)。
參見|29.1|可以瞭解更多關於標籤的內容。
加上前綴"CTRL-"。
普通模式的 CTRL-H 命令的幫助:
綴。例如對於 CTRL-H,你可以用如下命令:
這個參數是幹什麼用的,可以使用這個命令:
單引號中。例如,要知道 'number' 這個選項幹什麼的,使用如下命令:
移 動
在你插入或者刪除之前,你需要移動到合適的位置。Vim 有一大堆命令可以移動光標。
本章向你介紹最重要的那些。你可以在 |Q_lr| 下面找到這些命令的列表。
|03.2| 移動到行首或行尾
|03.3| 移動到指定的字符
|03.4| 括號匹配
|03.5| 移動到指定的行
|03.6| 確定當前位置
|03.7| 滾屏
|03.8| 簡單查找
|03.9| 簡單的查找模式
|03.10| 使用標記
前一章:|usr_02.txt| Vim 初步
目錄:|usr_toc.txt|
加數字前綴表示把這個命令重複多次。例如,"3w" 表示向前移動3個單詞。用圖表示如下:
--->-->->----------------->
w w w 3w
"b" 命令向後移動到前一個詞的詞首:
<----<--<-<---------<---
b b b 2b b
<- <--- -----> ---->
ge ge e e
用這個命令在一段中移動,這比使用 "l" 要快得多。"b" 則在反方向完成這個功能。
請參見 'iskeyword' 選項。
還可以以 "空白字符" 分割的 "大單詞" 移動。這不是我們通常意義的 "單詞”。這
就是爲什麼稱之爲 "大單詞" 的原因。如下圖所示:
<- <- ---> --->
This is-a line, with special/separated/words (and some more).
<----- <----- --------------------> ----->
gE B W E
ge b w e
<Home> 鍵也可以完成相同的功能。圖示如下:
<------------
.....This is a line with example text
<----------------- --------------->
0 $
有什麼意義,所以它會使光標移動到另一行。例如,"1$" 移動到當前行的行尾,而
"2$" 則移動到下一行的行尾,如此類推。
"0" 命令不能加個數前綴,因爲 "0" 本身就是個數字。而且,出人意料地是,"^" 命
令也不支持數字前綴。
"f" 表示 "Find"。
例如,假定你在下面例子行的行首,而你想移動到單詞 "human" 的h那裏。只要執行
命令 "fh" 即可:
---------->--------------->
fh fy
你可以在這個命令前面加數字前綴,所以,你可以用 "3fl" 命令移動到 "foul" 的
"l":
--------------------->
3fl
<---------------------
Fh
表示 "To"。這個命令的反向版本是 "Tx"。
<------------ ------------->
Th tn
永遠都不會移出當前行,哪怕是這兩行是連續的一個句子。
"f" 命令後才發現你本來想用的是 "F"。要放棄這個查找,輸入 <Esc>。所以
"f<Esc>" 取消一個向前查找命令而不做任何操作。 Note: <Esc> 可以中止大部分命令,
而不僅僅是查找。
了:它能匹配一對括號。如果光標在 "(" 上,它移動到對應的 ")" 上,反之,如果它在
")" 上,它移動到 "(" 上。
<----->
if (a == (b * c) / d)
<---------------->
%
首時,"%" 會向前查找到第一個 "("。然後會移動到它的匹配處。
---+---------------->
%
"9999k" 命令移到文件頭,再執行 "32j" 下移到32行。這不是一個好辦法,但肯定有效。
更好的方法是使用 "G" 命令。加上一個次數前綴,這個命令可以把你送到指定的行。
例如,"33G" 把你送到 33 行。(要用更好的方法在編譯器的錯誤列表中移動,參見
|usr_30.txt| 的 ":make" 命令部分。)
如果沒有數字前綴,"G" 命令把光標移動到文末。移動到文首的命令是 "gg"。"1G"
也能完成這個功能,但稍複雜一點。
| text text text text |
| text text text text | gg
7G | text text text text |
| text text text text
| text text text text
V text text text text |
text text text text | G
text text text text |
last line of a file V
而 "90%" 移到差不多結尾的位置。
之內的一行呢?下圖演示了三個可以使用的命令:
H --> | text sample text |
| sample text |
| text sample text |
| sample text |
M --> | text sample text |
| sample text |
| text sample text |
| sample text |
L --> | text sample text |
+---------------------------+
以前的行佔全文的百分比,和你所處的列的列號。
有時你會看到一個分開的兩個列號。例如,"col 2-9"。這表示光標處於第二個字符
上,但由於使用了製表符,在屏幕上的位置是 9。
有兩個值,on 或者 off。
Vim 有很多選項,除了布爾類型的,還有數字或者字符串類型的。在用到的時候會給
處一些例子的。
該視口的一半高度。這樣,窗口移動到當前文字的上面,而文字則移到窗口的下面。不用擔心
記不住那邊是上。很多人都是這樣。
CTRL-D命令把視窗向下移動半屏,所以把文字向上移動半屏。
| some text |
| some text |
| some text |
+---------------+ | some text |
| some text | CTRL-U --> | |
| | | 123456 |
| 123456 | +----------------+
| 7890 |
| | +----------------+
| example | CTRL-D --> | 7890 |
+---------------+ | |
| example |
| example |
| example |
| example |
+----------------+
一行(one line Extra)。
幸運地,CTRL-F 是向前 (forward) 滾動,CTRL-B 是向後 (backward) 滾動,這比較好記。
你可能希望,光標所在行處於屏幕的中間。這可以通過 "zz" 命令實現。
| some text | | some text |
| some text | | some text |
| some text | | some text |
| some text | zz --> | line with cursor |
| some text | | some text |
| some text | | some text |
| line with cursor | | some text |
+------------------+ +------------------+
一些用於滾動的命令,可以參見|Q_sc|。要使光標上下總保留有幾行處於視口中用作上下
文,可以使用'scrolloff'選項。
一樣,在那裏你可以輸入要查找的字符串。你可以使用退格鍵 (退格箭頭或<BS>) 進行
修改,如果需要的時候還可以使用 <Left> 和 <Right> 鍵。
使用 <Enter> 開始執行這個命令。
字符.*[]^%//?~$有特殊含義。如果你要查找它們,需要在前面加上一個 ""。
請參見下文。
可以在這個命令前面增加次數前綴。這樣,"3n" 表示移動到第三個匹配點。要注意,
"/" 不支持次數前綴。
在 "?" 命令後執行 "N" 命令是向前查找。
忽 略 大 小 寫
'ignorecase' 選項:
歷 史 記 錄
/two
/three
把 "/three" 放到你的命令行上。回車就會從當前位置查找 "three"。如果你不回車,
繼續按 <Up>,Vim 轉而顯示 "/two",而下一次 <Up> 變成 "/one"。
你還可以用 <Down> 命令在歷史記錄中反向查找。
<Up> 前輸入這個開頭。繼續前面的例子,你可以輸入 "/o<Up>",Vim 就會在命令行上
顯示 "/one"。
是相互獨立的。
在 文 本 中 查 找 一 個 單 詞
你可以輸入 "/TheLongFunctionName",但這要輸入很多東西。而且如果輸錯了,Vim
是不可能找到你要找的單詞的。
有一個簡單的方法:把光標移到那個單詞下面使用 "*" 命令。Vim 會取得光標上
的單詞並把它作爲被查找的字符串。
"#" 命令在反向完成相同的功能。你可以在命令前加一個次數:"3*" 查找光標下
單詞第三次出現的地方。
查 找 整 個 單 詞
這樣,要匹配一個完整的單詞 "the",只需:
標記來匹配整個單詞(要部分匹配,使用 "g*" 和 "g#")
高 亮 匹 配
把光標移到 "nr" 下用 "*" 命令,然後用 n 命令一個個遍歷。
這裏還有一種辦法。輸入這個命令:
用,而不需要輸入更多的命令的方法。
要關掉這個功能:
命令:
會被再次激活。使用 "n" 和 "N" 命令時也一樣。
被找到了。然後輸入 <Enter> 跳到那個地方。或者繼續輸入更多的字符改變要被查找的字符串。
情況下 'wrapscan' 的狀態是 "on"。所以在找到文件尾的時候會自動折返。
插 曲
Vim 的啓動文件中。
編輯 |not-compatible| 中提到的文件,或者用如下命令確定這個文件在什麼地方:
最後你用 <Esc> 結束插入模式。然後用如下命令存盤:
的方法。但是非常不幸,這種強大的功能是有代價的,因爲使用它需要掌握一些技巧。
本章我們只介紹一些基本的正則表達式。要了解更多的關於查找模式和命令,請參考
|usr_27.txt|。你還可以在|pattern|中找到正則表達式的完整描述。
任何位置的單詞 include。而模式 "^include" 僅匹配在一行開始的 include。
$字符匹配行尾。所以,"was$" 僅匹配在行尾的單詞 was。
xxx xxx xxx
xxx
xxx
例如包括 "the " 的行是不會被這個模式匹配的。
任意字符,而第三個字符是m的字符串。例如:
xxx xxx xxx
匹 配 特 殊 字 符
如果你用 "ter." 爲模式去查找,你會匹配這些地方:
xxxx xxxx
標記,要回到原來的地方,使用如下命令:
如果再次執行這個命令你會跳回去原來的地方,這是因爲 ` 記住了自己跳轉前的位置。
通常,每次你執行一個會將光標移動到本行之外的命令,這種移動即被稱爲一個 "跳轉"。
這包括查找命令 "/" 和 "n"(無論跳轉到多遠的地方)。但不包括 "fx" 和 "tx" 這些
行內查找命令或者 "w" 和 "e" 等詞移動命令。
另外 "j" 和 "k" 不會被當做是一次 "跳轉",即使你在前面加上個數前綴也不例外。
``命令可以在兩個位置上跳來跳去。而 CTRL-O 命令則跳到一個 "較老" 的地方(提示:O
表示older)。CTRL-I 則跳到一個 "較新" 的地方(提示:I在鍵盤上緊靠着O)。考慮一下
如下命令序列:
/^The
CTRL-O
再執行 CTRL-O 你會跳到最初的地方。現在你使用 CTRL-I,就又跳到 33 行。而再用一次
CTRL-I 你又會到達找到 "The" 的地方。
| example text ^ |
33G | example text | CTRL-O | CTRL-I
| example text | |
V line 33 text ^ V
| example text | |
/^The | example text | CTRL-O | CTRL-I
V There you are | V
example text
CTRL-I的功能與<Tab>一樣。
">" 符號標記出來。
有 名 字 的 標 記
文本中使用 26 個標記(a到z)。這些標記是不可見的,只是一個由 Vim 記住的位置。
要跳到一個你定義的標記,可以使用命令 `{mark},這裏 {mark} 是指定義標記
的那個字母。所以,移到標記a的命令是:
後者是移到標記所在行上被標記的列。
查看文首的一些內容,先移動到行首,設置一個標記 s (start):
這裏使用 s 和 e 作標記名沒有特別的含義,只是爲了好記而已。
" 最後編輯的位置
[ 最後修改的位置的開頭
] 最後修改的位置的結尾
作小改動
本章介紹幾種修正和移動文本的方法,這包括三種修改文本的基本方法:操作符-動作,
可視模式以及文本對象。
|04.2| 改變文本
|04.3| 重複一個修改
|04.4| 可視模式
|04.5| 移動文本
|04.6| 拷貝文本
|04.7| 使用剪貼板
|04.8| 文本對象
|04.9| 替換模式
|04.10| 結論
前一章: |usr_03.txt| 移動
目錄: |usr_toc.txt|
除多個字符。
"dw" 命令刪除一個單詞。你可能認出來了,"w" 是詞移動命令。實際上,"d" 命
令後面可以跟任何 "動作"(motion)命令,它會刪除從當前位置到光標移動到的目標
位置的的全部內容。
例如 "4w" 命令能夠向後移動四個單詞。所以 "d4w" 命令刪除4個單詞。
------------------>
d4w
你可能不想刪掉一個單詞的第一個字符。如果你用 "e" 命令作爲動作,這時 Vim 認爲你
是想刪掉整個單詞(包括最後一個字符):
-------->
d2e
稱爲 "非包含的" (exclusive),而包括這個字符的時候,稱爲 "包含的" (inclusive)。
"包含的" 命令,所以,這行的最後一個字符也會被刪除:
------------>
d$
就是一個刪除操作符。然後你輸入一個動作命令,例如 "4l" 或者 "w"。這種方法使你
可以在任何你能越過的文本上執行各種操作。
是完成後會切換到插入模式。例如,"cw" 修改一個詞,更精確的說,它刪除一個詞,
並切換到插入模式。
------->
c2wbe<Esc>
2w 移動兩個單詞的距離(與操作符合起來,它刪除兩個單詞並進入插入模式)
be 插入 be 這個單詞
<Esc> 切換回普通模式
任何問題都有一個簡單,清楚而錯誤的回答。"cw" 命令就屬於這種情況。c 操作符在很
多地方都和 d 一樣,但有一個例外,"cw"。它實際上象 "ce" 一樣,刪除到單詞尾。這
樣單詞後面的空格就不包括在內了。這要追溯到使用 Vi 的舊日子。由於很多人已經習慣
這種方式了,這個例外就留在 Vim 裏了。
更 多 的 修 改 命 令
空格)。
插入模式並加入新的文字。
快 捷 鍵
X 表示 dh (刪除光標左邊的字符)
D 表示 d$ (刪除到行尾)
C 表示 c$ (修改到行尾)
s 表示 cl (修改一個字符)
S 表示 cc (修改一整行)
在 什 麼 地 方 加 入 個 數 前 綴
刪除一個單詞3次,而 "d3w" 表示刪除三個單詞一次。這是一個沒有分別的分別。
實際上你可以放兩個次數前綴,例如,"3d2w" 刪除兩個單詞三次,共計六個單詞。
替 換 單 個 字 符
符。你可以用 "cl" 命令或者 "s" 命令完成相同的功能,但 "r" 命令不需要使用<Esc>
退出插入狀態:
rT rt rw
5rx
符。在這裏使用個數前綴會刪除多個字符但只插入一個換行符:"4r<Enter>" 用一個
換行符替換四個字符。
編輯一個 HTML 文件,你想刪除所有的 <B> 標記。你把光標移到第一個 "<" 上,然後用
"df>" 命令刪除 <B>。然後你就可以移到 </B> 的 < 上面用 "." 命令刪除它。"." 命令
執行最後一次的修改命令(在本例中,就是 "df>")。要刪除下一個 <B> 標記,移動到下
一個 < 的位置,再執行 "." 命令即可。
f< 找第一個< --->
df> 刪除到> -->
f< 找下一個< --------->
. 重複df> --->
f< 找下一個< ------------->
. 重複df> -->
以用如下命令快速完成這個操作:
cwfive<Esc> 修改成 "five"
n 找下一個 "four"
. 重複修改操作
n 找下一個 "four"
. 重複修改
如此類推......
不容易確定用什麼命令可以移到你想修改的地方。這時候,你就需要可視模式了。
中間的文本會被高亮顯示。最後執行一下 "操作符" 命令即可。
例如,要從一個單詞的一半刪除到下一個單詞的一半:
---------->
velllld
將要被刪除的文本。
按 行 選 擇
前,整行都被高亮顯示了。左右移動不會有任何效果。而通過上下移動,你可以一次選擇多行。
例如,用 "Vjj" 可以選中三行:
| text more text |
>> | more text more text | |
selected lines >> | text text text | | Vjj
>> | text more | V
| more text more |
+------------------------+
非常有用。
pierre 123 455 234
john 0 90 39
steve 392 63 334
現在用 "3j" 向下移動三行,然後用 "w" 移到下一個單詞。你可以看到最後一欄的第一
個字符也被包括進來了。要去掉它,用 "h" 命令即可。現在按 "d",中間一欄就被刪除了。
移 動 到 另 一 端
用 "o" 命令即可(提示:"o" 表示 other end),光標會移動到被選中文字的另一端,
現在你可以移動光標去改變選中文字的開始點了。再按 "o" 光標還會回到另一端。
移到同一行的另一個角上。
它們的作用是在光標後或前加入新的一行。
令重新粘貼出來(p 在 Vim 中表示 put)。
看看下面的例子。首先,你會在你要刪除的那一行上輸入 "dd" 刪除一整行,然後
移動到你要重新插入這行的地方輸入 "p" (put),這樣這一行就會被插入到光標下方。
line 2 dd line 3 p line 3
line 3 line 2
分(例如一個單詞),"p" 命令會把它插入到光標的後面。
---->
dw
-------->
welp
關 於 粘 貼 的 更 多 知 識
"P" 會把它插入到光標所在行的前一行。而當你用 "dw" 刪除一個單詞,"P" 會把它
插入到光標前面。
加一個 "3p" 會把刪除行的三個拷貝插入到文本中。
交 換 兩 個 字 符
這樣的結果是你經常把 "the" 敲成 "teh"。Vim 讓你可以很容易得修正這種錯誤。只要把
光標移到 "teh" 的 "e" 上,然後執行 "xp" 即可。這個工作過程是:"x" 刪除一個字符,
保存到寄存器。"p" 把這個被保存的字符插入到光標的後面,也就是 "h" 的後面了。
x p
"p" 拷到另一個地方。這裏還有一種簡單的辦法:抽出 (yank)。"y" 命令可以把文字拷
貝到寄存器中。然後用 "p" 命令粘貼到別處。
Yanking 是 Vim 中拷貝命令的名字。由於 "c" 已經被用於表示change了,所以拷貝
(copy)就不能再用 "c" 了。但 "y" 還是可用的。把這個命令稱爲 "yanking" 是爲了
更容易記住 "y" 這個鍵。(譯者注:這裏只是把原文譯出以作參考,"抽出" 文本畢竟是
不妥的。後文中將統一使用 "拷貝"。中文可不存在 change 和 copy 的問題。)
有效的。要拷貝兩個單詞,就可以用 "y2w"。例如:
-------------->
y2w
p
"Y" 卻是拷貝一整行。要注意這個區別!"y$" 拷貝到行尾。
line 2 line 2 p line 2
last line last line a text line
last line
先用可視模式選中一些文本,然後使用 Edit/Copy 菜單。現在被選中的文本被拷進了剪貼
板。你可以把它粘貼到其它程序,或者在 Vim 內部使用。
粘貼進來,這在普通模式和插入模式中都是有效的。如果在可視模式,被選中的文字會被
替換掉。
菜單中也有(當然了,前提是有彈出式菜單)。如果你的 Vim 有工具條,在工具條上
也能找到這些命令。
的 "y"(yank)和 "p"(put)命令,但在前面必須加上 "*(一個雙引號加一個星號)。
例如,要拷貝一行到剪貼板中:
|clipboard|。
開始處。這裏還有一個更簡單的方法:"daw"。
daw
(一個單詞),這樣,"daw" 就是 "Delete A Word"(刪除一個單詞)。確切地說,
該單詞後的空格字符也被刪除掉了。
兩種方法了。現在我們又有了 "操作符-文本對象"。
這種方法與 "操作符-動作" 很相似,但它不是操作於從當前位置到移動目標間的內容,
而是對光標所在位置的 "文本對象" 進行操作。文本對象是作爲一個整體來處理的。現在光
標在對象中的位置無關緊要。
is an example. Just
some text.
some text.
some text.
Sentence"(譯者注:實在很難用中文表示這個意思了,各位還是記英文名吧)。還有
一個文本對象是 "as",區別是 "as" 包括句子後面的空白字符而 "is" 不包括。如果
你要刪除一個句子,而且你還想同時刪除句子後面空白字符,就用 "das";如果你想保
留空白字符而替換一個句子,則使用"cis"。
你可以繼續多次執行文本對象命令。例如,先用 "v" 啓動可視模式,再用 "as"
就可以選中一個句子。現在重複執行 "as",就會繼續選中更多的句子。最後你可以使用
一個操作符去處理這些被選中的句子。
這會一直持續下去,直到你輸入<Esc>。
在下面的例子中,你在 "text" 的第一個 "t" 上啓動替換模式:
Rinteresting.<Esc>
令自動進行行擴展,而不是替換到下一行。
一個 "撤消" 命令一樣。
用 N 個操作符加上 M 個移動命令,組合出 N*M 個命令!
X 刪除光標前的字符("dh"的縮寫)
D 從當前位置刪除到行尾("d$"的縮寫)
dw 從當前位置刪除到下一個單詞開頭
db 從當前位置刪除到前一個單詞的開頭
diw 刪除光標上的單詞(不包括空白字符)
daw 刪除光標上的單詞(包括空白字符)
dG 刪除到文末
dgg 刪除到文首
(除非設置了 'tildeop'),所以你不能連接一個動作命令。這個命
令在可視模式下也有效,它會改變被選中的所有文本的大小寫。
以增強 Vim 的功能;以及怎樣進行宏定義。
|05.2| vimrc 示例解釋
|05.3| 簡單鍵盤映射
|05.4| 增加插件
|05.5| 增加幫助
|05.6| 選項窗口
|05.7| 常用選項
前一章:|usr_04.txt| 做小改動
目錄:|usr_toc.txt|
把這些設置寫到一個叫 vimrc 的文件中。Vim 會在啓動的時候讀入這個文件。
home 目錄中。
如果你還沒有 vimrc,請參考 |vimrc| 一節看看你應該在什麼地方創建 vimrc 文件。
另外 ":version" 命令能告訴你 vim 在什麼地方找 "用戶的 vimrc 文件"。
$VIM/_vimrc
的時候始終開啓 'incsearch' 選項,可以在你的 vimrc 文件中加上:
vi 兼容模式啓動(參見|not-compatible|)。這個文件可以在這裏找到:
但我們不會介紹所有的內容。你需要用 ":help" 獲得更多的幫助。
set nocompatible
要關閉 'compatible' 選項設,'nocompatible' 可以用於完成這個功能。
set backspace=indent,eol,start
空白字符,分行符和插入模式開始處之前的字符。
set autoindent
多的空白字符。啓動新行是指用 <Enter> 換行,在普通模式下執行 "o" 命令等情況。
if has("vms")
set nobackup
else
set backup
endif
自動產生備份文件。備份文件的名稱是在原來的文件名上加上 "~" 字符。參見 |07.4|
set history=50
命令,可以把這個數改成其它值。
set ruler
set showcmd
你輸入要查找的字符並且顯示 "2f"。當你再輸入w,"2fw" 命令被執行,"2f" 自動消
失。
|text in the Vim window |
|~ |
|~ |
|-- VISUAL -- 2f 43,8 17% |
+-------------------------------------------------+
^^^^^^^^^^^ ^^^^^^^^ ^^^^^^^^^^
'showmode' 'showcmd' 'ruler'
set incsearch
map Q gq
操作符相同的功能,這是在 Vim 5.0 版前 "Q" 命令的作用。如果沒有設置這個映射,
"Q" 會啓動 Ex 模式,這也許不是你想要的情況。
vnoremap p <Esc>:let current_reg = @"<CR>gvs<C-R>=current_reg<CR><Esc>
用拷貝的字符覆蓋被選中的字符。你可以看到映射可以被用來執行相當複雜的操作。但其
本質依然是一個命令序列而已,與你直接輸入沒有什麼兩樣。
if &t_Co > 2 || has("gui_running")
syntax on
set hlsearch
endif
Vim 加亮上次查找模式匹配的地方。"if" 命令在設置選項的時候非常有用,它使設置
命令在某些條件下才執行。更多的內容請參見|usr_41.txt|。
filetype plugin indent on
1. 文件類型探測
當你開始編輯一個文件的時候,Vim 會試圖確定這個文件的類型。當你編輯 "main.c"
時,Vim 會根據擴展名 ".c" 認爲這是一個 C 源文件。當你編輯一個文件前面是
"#!/bin/sh" 的文件時,Vim 會把它認作 "sh" 文件。文件類型探測用於語法加亮
和以下另兩項。請參見|filetypes|。
不同的文件需要不同的選項支持。例如,當你編輯一個 "c" 文件,用 'cindent'
選項來自動縮進就非常有用。這些文件類型相關的選項在 Vim 中是通過文件類型
插件來實現的。你也可以加入自己的插件,請參見 |write-filetype-plugin|。
當編輯程序的時候,行縮進通常可以被自動決定。Vim 用不同的策略處理不同的
文件類型。請參見 |:filetype-indent-on| 和 'indentexpr'。
autocmd FileType text setlocal textwidth=78
兩個部分。其中 "autocmd FileType text" 定義個自動命令,表示當文件類型被設置爲
"text" 的時候,後面的命令自動執行。"setlocal textwidth=78" 設置 'textwidth'
選項爲78,但僅對本文件有效。
autocmd BufReadPost *
if line("'/"") > 0 && line("'/"") <= line("$") |
exe "normal g`/"" |
endif
西檢查 '" 標記是否已被定義,如果是,則跳轉到該標記。行首的反斜槓用於把所有語句
連接成一行。這可以避免一行寫得太長,請參見 |line-continuation|。這隻在 Vim
腳本文件中有效,在命令行中無效。
單詞括起來。例如,把 "amount" 變成 "{amount}"。用 ":map" 命令,就可以讓 F5 來
完成這個工作。命令如下:
在輸入這個命令時,<F5> 要用四個字符表示。相似地,輸入 <Esc> 不是直接按
<Esc> 鍵,而是輸入五個字符。在讀這份手冊要注意這些區別!
<F5> F5 功能鍵。這是命令的觸發器。當這個鍵被按下時,相應的命令即被
執行。
的 Vim 命令,該命令將不在有效。所以你最好避免出現這種情況。
一個可用於映射的鍵是反斜槓。因爲你很可能想定義多個映射,那就加上另一個字符。
你可以映射 "/p" 爲在單詞兩端加園括號,而映射 "/c" 爲加花括號,例如:
:map /c i{<Esc>ea}<Esc>
容參見 |40.1|。
簡單地把插件放到你 Vim 的 plugin 目錄中就可以使它生效。
(這個功能在 |+eval| 被編譯進 Vim 中時纔有效)
全局插件:用於所有類型的文件
文件類型插件:僅用於特定類型的文件
全 局 插 件 *standard-plugin*
很多人想用的,但由 Vim 腳本實現而非編譯進 Vim 中的功能。你可以在幫助索引中
找到這些插件:|standard-plugin-list|。還可以參照 |load-plugin|。
你可以加入一個全局插件使得某些功能在你每次使用 Vim 時都被開啓。添加一個全局
插件只要兩步:
1. 獲得一個插件的拷貝
2. 把它塞進合適的目錄
獲 得 一 個 全 局 插 件
- 有一些與 Vim 一起發佈,你可以在 $VIMRUNTIME/macros 目錄或其子目錄中找到。
- 從網上下載,查一下這個地方:[url]http://vim.sf.net。[/url]
- 在 Vim 的郵件列表中找:|maillist|。
- 自己寫一個,參見|write-plugin|。
使 用 一 個 全 局 插 件
目錄:
系統 插件目錄
Unix ~/.vim/plugin/
PC and OS/2 $HOME/vimfiles/plugin 或 $VIM/vimfiles/plugin
Amiga s:vimfiles/plugin
Macintosh $VIM:vimfiles:plugin
RISC-OS Choices:vimfiles.plugin
mkdir ~/.vim/plugin
cp /usr/local/share/vim/vim60/macros/justify.vim ~/.vim/plugin
文件類型插件 *add-filetype-plugin* *ftplugins*
只需兩步:
1. 獲取一個插件的拷貝
2. 塞到合適的目錄。
取 得 文 件 類 型 插 件
類型,據此你可以知道這個插件是全局的還是文件類型相關的。在 $VIMRUNTIME/macros
中的是全局插件;文件類型插件在 $VIMRUNTIME/ftplugin 中。
使 用 文 件 類 型 插 件 *ftplugin-name*
插件的位置一樣,但最後一級目錄是 "ftplugin"。假設你找到一個用於 "stuff" 文
件類型的插件,而且你的系統是Unix。那麼,你可以把這個文件用如下命令移入ftplugin
目錄:
一個名字:
用 "otherstuff.vim" 就不行了。那是用於 "otherstuff" 類型的文件的。
你就沒法用了。你可以通過使用另一層目錄來解決這個問題:
copy thefile $VIM/vimfiles/ftplugin/fortran/too.vim
ftplugin/<filetype>_<name>.vim
ftplugin/<filetype>/<name>.vim
可以是:
~/.vim/ftplugin/stuff_def.vim
~/.vim/ftplugin/stuff/header.vim
插件內的設置。插件的 <name> 部分則不重要,你可以對同一個文件類型使用多個插件。
Note 插件必須以 ".vim" 結尾。
深入參考讀物:
|filetype-plugins| 文件類型插件的文檔和有關如何避免映射引起的問題。
|load-plugins| 全局插件的啓動時間
|ftplugin-overrule| 控制全局文件類型插件的選項
|write-plugin| 如何寫插件
|plugin-details| 關於如何使用插件的信息或者當你的插件不工作的時候如何
處理。
以便你能方便地獲得新插件的幫助。
對應的 HTML 標記間,Vim 腳本的 if/else/endif 間等匹配點間跳轉。這非常有用,但
它不向前兼容(這也是爲什麼默認的情況下它不會被激活)。
這個插件有一個文檔:"matchit.txt"。我們先來把該插件拷貝到合適的位置。
這次,我們在 Vim 內完成這個工作,以便利用$VIMRUNTIME。(如果某些目錄已經存在
你可以省略一些 "mkdir" 命令)
:!mkdir ~/.vim/plugin
:!cp $VIMRUNTIME/macros/matchit.vim ~/.vim/plugin
一個本地的tags文件即可:
幫助文件。你還可以從這裏跳轉到新的幫助中。
令:
被根據種類分組。把光標移到一個主題上然後按回車就可以跳轉到那裏。再按一下回車或
者 CTRL-O 就可以跳回來。
光標下移到這一行:
跳轉到 'wrap' 的完整幫助,再用 CTRL-O 可以跳回來。
值。例如,把光標移動到下面這行:
移動一下光標,你會發現在你的光標移到窗口邊界前,你的文字就開始滾動了。這就是
選項 'scrolloff' 完成的功能:它指定在距離邊界多遠的地方開始滾動文字。
通過 ":help" 命令獲得更多的幫助。方法是在選項命令前後加上單引號,例如:
行中顯示完。這樣,你需要左右移動才能看到一整行。以下命令可以切換換行方式:
動十個字符,這樣就行了:
移 動 命 令 換 行
設爲默認值:
鍵可以移動到下一行的行首。
顯 示 TAB 鍵
字符在哪裏。
這樣做的一個缺點是在有很多 TAB 的時候看起來很醜。如果你使用一個有顏色的
終端,或者使用 GUI 模式,Vim 可以用高亮顯示空格和TAB。 使用 'listchars' 選項:
吧?
關 鍵 字
< iskeyword=@,48-57,_,192-255
是可打印的拉丁字符。
有時你希望橫線也是關鍵字,以便 "w" 命令會把 "upper-case" 看作是一個單詞。
你可以這樣做:
:set iskeyword
iskeyword=@,48-57,_,192-255,-
要從中去掉一個字符用 "-="。例如要排除下劃線:
:set iskeyword
iskeyword=@,48-57,192-255,-
顯 示 消 息 的 空 間
會被截斷。這樣你只能看到一部分。或者文字自動滾動,你要按 <Enter> 來繼續。你可以
給 'cmdheight' 選項賦一個值,用來設定顯示消息所用的行數。例如:
黑白的文字讓人厭倦了,增加一些色彩能爲你的文件帶來生氣。這不但看起來漂亮,
還能夠提高你的工作效率。本章介紹如何使用不同顏色顯示不同文本並把它打印出來。
|06.2| 顏色顯示不出來或者顯示出錯誤的顏色怎麼辦?
|06.3| 使用不同的顏色
|06.4| 是否使用色彩
|06.5| 帶顏色打印
|06.6| 深入閱讀
前一章:|usr_05.txt| 選項設置
目錄:|usr_toc.txt|
語法加亮。一下子註釋變成藍色,關鍵字變成褐色,而字符串變成紅色了。這使你可以
很容易瀏覽整個文檔。很快你就會發現,黑白的文本真的會降低你的效率!
syntax enable
endif
這種情況下,Vim 會用粗體,斜體和下劃線區分不同文字,但這不好看。你可能
會希望找一個支持彩色的終端。對於 Unix,我推薦 XFree86 項目的 xterm:
|xfree-xterm|。
確保你的 $TERM 設置正確。例如,當你使用一個支持彩色的 xterm 終端:
那裏介紹了一些使 Vim 顯示彩色的方法(不僅是 xterm )。
Vim 不可能識別所有文件,而且有時很難說一個文件是什麼類型的。試一下這個
命令:
.
如果結果是 "filetype=",那麼問題就是出在文件類型上了。你可以手工指定
文件類型:
你還可以使用 Syntax 菜單。設置文件類型也可以通過 |modeline|,這樣,
在你每次編輯它的時候都執行語法加亮。例如,下面這一行可以用
於 Makefile(把它放在接近文首和文末的地方)
內容)參見 |new-filetype| 可以知道如何告訴 Vim 如何檢查一種文件類型。
你可以找一個相似的文件類型並人工設置爲那種類型。如果你覺得不好,你可以
自己寫一個,參見 |mysyntaxfile|。
或者顏色是錯的:
Vim 自動猜測你使用的背景色。如果是黑的(或者其它深色的色彩),它會
用淺色作爲前景色。如果是白的(或者其它淺色),它會使用深色作爲前景
色。如果 Vim 猜錯了,文字就很難認了。要解決這個問題,設置一下
'background' 選項。對於深色:
這之後設置背景,可以再調用一下 ":syntax reset"。
Vim 在分析文本的時候不對整個文件進行處理,它只分析你要顯示的部分。這
樣能省不少時間,但也會因此帶來錯誤。一個簡單的修正方法是敲 CTRL-L。
或者往回滾動一下再回來。要徹底解決這個問題,請參見 |:syn-sync|。有些
語法定義文件有辦法自己找到前面的內容,這可以參見相應的語法定義文件。
例如,|tex.vim| 中可以查到 Tex 語法定義。
Edit/Color 菜單。你也可以使用這個命令:
中可以找到這些方案。
下,可以這樣:
!cp $VIMRUNTIME/colors/morning.vim ~/.vim/colors/mine.vim
cterm 彩色終端的屬性
ctermfg 彩色終端的前景色
ctermbg 彩色終端的背景色
gui GUI 版本屬性
guifg GUI 版本的前景色
guibg GUI 版本的背景色
如果你兩個都想用,可以用"bond,underline"。要獲得詳細信息, 請參考
|:highlight| 命令。
:source %
如果你要完全關閉這個功能:
如果你想只對特定的文件採使用語法加亮,可以使用這個命令:
中,每個被打開的文件對應一個緩衝,後面的章節中你會接觸到這方面的內容)。要在當
前緩衝中使用加亮,需要設置'syntax'選項:
如果你使用的是彩色打印機,那麼打印出來的色彩將與你在 Vim 中看到的一樣。但如果
你使用的是深色的背景,它的顏色會被適當調整,以便在白色地打印紙上看起來比較舒
服。
'printdevice'
'printheader'
'printfont'
'printoptions'
然,你可以用其它命令選中這100行。
外的處理:你需要先把文件轉換成 HTML 類型,然後用 Netscape 之類的瀏覽器打印。
Vim 會打開一個新的窗口並顯示 HTML 代碼。現在把這個文件存下來(存在哪都不要緊,
反正最後你要刪掉它的):
該與 Vim 中顯示的一樣。要了解更詳細的信息,請參見 |2html.vim|。處理完後別忘
了刪掉那個 HTML 文件。
文本閱讀。
vim 命令(全)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.