天天看點

Linux vi(vim)編輯器學習-收集搬運

vi(vim)是上Linux非常常用的編輯器,很多Linux發行版都預設安裝了vi(vim)。vi(vim)指令繁多但是如果使用靈活之後将會大大提高效率。vi是“visual interface”的縮寫,vim是vi IMproved(增強版的vi)。在一般的系統管理維護中vi就夠用,如果想使用代碼加亮的話可以使用vim。整理一下vi的使用教程:包含vi的基本介紹、使用模式、檔案的打開關閉儲存、插入文本或建立行、移動光标、删除、恢複字元或行、搜尋等等,算是一篇比較适合新手學習vi的教程。

vi有3個模式:插入模式、指令模式、低行模式。

插入模式:在此模式下可以輸入字元,按ESC将回到指令模式。

指令模式:可以移動光标、删除字元等。

低行模式:可以儲存檔案、退出vi、設定vi、查找等功能(低行模式也可以看作是指令模式裡的)。

一、打開檔案、儲存、關閉檔案(vi指令模式下使用)

vi filename       //打開filename檔案

:w       //儲存檔案

:w vpser.net //儲存至vpser.net檔案

:q          //退出編輯器,如果檔案已修改請使用下面的指令

:q!        //退出編輯器,且不儲存

:wq         //退出編輯器,且儲存檔案

二、插入文本或行(vi指令模式下使用,執行下面指令後将進入插入模式,按ESC鍵可退出插入模式)

a      //在目前光标位置的右邊添加文本

i       //在目前光标位置的左邊添加文本

A     //在目前行的末尾位置添加文本

I      //在目前行的開始處添加文本(非空字元的行首)

O     //在目前行的上面建立一行

o     //在目前行的下面建立一行

R    //替換(覆寫)目前光标位置及後面的若幹文本

J    //合并光标所在行及下一行為一行(依然在指令模式)

三、移動光标(vi指令模式下使用)

1、使用上下左右方向鍵

2、指令模式下:h   向左、j   向下 、k   向上、l  向右。

空格鍵 向右、Backspace  向左、Enter  移動到下一行首、-  移動到上一行首。

四、删除、恢複字元或行(vi指令模式下使用)

x         //删除目前字元

nx         //删除從光标開始的n個字元

dd      //删除目前行

ndd   //向下删除目前行在内的n行

u       //撤銷上一步操作

U      //撤銷對目前行的所有操作

五、搜尋(vi指令模式下使用)

/vpser     //向光标下搜尋vpser字元串

?vpser     //向光标上搜尋vpser字元串

n           //向下搜尋前一個搜素動作

N         //向上搜尋前一個搜尋動作

六、跳至指定行(vi指令模式下使用)

n+        //向下跳n行

n-         //向上跳n行

nG        //跳到行号為n的行

G           //跳至檔案的底部

七、設定行号(vi指令模式下使用)

:set  nu     //顯示行号

:set nonu    //取消顯示行号

八、複制、粘貼(vi指令模式下使用)

yy    //将目前行複制到緩存區,也可以用 "ayy 複制,"a 為緩沖區,a也可以替換為a到z的任意字母,可以完成多個複制任務。

nyy   //将目前行向下n行複制到緩沖區,也可以用 "anyy 複制,"a 為緩沖區,a也可以替換為a到z的任意字母,可以完成多個複制任務。

yw    //複制從光标開始到詞尾的字元。

nyw   //複制從光标開始的n個單詞。

y^      //複制從光标到行首的内容。  VPS偵探

y$      //複制從光标到行尾的内容。

p        //粘貼剪切闆裡的内容在光标後,如果使用了前面的自定義緩沖區,建議使用"ap 進行粘貼。

P        //粘貼剪切闆裡的内容在光标前,如果使用了前面的自定義緩沖區,建議使用"aP 進行粘貼。

九、替換(vi指令模式下使用)

:s/old/new      //用new替換行中首次出現的old

:s/old/new/g         //用new替換行中所有的old

:n,m s/old/new/g     //用new替換從n到m行裡所有的old

:%s/old/new/g      //用new替換目前檔案裡所有的old

十、編輯其他檔案

:e otherfilename    //編輯檔案名為otherfilename的檔案。

十一、修改檔案格式

:set fileformat=unix   //将檔案修改為unix格式,如win下面的文本檔案在linux下會出現^M。

總結:vi(vim)教程雖然有比較多的指令,但是隻要勤加練習,相信你會很快的熟練掌握,同時也會給你的工作或學習帶來更高的效率。當如果不知道自己處在什麼模式時可以按2次Esc鍵即可回到指令模式,會有最後提醒一點:注意大小寫!!!

==================================

vi編輯器是所有Unix及Linux系統下标準的編輯器,他就相當于windows系統中的記事本一樣,它的強大不遜色于任何最新的文本編輯器。他是我們使用Linux系統不能缺少的工具。由于對Unix及Linux系統的任何版本,vi編輯器是完全相同的,學會它後,您将在Linux的世界裡暢行無阻。

vim 具有程式編輯的能力,可以以字型顔色辨識文法的正确性,友善程式設計;

因為程式簡單,編輯速度相當快速。

vim可以當作vi的更新版本,他可以用多種顔色的方式來顯示一些特殊的資訊。

vim會依據檔案擴充名或者是檔案内的開頭資訊, 判斷該檔案的内容而自動的執行該法判斷式,再以顔色來顯示程式代碼與一般資訊。

vim裡面加入了很多額外的功能,例如支援正規表達式的搜尋、多檔案編輯、塊複制等等。 這對于我們在Linux上進行一些配置檔案的修改工作時是很棒的功能。

為何要學 vi

所有的Unix Like系統都會内建vi文本編輯器,其他的文本編輯器則不一定會存在;

一些軟體的編輯接口會主動調用vi (例如 crontab, visudo, edquota 等指令);

vi的使用

基本上vi可以分為三種狀态,分别是一般模式、編輯模式和指令行模式,各模式的功能區分如下:

一般模式:

以vi打開一個檔案就直接進入一般模式了(這是預設的模式)。在這個模式中, 你可以使用上下左右按鍵來移動光标,你可以使用删除字元或删除整行來處理檔案内容, 也可以使用複制、粘貼來處理你的檔案資料。

編輯模式:

在一般模式中可以進行删除、複制、粘貼等的操作,但是卻無法編輯檔案的内容,隻有當到你按下【i, I, o, O, a, A, r, R】等任何一個字母之後才會進入編輯模式。這時候螢幕的左下方會出現【INSERT或 REPLACE】的字樣,此時才可以進行編輯。而如果要回到一般模式時, 則必須要按下【Esc】即可退出編輯模式。

指令行模式:

輸入【 : / ? 】三個中的任何一個,就可以将光标移動到最底下那一行。在這個模式中, 可以提供查找、讀取、存盤、替換字元、離開vi、顯示行号等的動作則是在此模式中完成的!

一般模式可用的按鈕說明

移動光标

【h、j、k、l】,分别控制光标左、下、上、右移一格

按【ctrl+b】螢幕往"後"移動一頁

按【ctrl+f】螢幕往"前"移動一頁

【n<space>】光标向右移動n個字元

【Home】移動到這一行的最前面字元處:0數字,但不能用數字小鍵盤上的數字

【End】 移動到這一行的最後面字元處:$,我測試好像不行

【w】光标跳到下個字的開頭

【e】光标跳到下個字的字尾

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

【M】 光标移動到這個螢幕的中間那一行的第一個字元

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

【G】 移動到這個檔案的最後一行

【nG】移動到這個檔案的第n行(可配合:set nu)

【gg】 移動到這個檔案的第一行,相當于1G

【n<Enter>】光标向下移動n行

查找與替換

【/word】 向光标向下尋找一個名稱為word的字元串

【?word】 向光标向上尋找一個名稱為word的字元串

【n】 代表重複前一個查找的動作

【N】 與n剛好相反,為【反向】進行行前一個查找動作

【:n1,n2s/word1/word2/g】  n1與n2為數字,在第n1與n2行之間查找word1 這個字元串,并将該字元串替換為word2

【:1,$s/word1/word2/g】 從第一行到最後一行查找word1字元串,并将該字元串替換為word2

【:1,$s/word1/word2/gc】 從第一行到最後一行查找word1字元串,并将該字元串替換為word2 ,且在替換前提示使用者确認是否進行替換

删除、複制與粘貼

【x】 為向後删除一個字元 (相當于【del】鍵)

【X】 為向前删除一個字元(相當于【backspace】鍵)

【nx】 連續向後删除n個字元

【dd】 删除光标所在行

【ndd】 删除光标所在的向下n行

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

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

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

【d0】 删除光标所在處,到該行的最前一個字元

【yy】 複制光标所在的那一行

【nyy】 複制光标所在的向下n列

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

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

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

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

【p】将已複制的資料在光标下一行粘貼上

【P】 則為貼在光标的上一行

【u】 恢複前一個操作

【Ctrl+r】重做上一個操作

【.】 是重複前一個操作

一般模式切換到編輯模式的可用的按鈕說明

【i, I】 進入編輯模式:

i 為【從目前光标所在處插入】

I 為【在目前所在行的第一個非空格符處開始插入】

【a, A】 進入編輯模式(Insert mode):

a 為【從目前光标所在的下一個字元處開始插入】

A 為【從光标所在行的最後一個字元處開始插入】

【o, O】 進入編輯模式:

o 為【在目前光标所在的下一行處插入新的一行】

O 為在目前光标所在處的上一行插入新的一行

【r, R】 進入取代模式:

r 隻會取代光标所在的那一個字元一次

R會一直取代光标所在的文字,直到按下 ESC 為止;

【Esc】 退出編輯模式,回到一般模式

一般模式切換到指令行模式可用的按鈕說明

【:w】 儲存編輯的内容

【:w!】強制寫入該檔案,但跟你對該檔案的權限有關

【:q】 離開vi

【:q!】 不想儲存修改強制離開

【:wq】 儲存後離開

【:x】 儲存後離開

【ZZ】 若檔案沒有更動,則不儲存離開,若檔案已經被更改過,則儲存後離開

【:w filename】 将編輯的資料儲存成另一個檔案(類似另存)

【:r filename】 在編輯的資料中,讀入另一個檔案的資料。即将【filename】 這個檔案的内容加到光标所在行後面。

【:n1,n2 w filename】 将n1到n2的内容儲存成filename這個檔案。

【:! command】暫時離開vi 到指令行模式下執行command的顯示結果!例如 【:! ls /home】即可在 vi 當中察看/home底下以ls輸出的檔案資訊!

【:set nu】 顯示行号

【:set nonu】 與 set nu 相反,為取消行

vim的緩存檔案、恢複與開啟時的警告資訊

我們知道一些常用的編輯軟體,都有個恢複的功能,就是說當你的系統因為某些原因而導緻類似當機的情況時,還可以利用這個恢複功能将之前未儲存的資料找回來。我們的VIM也有這個功能。

當我們在使用vim編輯時,vim會在與被編輯的檔案的目錄下,再建立一個名為 .filename.swp的檔案。如果你的系統因為某些原因斷線了, 導緻你編輯的檔案還沒有儲存,這個時候 .filenam.swp 就能夠發會救援的功能了。

我們來示範一下

vim man.config

ctrl+z放到背景執行

我們停止VI的程序

一種方法

ps aux |grep vi

kill -9 n

另外一種方法

jobs

kill -9 %1

我們用ls -l 指令來檢視一下目錄裡面,會發現有個.man.config.swp的檔案,這個檔案就是個緩存的檔案

我們再來編輯

vim man.config

這時候會出現一些資訊

問題一:可能有其他人或程式同時在編輯這個檔案:

問題二:在前一個vim的環境中,可能因為某些不知名原因導緻vim中斷 (crashed):

右下角會出現六個指令項,其作用說明如下:

(O)pen Read-Only:打開此檔案成為隻讀檔, 可以用在你隻是想要查閱該檔案内容并不想要進行編輯行為時。一般來說,在上課時,如果你是登入到同學的計算機去看他的配置檔案, 結果發現其實同學他自己也在編輯時,可以使用這個模式;

(E)dit anyway:還是用正常的方式打開你要編輯的那個檔案, 并不會載入暫存盤的内容。如果說兩個人都在編輯這個檔案的話,很容易出現互相改變對方的檔案等問題。

(R)ecover:就是加載暫存盤的内容,用在你要救回之前未儲存的工作。 不過當你救回來并且儲存離開vim後,還是要手動自行删除那個暫存檔。

(D)elete it:你确定那個暫存檔是無用的!那麼開啟檔案前會先将這個暫存盤删除

(Q)uit:按下 q 就離開vim,不會進行任何動作回到指令提示字元。

(A)bort:忽略這個編輯行為,感覺上與 quit 非常類似!

vim的功能

其實,目前大部分的Linux發行版本都以vim取代了vi。為什麼要用vim呢?因為vim具有顔色顯示的功能,并且還支援許多的程式文法(syntax)和相應的提示資訊。檢視自己的VI是不是被VIM代替,可以用

alias這個指令來檢視是不是有alias vi=’vim’這一行。

塊選擇

【v】字元選擇,會将光标經過的地方反白選擇

【V】 行選擇,會将光标經過的行反白選擇

【Ctrl+v】 塊選擇,可以用長方形的方式選擇資料 (提制豎列)

【y】 将反白的地方複制

【d】 将反白的地方删除

多檔案編輯

大家在使用vim的時候,可能會碰到你需要複制一個檔案中的某段到另外一個檔案中,而vim不能夠在關閉的時候,把這段保留住。或者是用其它的方法複制。

【vim file1 file2】

【:n】編輯下一個檔案

【:N】編輯上一個檔案

【:files】列出目前這個vim編輯的所有檔案

多視窗功能

有兩個需要對照着看的檔案

【:sp filename】開啟一個新視窗,如果有加 filename, 表示在新視窗開啟一個新檔案,否則表示兩個視窗為同一個檔案内容(同步顯示)。

【ctrl+w+j】

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

【ctrl+w+k】

【ctrl+w+↑】同上,不過光标移動到上面的視窗。

vim 環境設定與記錄(~/.vimrc, ~/.viminfo)

如果我們以vim軟體來查找一個檔案内部的某個字元串時,這個字元串會被反白, 而下次我們再次以vim編輯這個檔案時,該查找的字元串反白情況還是存在。另外,當我們重複編輯同一個檔案時,當第二次進入該檔案時, 光标竟然就在上次離開的那一行的開頭。這個功能可能是友善,但也有不友善的時候。怎麼會這樣呢?這是因為我們的vim會主動的将你曾經做過的行為登入下來,那個記錄動作的檔案就是: ~/.viminfo,不想用這個功能,就直接删除~/.viminfo。隻要你曾經使用過vim,那麼你的家目錄就會有這個檔案。這個檔案是自動産生的,你在vim裡頭所做過的動作,就可以在這個檔案内部找到。有興趣的朋友可以自己檢視檔案裡面的内容。

不過,對于每個不同的發行版本對vim的預設環境都不太相同。舉例來說,某些版本在查找到關鍵詞時并不會高亮度反白, 有些版本則會主動的幫你進行縮排(所謂的縮排,就是當你按下 Enter 編輯新的一行時,光标不會在行首,而是在與上一行的第一個非空格符處對齊)的行為。其實這些都可以自行設定的,下面我們就來看看vim的環境設定。

vim的環境設定參數有很多,如果你想要知道目前的設定值,可以在一般模式時輸入【 :set all】來查閱,由于設定項目實在太多了,我們在這裡就僅列出一些平時比較常用的一些簡單的設定值,給大家提供參考。

:set all "顯示目前所有的環境參數設定值

:set hlsearch "高亮度反白(高亮度搜尋)

:set nohlsearch "取消高亮度反白(高亮度搜尋)

:set backspace=2 "在編輯的時候可随時用倒退鍵删除 (0、1的時候,隻針對剛輸入的字元有效)

:set autoindent "自動縮排

:set noautoindent "取消自動縮排

:set ruler "可顯示最後一行的狀态

:set showmode "左下角那一行的狀态

:set nu "顯示行号

:set nonu "取消行号

:set bg=dark "顯示不同的底色色調

:syntax on "進行文法檢驗,顔色顯示

:syntax off "關閉文法檢驗

了解完上面的内容後,下面我們就能寫一下自己的vim操作環境。

整體vim的設定值一般是置在/etc/vimrc這個檔案裡面,不建議大家來修改他。我們在自己的家目錄裡面建立個.vimrc檔案,在這裡面寫入自己的内容就能實作了。

[[email protected] ~]# vim ~/.vimrc

内容如下

set hlsearch "高亮度反白

set backspace=2 "可随時用倒退鍵删除

set autoindent "自動縮排

set ruler "可顯示最後一行的狀态

set showmode "左下角那一行的狀态

set nu "可以在每一行的最前面顯示行号

set bg=dark "顯示不同的底色色調

syntax on "進行文法檢驗,顔色顯示

"這個檔案的雙引号 (")表示的是注釋

儲存退出vim後,在下次使用vim的時候,就會有自己的vim操作環境了。

提醒一點,這個檔案中每一行前面加不加“:”效果都是一樣的。

Vim鍵盤圖

Linux vi(vim)編輯器學習-收集搬運
Linux vi(vim)編輯器學習-收集搬運

繼續閱讀