vim技巧补充
表 1. 用于移動光標(biāo)的 Vim 命令
| 將光標(biāo)向左移動 |
| 將光標(biāo)向下移動 |
| 將光標(biāo)向上移動 |
| 將光標(biāo)向右移動 |
| 將光標(biāo)移動到當(dāng)前段落的末尾 |
| 將光標(biāo)移動到當(dāng)前段落的開頭 |
| 將光標(biāo)移動到當(dāng)前句子的末尾 |
| 將光標(biāo)移動到當(dāng)前句子的開頭 |
| 移動到當(dāng)前行的第一個(gè)非空字符 |
| 移動到當(dāng)前行末尾 |
| 移動到當(dāng)前行開頭 |
| 移動到下一單詞的開頭 |
| 移動到上一單詞的開頭 |
| 移動到下一單詞的末尾 |
| 移動到屏幕的第一行 |
| 移動到屏幕的中間一行 |
| 移動到屏幕的最后一行 |
| 移動到文件末尾 |
| 移動到文件開頭 |
| 移動到行?n |
表 2 顯示了用于刪除文本的 Vim 命令。
表 2. 用于刪除文本的 Vim 命令
| 刪除選中的區(qū)域 |
| 刪除整個(gè)當(dāng)前行 |
| 刪除從當(dāng)前行開始的 10 行, |
| 從當(dāng)前位置向前刪除單詞 |
| 從當(dāng)前光標(biāo)位置左邊開始向后刪除單詞 |
| 刪除當(dāng)前光標(biāo)位置的字符 |
| 刪除當(dāng)前光標(biāo)位置左邊的字符 |
| 刪除當(dāng)前光標(biāo)位置到行開頭之間的單詞 |
| 刪除從當(dāng)前光標(biāo)位置開始的整個(gè)行 |
| 刪除光標(biāo)當(dāng)前位置的字符 |
| 刪除光標(biāo)當(dāng)前位置之前的字符 |
表 3 提供了其他幾個(gè)有用的 Vim 命令。
表 3. 常用 Vim 命令
| 進(jìn)入插入模式并在當(dāng)前光標(biāo)處插入 |
| 進(jìn)入插入模式并在當(dāng)前行的開始處插入 |
| 進(jìn)入插入模式并追加到光標(biāo)后面 |
| 進(jìn)入插入模式并追加到當(dāng)前行末尾 |
| 更改選中的區(qū)域 |
| 更改從光標(biāo)當(dāng)前位置開始的整個(gè)行 |
| 在光標(biāo)當(dāng)前所在行下方創(chuàng)建一個(gè)新空行,并將光標(biāo)移動到這一新空行的開頭 |
| 在光標(biāo)當(dāng)前所在行的上方創(chuàng)建一個(gè)新空行,并將光標(biāo)移動到這一新空行的開頭 |
| 替換光標(biāo)當(dāng)前位置的單個(gè)字符 |
| 替換從光標(biāo)當(dāng)前位置開始的多個(gè)字符,并在退出插入模式時(shí)結(jié)束 |
| 退出插入或可視模式 |
| 向選中區(qū)域右邊縮進(jìn) |
| 向選中區(qū)域左邊縮進(jìn) |
| 啟動時(shí)突出顯示字符 |
| 啟動時(shí)突出顯示的整個(gè)行 |
| 將當(dāng)前行移動/復(fù)制到內(nèi)存 |
| 將從當(dāng)前行開始的 10 行移動/復(fù)制到內(nèi)存 |
| 粘貼復(fù)制或剪切的文本;如果字符被復(fù)制(yw?dw?或?D),就在光標(biāo)當(dāng)前位置之后粘貼這些字符。如果復(fù)制的是行,就在光標(biāo)當(dāng)前所在的行下面粘貼這些行 |
| 作用和?p?一樣,但是它在光標(biāo)當(dāng)前位置的前面粘貼字符,在光標(biāo)當(dāng)前所在行上面粘貼行 |
| 撤消最后的更改 |
| 重做 |
| 搜索已找到的下一個(gè)模式,并將光標(biāo)放在已找到的模式的開頭 |
| 搜索已找到的上一個(gè)模式,并將光標(biāo)放在已找到的模式的開頭 |
| 重復(fù)上一次的搜索 |
| 重復(fù)上一次的搜索,但搜索的方向相反 |
| 在 Vim 會話外執(zhí)行?<cmd> |
|
行模式
盡管廣泛使用的是命令和插入模式,但行模式同樣重要,只是有時(shí)候沒有被充分理解和使用。行模式進(jìn)入行編輯器,使您可以在一行或多行上處理命令??紤]到 vi 以 ex 編輯器命名,所以它只適合進(jìn)入 ex 編輯器的行模式。
要從命令模式進(jìn)入行模式,輸入冒號(:)即可。然后將光標(biāo)移動到窗口左下角。繼續(xù)輸入時(shí),所有文本都會出現(xiàn)在窗口底部的冒號后面。單擊?Enter,開始計(jì)算和執(zhí)行行模式命令。如果確定不執(zhí)行在行模式下輸入的行,則單擊?Escape?返回到命令模式。
使用編輯器的行模式時(shí),請記住兩種命令樣式。首先,在輸入命令時(shí),vi 或 Vim 按原樣執(zhí)行命令。如果執(zhí)行的命令與修改數(shù)據(jù)有關(guān),當(dāng)前行就是目標(biāo)。但是,使用第二種方法可以提供行數(shù)以處理指定的行。要輸入行,請?jiān)诿疤柡竺孑斎胍幚淼男袛?shù)或行范圍,并用逗號(,)分隔開始和結(jié)束范圍。
例如,如果只處理行 23,那么命令以?:23?開始。如果要修改 2319 到 3819 之間的行,則輸入?:2319,3819。要處理從行 45 開始到文件結(jié)尾之間的一個(gè)命令,需要將最后行的參數(shù)替換為美元符號($)— 即?:45,$。
以下命令只是可以在行模式下執(zhí)行的最基本命令:
- :w <file name>:將文件寫入磁盤。如果提供一個(gè)參數(shù),編輯器會試圖將數(shù)據(jù)寫入 <file name>。
注意:如果提供一個(gè)參數(shù),而且存在 <file name>,編輯器不會覆蓋現(xiàn)有文件的數(shù)據(jù)。
- :w! <file name>:將文件寫入磁盤并覆蓋文件中的所有數(shù)據(jù)。
- :<x>,<y> w <file name>:將從 <x> 到 <y> 之間的行寫入 <file name>。
- :q:試圖在不保存的情況下退出編輯器。
注意:如果數(shù)據(jù)已修改,則需要先保存文件再退出編輯器,否則將導(dǎo)致文件未被保存。
- :q!:退出編輯器,不將文件寫入磁盤。
- :n:如果編輯多個(gè)文件,首先編輯編輯列表中的下一個(gè)文件。
- :e <file name>:編輯 <file name>。
- :e#:如果編輯兩個(gè)文件,則在兩個(gè)文件之間切換。
- :s/<str1>/<str2>/:用當(dāng)前行中的 <str2> 替換第一次出現(xiàn)的 <str1>。
- :1,$ s/<str1>/<str2>/g:從行 1 開始,在整個(gè)文件中執(zhí)行,用 <str2> 替換所有的 <str1>。
- :r <file name>:將 <file name> 讀入當(dāng)前編輯器會話中。
- :<x>,<y> d:刪除從 <x> 到 <y> 之間的行。
- :<x>,<y> y:復(fù)制從 <x> 到 <y> 之間的行。
Vim多行縮進(jìn)技巧
按v進(jìn)入visual狀態(tài),選擇多行,用>或<縮進(jìn)或縮出?通常根據(jù)語言特征使用自動縮進(jìn)排版:在命令狀態(tài)下對當(dāng)前行用== (連按=兩次), 或?qū)Χ嘈杏胣==(n是自然數(shù))表示自動縮進(jìn)從當(dāng)前行起的下面n行。你可以試試把代碼縮進(jìn)任意打亂再用n==排版,相當(dāng)于一般IDE里的code format。使用gg=G可對整篇代碼進(jìn)行排版。
在WORD間移動
除了word之外,Vim還有一種概念WORD。雖然這只是大小寫的不同,但是他們卻代表了兩種不同的事物。word是指由iskeyword選項(xiàng)定義的字符串;而WORD則是指用空白符分隔的字符串。與WORD相關(guān)的一些命令如下:
| [count]B | ??向后移動count個(gè)WORDS |
| [count]E | ??向前移動count個(gè)WORDS,并且將光標(biāo)置于WORD的末尾. |
| [count]gE | ??向后移動count個(gè)WORDS,并且將光標(biāo)置于WORD的末尾. |
| [count]W | ??向前移動count個(gè)OWRDS. |
| w | 向前移動一個(gè)word |
| e | |
| b | 向后移動一個(gè)word |
| set iskeyword | 定義word選項(xiàng) |
| W | 向前移動一個(gè)WORD |
| E | |
| B | 向后移動一個(gè)WORD |
非正常關(guān)閉vi編輯器時(shí)會生成一個(gè).swp文件
關(guān)于swp文件 使用vi,經(jīng)??梢钥吹絪wp這個(gè)文件,那這個(gè)文件是怎么產(chǎn)生的呢,當(dāng)你打開一個(gè)文件,vi就會生成這么一個(gè).(filename)swp文件?以備不測(不測下面討論),如果你正常退出,那么這個(gè)這個(gè)swp文件將會自動刪除?。下面說不測。 不測分為:1當(dāng)你用多個(gè)程序編輯同一個(gè)文件時(shí)。 ?????????2非常規(guī)退出時(shí)。 第一種情況的話,為了避免同一個(gè)文件產(chǎn)生兩個(gè)不同的版本(vim中的原話),還是建議選擇readonly為好。 第二種情況的話,你可以用vim -r filename恢復(fù),然后再把swp文件刪除(這個(gè)時(shí)候要確保你的swp文件沒有用處了,要不然你會傷心的)swp文件的來歷,當(dāng)你強(qiáng)行關(guān)閉vi時(shí),比如電源突然斷掉或者你使用了Ctrl+ZZ,vi自動生成一個(gè).swp文件,下次你再編輯時(shí),就會出現(xiàn)一些提示。
你可以使用
vi -r {your file name}
來恢復(fù)文件,然后用下面的命令刪除swp文件,不然每一次編輯時(shí)總是有這個(gè)提示。
rm .{your file name}.swp
在網(wǎng)上搜到了一個(gè)類似的提示,不同的linux提示可能不一樣
“.xorg.conf.swp” already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit:
當(dāng)然可以用R鍵恢復(fù)。
vi編輯器要正常退出可以使用Shift-ZZ 。
如果不想每次vi崩潰時(shí)不保存swp文件,可以修改文件,
總結(jié)