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 % 。 如果前面已經執行過了,則重復前面的命令時,只需要:!!
 

完! 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM