1)一些常用的Vim配置,在~/.vimrc中syntax on 支援文法高亮set nu 顯示行號
set nonu 不顯示行號set ai 設定自動縮排set shiftwidth=4 設定自動縮排 4 個空格, 當然要設自動縮排先.set sts=4 即設定 softtabstop 為 4. 輸入 tab 後就跳了 4 格.set tabstop=4 實際的 tab 即為 4 個空格, 而不是預設的 8 個.set expandtab 在輸入 tab 後, vim 用恰當的空格來填充這個 tab.:set hls 開啟搜尋高亮
:set nohls 取消搜尋高亮
:set list : 顯示特殊字元:set nolist 2)多檔案編輯:e filename vim將在原視窗中開啟新的檔案, 若舊檔案編輯過, 會要求儲存.:sp filename vim將分割出一個橫向視窗, 並在該視窗中開啟新檔案.:vsp filename vim將在右邊分割出一個視窗, 並在該視窗中開啟新檔案.如果:sp 或 :vsp沒有指定檔案,則在新視窗中開啟原檔案。ctrl+w w來在vim開啟的多個視窗中切換.ctrl+w q來關閉多個視窗中當前的視窗. 開啟的兩個檔案上下視窗分布 : vim -o file1 file2
開啟的兩個檔案左右視窗分布 : vim -O file1 file2
3) 尋找/xxx(?xxx) 表示在整篇文檔中搜尋匹配xxx的字串, / 表示向下尋找, ? 表示向上尋找.尋找到以後, 再輸入 n 尋找下一個匹配處, 輸入 N 反方向尋找.*(#) 當游標停留在某個單詞上時, 輸入這條命令表示尋找與該單詞匹配的下(上)一個單詞. 同樣, 再輸入 n 尋找下一個匹配處, 輸入 N 反方向尋找. (可以使用shift+* 或 shift + #來尋找當前游標所在單詞)g*(g#) 此命令與上條命令相似, 只不過它不完全符合游標所在處的單詞, 而是匹配包含該單詞的所有字串.% 本命令尋找與游標所在處相匹配的反括弧, 包括 () [] { }.
在vim中一般尋找 :/str,如果有空格則需要:/str str2/
4) 游標移動w(e) 移動游標到下一個單詞. b 移動游標到上一個單詞.0 移動游標到本行最開頭. ^ 移動游標到本行最開頭的字元處. $ 移動游標到本行結尾處.向前向後翻頁 ctrl+f 和 ctrl+b. % 跳轉到相配對的括弧. G(shift+g) - go to the last line in the vim editor (檔案的末尾) 1G - goto line number 1(檔案的開始)20G - goto line number 20 5)拷貝, 刪除與粘貼
x表示刪除當前字元。
在 vi 中 y 表示拷貝, d 表示刪除, p 表示粘貼. 其中拷貝與刪除是與游標移動命令結合的, 看幾個例子就能夠明白了.yw 表示拷貝從當前游標到游標所在單詞結尾的內容. dw 表示刪除從當前游標到游標所在單詞結尾的內容. y0 表示拷貝從當前游標到游標所在行首的內容. d0 表示刪除從當前游標到游標所在行首的內容. y$ 表示拷貝從當前游標到游標所在行尾的內容. d$ 表示刪除從當前游標到游標所在行尾的內容. yfa 表示拷貝從當前游標到游標後面的第一個a字元之間的內容. dfa 表示刪除從當前游標到游標後面的第一個a字元之間的內容.特殊地: yy 表示拷貝游標所在行. dd 表示刪除游標所在行. D 表示刪除從當前游標到游標所在行尾的內容.
刪除整個文檔 :1,$d
刪除某行後面的分行符號號:在命令狀態下,在某一行上按"J"鍵將Join下一行,呵呵
u 撤銷上次的操作,ctrl+r恢複上次的撤銷。
刪除所有空白行(^是行的開始,\s*是零個或者多個空白字元;$是行尾) :g/^\s*$/d
6)替換單個字元替換用r,覆蓋多個字元用R,用多個字元替換一個字元用s,整行替換用S.:s/vivian/sky/ 替換當前行第一個 vivian 為 sky:s/vivian/sky/g 替換當前行所有 vivian 為 sky:n,$s/vivian/sky/ 替換第 n 行開始到最後一行中每一行的第一個 vivian 為 sky:n,$s/vivian/sky/g 替換第 n 行開始到最後一行中每一行所有 vivian 為 skyn 為數字,若 n 為 .,表示從當前行開始到最後一行:%s/vivian/sky/(等同於 :g/vivian/s//sky/) 替換每一行的第一個 vivian 為 sky:%s/vivian/sky/g(等同於 :g/vivian/s//sky/g) 替換每一行中所有 vivian 為 sky可以使用 # 作為分隔字元,此時中間出現的 / 不會作為分隔字元:s#vivian/#sky/# 替換當前行第一個 vivian/ 為 sky/:%s+/oradata/apras/+/user01/apras1+ (使用+ 來 替換 / ): /oradata/apras/替換成/user01/apras1/
:2,50s/part1/part2 #用part2替換第2行到第50行中每行第1個part1:2,50s/part1/part2/g #用part2替換第2行到第50行中所有的part1:.,+3s/part1/part2 #用part2替換當前行以及當前行後面的三行中每行第1個part1
:.,+3s/part1/part2/g #用part2替換當前行以及當前行後面的三行中所有的part1
例如將每行增加 xxx : :%s/\(.*\)/\1 xxx/g
7)visual block狀態
ctrl+v進入,列塊選擇,例如4l選中游標接下來的4列,7j游標開始的7行,執行4l和7j後選中7行4列的塊, 也可以在ctrl+v後使用hjkl來控制選擇的行和列,可以使用y,d等進行拷貝刪除操作。例如刪除多行前面的空格。
(塊編輯:編輯一行,效果被應用到所有選中的行)例如注釋多行:ctrl+v選擇塊後,然後I進入編輯狀態在第一行的開始輸入#,然後兩次esc退出後,剛才選中的所有行前面自動加#,從而達到注釋所有行的目的。
shift+v可以用來選中多行,然後:s/aaa/bbb/g, 對選中的行中進行替換。
shift+v選中多行後,執行d直接刪除選中的多行。
http://man.chinaunix.net/newsoft/vi/doc/visual.html
8) 其他
查看當前vim開啟的檔案:vim下:f
vim中去除空行或行末的^M:dos2unix ufile
VIM中sort不能用:只能在terminal下執行sort -u file > file_new
vim中diff檔案: 如果已經開啟了一個檔案,則 :vert diffsplit file2, 如果還沒有開啟檔案,則直接執行vi -O test_vi.txt test_vi2.txt,此時兩個檔案左右排列,如果需要兩個檔案上下排列的話,執行vi -o test_vi.txt test_vi2.txt。 vimdiff最多可以同時比較4個檔案。 不退出vim,直接執行命令,例如在perl檔案中,直接執行不退出,:!perl % 。 如果前面已經執行過了,則重複前面的命令時,只需要:!!
完!