前言:
vim,這里就不介紹了,用功linux的基本都知曉了绣张,一般我們寫(xiě)個(gè)小腳本的話(huà)狂秦,很多人習(xí)慣用特定的ide編輯器進(jìn)行編程,如果能夠熟練使用vim后治专,一定會(huì)讓你在工作中更持續(xù)激情下去卖陵。
vim開(kāi)發(fā)c
這里用vim作為c的編輯器
vim ~/.vimrc
#輸入一下內(nèi)容
:set number
:set sw=8
:set ts=8
:set sm
:set cin
:syntax on
然后效果是:
image.png
可以清楚的看到,vim代碼風(fēng)格张峰,有行數(shù)泪蔫,有顏色的特效了。
因?yàn)関im啟動(dòng)時(shí)會(huì)先加載~/.vimrc,所以我們加配置文件來(lái)做到喘批。
vim一些常見(jiàn)命令:
這里備注一下撩荣,下面內(nèi)容來(lái)自博客:
vim高級(jí)使用
1)一些常用的Vim配置,在~/.vimrc中
syntax on 支持語(yǔ)法高亮
set nu 顯示行號(hào)
set nonu 不顯示行號(hào)
set ai 設(shè)置自動(dòng)縮進(jìn)
set shiftwidth=4 設(shè)置自動(dòng)縮進(jìn) 4 個(gè)空格, 當(dāng)然要設(shè)自動(dòng)縮進(jìn)先.
set sts=4 即設(shè)置 softtabstop 為 4\. 輸入 tab 后就跳了 4 格.
set tabstop=4 實(shí)際的 tab 即為 4 個(gè)空格, 而不是缺省的 8 個(gè).
set expandtab 在輸入 tab 后, vim 用恰當(dāng)?shù)目崭駚?lái)填充這個(gè) tab.
:set hls 打開(kāi)搜索高亮
:set nohls 取消搜索高亮
:set list : 顯示特殊字符
:set nolist
2)多文件編輯
:e filename vim將在原窗口中打開(kāi)新的文件, 若舊文件編輯過(guò), 會(huì)要求保存.
:sp filename vim將分割出一個(gè)橫向窗口, 并在該窗口中打開(kāi)新文件.
:vsp filename vim將在右邊分割出一個(gè)窗口, 并在該窗口中打開(kāi)新文件.
如果:sp 或 :vsp沒(méi)有指定文件饶深,則在新窗口中打開(kāi)原文件餐曹。
ctrl+w w來(lái)在vim打開(kāi)的多個(gè)窗口中切換.
ctrl+w q來(lái)關(guān)閉多個(gè)窗口中當(dāng)前的窗口.
打開(kāi)的兩個(gè)文件上下窗口分布 : vim -o file1 file2
打開(kāi)的兩個(gè)文件左右窗口分布 : vim -O file1 file2
3) 查找
/xxx(?xxx) 表示在整篇文檔中搜索匹配xxx的字符串, / 表示向下查找, ? 表示向上查找.查找到以后, 再輸入 n 查找下一個(gè)匹配處, 輸入 N 反方向查找.
*(#) 當(dāng)光標(biāo)停留在某個(gè)單詞上時(shí), 輸入這條命令表示查找與該單詞匹配的下(上)一個(gè)單詞. 同樣, 再輸入 n 查找下一個(gè)匹配處, 輸入 N 反方向查找. (可以使用shift+* 或 shift + #來(lái)查找當(dāng)前光標(biāo)所在單詞)
g*(g#) 此命令與上條命令相似, 只不過(guò)它不完全匹配光標(biāo)所在處的單詞, 而是匹配包含該單詞的所有字符串.
% 本命令查找與光標(biāo)所在處相匹配的反括號(hào), 包括 () [] { }.
在vim中一般查找 :/str,如果有空格則需要:/str str2/
4) 光標(biāo)移動(dòng)
w(e) 移動(dòng)光標(biāo)到下一個(gè)單詞. b 移動(dòng)光標(biāo)到上一個(gè)單詞.
0 移動(dòng)光標(biāo)到本行最開(kāi)頭. ^ 移動(dòng)光標(biāo)到本行最開(kāi)頭的字符處. $ 移動(dòng)光標(biāo)到本行結(jié)尾處.
向前向后翻頁(yè) ctrl+f 和 ctrl+b.
% 跳轉(zhuǎn)到相配對(duì)的括號(hào).
G(shift+g) - go to the last line in the vim editor (文件的末尾)
1G - goto line number 1(文件的開(kāi)始)
20G - goto line number 20
5)拷貝, 刪除與粘貼
x表示刪除當(dāng)前字符。
在 vi 中 y 表示拷貝, d 表示刪除, p 表示粘貼. 其中拷貝與刪除是與光標(biāo)移動(dòng)命令結(jié)合的, 看幾個(gè)例子就能夠明白了.
yw 表示拷貝從當(dāng)前光標(biāo)到光標(biāo)所在單詞結(jié)尾的內(nèi)容. dw 表示刪除從當(dāng)前光標(biāo)到光標(biāo)所在單詞結(jié)尾的內(nèi)容. y0 表示拷貝從當(dāng)前光標(biāo)到光標(biāo)所在行首的內(nèi)容. d0 表示刪除從當(dāng)前光標(biāo)到光標(biāo)所在行首的內(nèi)容. y$ 表示拷貝從當(dāng)前光標(biāo)到光標(biāo)所在行尾的內(nèi)容. d$ 表示刪除從當(dāng)前光標(biāo)到光標(biāo)所在行尾的內(nèi)容. yfa 表示拷貝從當(dāng)前光標(biāo)到光標(biāo)后面的第一個(gè)a字符之間的內(nèi)容. dfa 表示刪除從當(dāng)前光標(biāo)到光標(biāo)后面的第一個(gè)a字符之間的內(nèi)容.
特殊地: yy 表示拷貝光標(biāo)所在行. dd 表示刪除光標(biāo)所在行. D 表示刪除從當(dāng)前光標(biāo)到光標(biāo)所在行尾的內(nèi)容.
刪除整個(gè)文檔 :1,$d
刪除某行后面的換行符號(hào):在命令狀態(tài)下敌厘,在某一行上按"J"鍵將Join下一行台猴,呵呵
u 撤銷(xiāo)上次的操作,ctrl+r恢復(fù)上次的撤銷(xiāo)俱两。
刪除所有空白行(^是行的開(kāi)始饱狂,\s*是零個(gè)或者多個(gè)空白字符;$是行尾) :g/^\s*$/d
6)替換
單個(gè)字符替換用r宪彩,覆蓋多個(gè)字符用R休讳,用多個(gè)字符替換一個(gè)字符用s,整行替換用S.
:s/vivian/sky/ 替換當(dāng)前行第一個(gè) vivian 為 sky
:s/vivian/sky/g 替換當(dāng)前行所有 vivian 為 sky
:n,$s/vivian/sky/ 替換第 n 行開(kāi)始到最后一行中每一行的第一個(gè) vivian 為 sky
:n,$s/vivian/sky/g 替換第 n 行開(kāi)始到最后一行中每一行所有 vivian 為 sky
n 為數(shù)字尿孔,若 n 為 .衍腥,表示從當(dāng)前行開(kāi)始到最后一行
:%s/vivian/sky/(等同于 :g/vivian/s//sky/) 替換每一行的第一個(gè) vivian 為 sky
:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替換每一行中所有 vivian 為 sky
可以使用 # 作為分隔符磺樱,此時(shí)中間出現(xiàn)的 / 不會(huì)作為分隔符
:s#vivian/#sky/# 替換當(dāng)前行第一個(gè) vivian/ 為 sky/
:%s+/oradata/apras/+/user01/apras1+ (使用+ 來(lái) 替換 / ): /oradata/apras/替換成/user01/apras1/
:2,50s/part1/part2 #用part2替換第2行到第50行中每行第1個(gè)part1
:2,50s/part1/part2/g #用part2替換第2行到第50行中所有的part1
:.,+3s/part1/part2 #用part2替換當(dāng)前行以及當(dāng)前行后面的三行中每行第1個(gè)part1
:.,+3s/part1/part2/g #用part2替換當(dāng)前行以及當(dāng)前行后面的三行中所有的part1
例如將每行增加 xxx : :%s/\(.*\)/\1 xxx/g
7)visual block狀態(tài)
ctrl+v進(jìn)入,列塊選擇婆咸,例如4l選中光標(biāo)接下來(lái)的4列,7j光標(biāo)開(kāi)始的7行芜辕,執(zhí)行4l和7j后選中7行4列的塊尚骄, 也可以在ctrl+v后使用hjkl來(lái)控制選擇的行和列,可以使用y侵续,d等進(jìn)行拷貝刪除操作倔丈。例如刪除多行前面的空格。
(塊編輯:編輯一行状蜗,效果被應(yīng)用到所有選中的行)例如注釋多行:ctrl+v選擇塊后需五,然后I進(jìn)入編輯狀態(tài)在第一行的開(kāi)始輸入#,然后兩次esc退出后轧坎,剛才選中的所有行前面自動(dòng)加#宏邮,從而達(dá)到注釋所有行的目的。
shift+v可以用來(lái)選中多行缸血,然后:s/aaa/bbb/g, 對(duì)選中的行中進(jìn)行替換蜜氨。
shift+v選中多行后,執(zhí)行d直接刪除選中的多行捎泻。
[http://man.chinaunix.net/newsoft/vi/doc/visual.html](http://man.chinaunix.net/newsoft/vi/doc/visual.html)
8) 其他
查看當(dāng)前vim打開(kāi)的文件:vim下:f
vim中去除空行或行末的^M:dos2unix ufile
VIM中sort不能用:只能在terminal下執(zhí)行sort -u file > file_new
**vim中diff文件: 如果已經(jīng)打開(kāi)了一個(gè)文件飒炎,則 **:vert diffsplit file2, 如果還沒(méi)有打開(kāi)文件笆豁,則直接執(zhí)行vi -O test_vi.txt test_vi2.txt郎汪,此時(shí)兩個(gè)文件左右排列,如果需要兩個(gè)文件上下排列的話(huà)闯狱,執(zhí)行vi -o test_vi.txt test_vi2.txt煞赢。 vimdiff最多可以同時(shí)比較4個(gè)文件。
不退出vim扩氢,直接執(zhí)行命令耕驰,例如在perl文件中,直接執(zhí)行不退出录豺,:!perl % 朦肘。 如果前面已經(jīng)執(zhí)行過(guò)了,則重復(fù)前面的命令時(shí)双饥,只需要:!!