天天看點

組團學-vim(zutuanxue.com)

一、vim使用介紹

介紹

在linux系統中,大部配置設定置檔案都是ASCII的純文字形式存放的,是以我們在修改系統設定的時候使用簡單的文本編輯軟體就可以實作了,如果你使用過windows當中的word的話,那麼你可能會感覺linux字元界面的文本編輯工具并不是太好用,畢竟沒有圖形視窗,看着不會太舒服。但是既然要學習linux,掌握并熟練使用文本編輯工具是必不可少的技能,在linux當中的文本編輯工具有很多,如emacs pico nano joe vi/vim 等等

既然有這麼多文本編輯工具,為什麼要學習vi/vim呢?

為什麼要使用vim?

雖然在linux下的文本編輯器衆多,這些工具都有各自的優點,但是有幾點是其它編輯工具所不能比拟的

1 所有的類Unix系統都内建vi,其它的編輯工具則不一定,而vim相當于是vi的更新版

2 很多軟體的編輯界面都會調用vi,如後面提到的crontab、edquota等

3 vim具有程式編輯能力,可以主動以字型顔色辨別文法的正确性,友善代碼編寫

4 程式簡單,編輯速度非常快

綜上所述這是一個老式的文字處理工具,但是功能很齊全,不僅是文本處理工具,還是一個程式編輯工具,就連官方網站也說vim是一個程式開發工具而不是文字處理軟體,因為它包含了很多額外的功能,如:多檔案編輯,區塊複制等,這些功能讓我們在進行配置檔案修改的時候會更友善。

介紹就到這裡,我們來看一下基本使用

二、基本使用

由于vi/vim是一個全螢幕的文本編輯器,它工作在三種模式下:分别是指令模式、輸入模式和末行模式。可以分别從指令模式切換到輸入模式和末行模式,也可以從末行模式或輸入模式切換到指令模式,但是輸入模式與末行模式之間不能互相切換。

組團學-vim(zutuanxue.com)

第一種:指令模式,當我使用“vim myfile”指令打開myfile這個檔案時就處于指令模式,螢幕左下角為檔案名(myfile),1L 表示本檔案有1 行,26C 表示此檔案有26 個字元。1,25表示光标目前位置,在此模式下使用者可以輸入指令來進行檔案存盤、移動光标、删除字元、撤消指令和重複指令等操作,還可以設定編輯環境。

this is the command mode.

~

~ 表示沒有内容

“myfile” 1L, 26C 1,25 全部

第二種:插q入模式,又叫輸入模式。在輸入模式下,螢幕的左下方會出現INSERT (插入)字樣。在輸入狀态下,使用者可以輸入文本的内容。

this is the command mode.

~

~

~

~

– 插入 – 1,25 全部

第三種:末行模式。隻要在指令模式下輸入指令“:”即可進入末行模式。在末行模式下,可以進行儲存檔案、退出vi、進行查找和替換等操作。

this is the command mode.

~

~

~

~

:q!

三種模式介紹完了,我們看下vim的使用,這裡面我們還是按照三種模式來對vim的使用進行說明

指令模式可以使用的按鍵說明

光标控制按鍵

h 或 向左箭頭鍵(←)

光标向左移動一個字元

j 或 向下箭頭鍵(↓)

光标向下移動一個字元

k 或 向上箭頭鍵(↑)

光标向上移動一個字元

l 或 向右箭頭鍵(→)

光标向右移動一個字元

15j/15↓

向下移動15行

[Ctrl] + [f]

螢幕『向下』移動一頁,相當于 [Page Down]按鍵 (常用)

[Ctrl] + [b]

螢幕『向上』移動一頁,相當于 [Page Up] 按鍵 (常用)

[Ctrl] + [d]

螢幕『向下』移動半頁

[Ctrl] + [u]

螢幕『向上』移動半頁

n

那個 n 表示『數字』,例如 3 。按下數字後再按空格鍵,光标會向右移動3 個字元。

0 或功能鍵[Home]

這是數字『 0 』:移動到這一行的最前面字元處 (常用)

$ 或功能鍵[End]

移動到這一行的最後面字元處(常用)

H

光标移動到這個螢幕的最上方那一行的第一個字元

M

光标移動到這個螢幕的中央那一行的第一個字元

L

光标移動到這個螢幕的最下方那一行的第一個字元

G

移動到這個檔案的最後一行(常用)

nG

n 為數字。移動到這個檔案的第 n 行。可配合 :set nu

gg

移動到這個檔案的第一行,相當于 1G (常用)

n

n 為數字。光标向下移動 n 行(常用)

搜尋與替換

/abc

向光标之下查找一個名稱為 abc 的字元串。 (常用)

?abc

向光标之上查找一個字元串名稱為 abc 的字元串。

n

這個 n 是英文按鍵。代表『重複前一個查找的動作』。

N

這個 N 是英文按鍵。與 n 剛好相反

:n1,n2s/abc1/abc2/g

n1 與 n2 為數字。在第 n1 與 n2 行之間查找 abc1 替換為 abc2

:1,$s/abc1/abc2/g

從第一行到最後一行查找 abc1 字元串,并将該字元串替換為 abc2 (常用)

:1,$s/abc1/abc2/gc

從第一行到最後一行查找 abc1 字元串,并将該字元串替換為 abc2 ,且在替換前顯示提示字元給使用者确認

删除與複制粘貼

x, X

x 相當于 [del] , X 相當于 [backspace] (常用)

nx

n 為數字,連續向後删除 n 個字元。

dd

删除光标所在的那一整行(常用)

ndd

n 為數字。删除光标所在的向下 n 行(常用)

d1G

删除光标所在行到第一行的所有資料

dG

删除光标所在行到最後一行的所有資料

d$

删除光标所在處,到該行的最後一個字元

d0

那個是數字的 0 ,删除光标所在處,到該行的最前面一個字元

yy

複制光标所在的那一行(常用)

nyy

n 為數字。(常用)

y1G

複制光标所在行到第一行的所有資料

yG

複制光标所在行到最後一行的所有資料

y0

複制光标所在的那個字元到該行行首的所有資料

y$

複制光标所在的那個字元到該行行尾的所有資料

p, P

p 為将已複制的資料在光标下一行貼上,P 則為貼在光标上一行 (常用)

J

将光标所在行與下一行的資料結合成同一行

c

重複删除多個資料,例如向下删除 4 行,[ 4cj ],配合上下左右的按鍵使用

u

撤銷操作。(常用)

[Ctrl]+r

重做上一個動作。(常用)

從指令模式進入輸入模式

i, I

i=從目前光标所在處插入, I =在目前所在行的第一個非空處開始插入。 (常用)

a, A

a =從目前光标所在的下一個字元處開始插入, A =從光标所在行的最後一個字元處開始插入。(常用)

o, O

o =在目前光标所在的下一行處插入新的一行; O =在目前光标所在處的上一行插入新的一行。(常用)

r, R

r 隻會取代光标所在的那一個字元一次;R會一直取代光标所在的文字,直到按下 ESC 為止;(常用)

[Esc]

退出輸入模式,回到指令模式中(常用)

從指令模式進入到末行模式

:w

儲存(常用)

:w!

若檔案屬性為『隻讀』時,強制儲存,是否能儲存與權限有關

:q

不儲存退出(常用)

:q!

強制退出不儲存。

:wq

儲存退出, :wq! 則為強制儲存退出 (常用)

ZZ

這是大寫的 Z !若檔案沒有更動,則不儲存離開,若檔案已經被更動過,則儲存後離開!

:w [filename]

将編輯的資料儲存成另一個檔案(類似另存新檔)

:r [filename]

在編輯的資料中,從指定的檔案讀取資料并加到光标所在行後面

:n1,n2 w [filename]

将 n1 到 n2 的内容儲存為 filename 這個檔案。

:! command

在系統中執行指定的指令 如 :! ls /home

vim 環境的變更

:set nu

顯示行号

:set nonu

取消行号

三、額外功能

區塊選擇

v

字元選擇,選中光标經過的地方

V

選中光标經過的行

[Ctrl]+v

區塊選擇

y

複制選中的部分

d

删除選中的部分

多檔案編輯

:n

編輯下一個檔案

:N

編輯上一個檔案

:files

列出目前這個 vim 的開啟的所有檔案

多視窗編輯

:sp/:vsp [filename]

開啟一個新視窗,如果加 filename, 表示在新視窗編輯指定的檔案,否則表示兩個視窗為同一個檔案(同步顯示)。

[ctrl]+w+ j [ctrl]+w+↓

按鍵的按法是:先按下 [ctrl] 不放, 再按下 w 後放開所有的按鍵,然後再按下 j (或向下箭頭鍵),則光标可移動到下方的視窗。

[ctrl]+w+ k [ctrl]+w+↑

同上,不過光标移動到上面的視窗。

[ctrl]+w+ q

退出光标所在視窗,也可以 [ctrl]+w+j/k 切換視窗後,按下 :q 即可離開, 也可以按下 [ctrl]+w+q 。

環境變量與記錄

.viminfo:記錄使用者的行為,之前編輯過的檔案光标在什麼位置,在這個檔案中進行過什麼操作等,自動建立

.vimrc:定義vim的預設設定,如是否顯示行号等,需要手動生成

:set nu /:set nonu

就是設定與取消行号!

:set hlsearch /:set nohlsearch

搜尋時是否高亮顯示。預設值是 hlsearch

:set autoindent :set noautoindent

是否自動縮排?autoindent 就是自動縮排。

:set backup/:set nobackup

是否自動備份,一般是 nobackup 的, 如果設定 backup 的話,那麼當你更動任何一個檔案時,則源檔案會被另存成一個檔名為 filename~ 的檔案。

:set ruler/:set noruler

是否顯示右下角的一些狀态欄說明

:set showmode/:set noshowmode

是否顯示左下角的狀态欄。

:set backspace=(012)

一般來說, 如果我們按下 i 進入編輯模式後,可以利用backspace來删除任意字元的。 但是,某些版本則不許如此。這時就可以使用這個設定2 可以删除任意;0 或 1 僅可删除剛剛輸入内容

:set all

顯示目前所有的環境變量設定值。

:set

顯示與系統預設值不同的設定, 使用者修改過的

:syntax on :syntax off

是否顯示顔色

:set bg=dark :set bg=light

可用以顯示不同的顔色色調,預設是『 light 』。如果你常常發現批注的字型深藍色實在很不容易看, 那麼這裡可以設定為 dark 喔!試看看,會有不同的樣式呢!

密碼設定與取消

加密

vim filename—>:X—>輸入密碼—>儲存(否則不加密)

取消密碼

1

vim filename—>輸入正确密碼—>:X—>空密碼—>儲存

2

vim filename—>:set key= —>儲存

注意:不要對系統檔案進行加密的操作

vim插件

1

虛拟機網卡設定為NAT

2

dhclient -r ensxx

dhclient ensxx

3 dnf install epel-release -y

4 dnf install vim-airline -y

vimdiff&vimtutor

vimdiff:編輯兩個或者更多個檔案并顯示不同

vimtutor:一條神奇的指令

四、使用中的注意事項

由于個别版本的linux預設隻安裝vi,是以你需要額外安裝vim的軟體包,如何安裝軟體包我們會在後續的課程中講解,另外vim在字元界面下不能輸入中文,而在圖形界面下能否輸入中文則取決于系統中是否安裝了中文輸入法

字元差異

由于linux和windows的系統差異,它們針對于檔案的中的一些特殊符号表示方式也是不同的,比如說用來表示換行的符号等,如

[[email protected] ~]# cat -A hello-linux.txt

hello$

$

[[email protected] ~]# cat -A hello-windows.txt

hello^M$

^M$

如果這種檔案是從windows拷貝到linux的一本小說的話,基本沒什麼問題,但是如果是一個我們需要執行指定工作的shell腳本就會出現問題,因為linux不認識這種符号的含義,就會導緻shell腳本無法執行。是以此時我們就要對這種檔案進行處理

[[email protected] ~]# unix2dos [-kn] file [newfile]

選項與參數:

-k :保留檔案原本的 mtime 時間格式

-n :保留舊檔案,将轉換後的内容輸出到新檔案,如: dos2unix -n old new

繼續閱讀