天天看點

菜鳥眼中的vim 編譯器

Vi(Visual Interface) 是一種文本編輯器,常見的文本編譯器有ASCII編碼,UNICODE編碼等。Vim即vi improved :是vi的增強版,vim是模式化的編輯。

vim在工作中有3種模式:

-編輯模式:也叫指令模式,:預設模式,移動光标,剪切/粘貼文本;

-插入模式:在文本檔案當中進行輸入内容;

-末行模式:vim内置的指令接口,執行vim的内置指令,儲存,退出等

如下圖所示:

<a href="http://blog.51cto.com/youguofusi/1965693"></a>

菜鳥眼中的vim 編譯器

文字解釋三者之間的模式轉換:

指令–&gt;插入:

i: 在目前光标所在字元的前面,轉為輸入模式;

I:在目前光标所在行的行首,轉換為輸入模式

A:在目前光标所在行的行尾,轉換為輸入模式

a: 在目前光标所在字元的後面,轉為輸入模式;

o: 在目前光标所在行的下方,建立一行,并轉為輸入模式;

O:在目前光标所在行的上方,建立一行,并轉為輸入模式;

插入–&gt;指令:

ESC

指令–&gt;擴充:

:

擴充–&gt;指令:

ESC,Enter

注意:插入模式和擴充指令模式之間不能直接切換。

EX:使用Esc2次或enter回到指令模式,将沒有:

q退出

q!強制退出

w儲存

wq或x儲存并退出

wq!或x!當檔案對目前使用者權限為read-only時,可以強制儲存并退出(僅限root和目前檔案的owner)

<a href="http://blog.51cto.com/youguofusi/1965693">打開檔案</a>

vim +# :打開檔案,直接讓光标處于第#行的行首

vim +:打開檔案,定位至最後一行,預設行尾

vim +/PATTERN : 打開檔案,直接讓光标處于第一個PATTERN比對到的行的行首

–b file 二進制方式打開檔案

–d file1 file2… 比較多個檔案

-m file 隻讀打開檔案

ex file 或 vim –e 直接進入ex模式

如果該檔案存在,檔案被打開并顯示内容

如果該檔案不存在,當編輯後第一次存盤時建立它

<a href="http://blog.51cto.com/youguofusi/1965693">關閉檔案</a>

1、擴充模式關閉檔案

:q 退出

:wq 儲存并退出

:q! 不儲存并退出

:w 儲存

:w! 強行儲存

:wq! 強行儲存退出

2、指令模式下退出

ZZ: 儲存并退出

ZQ:不儲存退出

<a href="http://blog.51cto.com/youguofusi/1965693">移動光标(編輯模式)</a>

1、逐字元移動:

h: 左

l: 右

j: 下

k: 上

#h: 表示移動#個字元

2、以單詞為機關移動

w: 移至下一個單詞的詞首

e: 跳至目前或下一個單詞的詞尾

b: 跳至目前或前一個單詞的詞首

#w: 表示移動#個單詞

3、行内跳轉:

0: 絕對行首

^: 行首的第一個非空白字元

$: 絕對行尾

4、行間跳轉

#G:跳轉至第#行

gg: 第一行

G:最後一行

5、目前頁跳轉:

H:頁首 M:頁中間行 L:頁底

## vim編輯指令 ##

1、翻屏

Ctrl+f: 向下翻一屏

Ctrl+b: 向上翻一屏

Ctrl+d: 向下翻半屏

Ctrl+u: 向上翻半屏

2、删除單個字元

x: 删除光标所在處的單個字元

#x: 删除光标處起始的#個字元

xp: 交換光标所在處的字元及其後面字元的位置

删除指令: d

d指令跟跳轉指令組合使用

d$: 删除到行尾

d^:删除到非空行首

d0:删除到行首

dw:删除下一個單詞的詞首

de:删除跳至目前或下一個單詞的詞尾

db:删除跳至目前或前一個單詞的詞首

dd: 删除目前光标所在行

dd: 删除包括目前光标所在行在内的#行;

粘貼指令 p

p: 如果删除或複制為整行内容,則粘貼至光标所在行的下方,如果複制或删除的内容為非整行,則粘貼至光标所在字元的後面

P: 如果删除或複制為整行内容,則粘貼至光标所在行的上方,如果複制或删除的内容為非整行,則粘貼至光标所在字元的前面

複制指令 y

用法同d指令

#yy: 複制多行

Y: 複制整行

修改:先删除内容,再轉換為輸入模式

c: 用法同d指令

cc:删除目前行并輸入新内容

C:删除目前光标到行尾,并切換成插入模式

撤消編輯操作 u

u:撤消前一次的編輯操作

#u: 直接撤消最近#次編輯操作

連續u指令可撤消此前的n次編輯操作

撤消最近一次撤消操作:Ctrl+r

## 擴充模式 ##

1、内容界定

.: 表示目前行

:最後一行.,-1 目前行到倒數第二行

# 具體第#行,例如2表示第2行

+#: 從左側#表示的起始行,加上右側#表示的行數 如:2,+3 表示2到5行

##:從左側#表示起始行,到右側#表示結尾行

% 全文, 相當于1,$

2、查找

/PATTERN 從目前光标所在處向檔案尾部查找

?PATTERN 從目前光标所在處向檔案首部查找

n 與指令同方向

N 與指令反方向

查找并替換

在末行模式下使用s指令

格式:s/要查找的内容/替換為的内容/修飾符

修飾符:

i: 忽略大小寫

g: 全局替換;預設情況下,每一行隻替換第一次出現

gc:全局替換,每次替換前詢問

查找替換中的分隔符/可替換為其它字元,例如

s@/etc@/var@g

s#/boot#/#i

多檔案模式

使用vim編輯多個檔案

vim FILE1 FILE2 FILE3

:next 切換至下一個檔案

:prev 切換至前一個檔案

:last 切換至最後一個檔案

:first 切換至第一個檔案

:q退出目前檔案

:wall 儲存所有

:qall 退出所有

:wqall儲存所有檔案并退出

## 多視窗模式 ##

分屏顯示一個檔案

Ctrl+w, s: 水準拆分視窗

Ctrl+w, v: 垂直拆分視窗

在視窗間切換光标:

Ctrl+w, ARROW(h,j,k,l或方向鍵)

:qa 關閉所有視窗

分視窗編輯多個檔案

vim -o : 水準分割顯示

vim -O : 垂直分割顯示

q 能退出多視窗模式

/pat1/,/pat2/

從第一次被pat1模式比對到的行開始,一直到第一次被

pat2比對到的行結束

#,/pat/ :從第#行開始到第一次比對到pat為止

/pat/,$:從第一次比對到pat到最後一行

使用方式:後跟一個編輯指令

d(删除)

y(複制)

w file: 将範圍内的行另存至指定檔案中

r file:在指定位置插入指定檔案中的所有内容

<a href="http://blog.51cto.com/youguofusi/1965693">進階話題</a>

1、顯示或取消顯示行号

:set nu

:set nonu

nu = number

2、顯示忽略或區分字元大小寫

:set ic

:set noic

ic = ignorecase

3、設定自動縮進

:set ai

:set noai

ai = autoindent

4、查找到的文本高亮顯示或取消

:set hlsearch

:set nohlsearch

5、文法高亮

:syntax on

:syntax off

注意:特性目前有效,如果想要永久有效需修改配置檔案

配置檔案定義:

/etc/vimrc 針對所有使用者

~/.vimrc 針對目前使用者

<a href="http://blog.51cto.com/youguofusi/1965693">課堂練習</a>

1、複制/etc/profile至/tmp/目錄,用查找替換指令删除/tmp/profile檔案中的行首的空白字元

%s/^[[:blank:]]+//g

思路:

查找内容為空白字元為首要加^,替換内容為空白,g表示全局替換。

2、複制/etc/rc.d/init.d/functions檔案至/tmp目錄,用查找替換指令為/tmp/functions的每行開頭為空白字元的行的行首添加一個#号

%s/^[[:spacge:]]/# /g

或%s/^([[:space:]])/#\1/g

或%s/^[[:space:]]/#&amp;/

思路:第二種方法使用了後向引用,\1表示引用[[:space:]],#号後都為空白字元。第三種方法中&amp;相當于前面的空白字元。

3、複制/etc/rc.d/init.d/functions檔案至/tmp目錄,替換/tmp/functions檔案中的/etc/sysconfig/init為/var/log

%s/\/etc/sysconfig/init/\/viar/log/gi

思路:這裡的\表示轉義,gi表示全局替換,忽略大小寫

4、删除/tmp/functions檔案中所有以#開頭,且#後面至少有一個空白字元的行的行首的#号

%s/^#[[:space:]]{1,}//g

思路:\{1,\}表示比對前面指令至少1次,查找内容為:^#[[:space:]]\{1,\},替換内容:要删除是以為空。

本文轉自 優果馥思 51CTO部落格,原文連結:http://blog.51cto.com/youguofusi/1965693