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