VIM的高级使用
?
?
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 為 sky n 為數字,若 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 % 。 如果前面已經執行過了,則重復前面的命令時,只需要:!! ?完!?
總結
- 上一篇: TX Text Control文字处理教
- 下一篇: Live Writer测试