由于Linux中的配置文件都是以文本方式存在的,所以在Linux的系統中使用文本編輯器來配置系統是一件很重要的事情。而vim由于程序簡單、編輯速度快且能夠檢查編程中的語法錯誤,所以已成為最常用也最重要的文本處理工具。下面我們就來介紹一下。
一、vim的模式
Vim在使用過程中,基本上分為三種模式:命令模式、編輯模式與擴展命令模式。在三種模式下,我們可以執行的操作大致如下:
u 命令模式:在此模式中可以進行刪除、復制、粘貼、移動光標等操作,但無法編輯文件內容;
u 編輯模式:在此模式中可以修改文本
u 擴展命令模式:在此模式中,可查找替換數據,讀取、保存、替換字符,離開vim,相關設置等;
需要注意的是,命令模式與編輯模式及擴展命令模式可相互切換,但編輯模式與擴展命令模式之間不可互相切換,各模式之間的切換如下圖所示:
二、vim命令語法
對vim稍作了解之后,我們來看 一下vim一些具體的命令與選項。
vim [options] [file ..]
+#:打開文件后,直接讓光標處于第#行的行首
+/PATTERN:打開文件后,直接讓光標處于第一個被PATTERN匹配到的行的行首
+:直接打開文件,光標處在最后一行行首
-b:以二進制方式打開文件
-d:比較多個文件
-m:以只讀方式打開文件,不能強制寫入
-e:直接進入命令行模式,與命令ex file相同
需要注意的是,對于vim命令而言,如果要編輯的文件存在,則文件被打開并顯示內容;如果文件不存在,則會在編輯后第一次存盤時創建它;
三、vim的按鍵操作
在vim中,我們通過按鍵來進行相關的編輯操作,而且在不同的模式下,按鍵的作用可能也并不相同,下面列出一些常用按鍵的作用。
移動光標的方法 | 備注 | |
h或左箭頭 或<backspace> |
光標向左移動一個字符;<backspace>移動到行首時可自動切換至上一行 | 如果想要進行多次移動的話,可以使用nCOMMAND,即加上想要進行的次數(數字)后,按下操作即可 |
j或下箭頭 | 光標向下移動一個字符 | |
k或上箭頭 | 光標向上移動一個字符 | |
l或右箭頭或<space> | 光標向右移動一個字符;<space>移動到行尾時可自動換至下一行 | |
Ctrl+f | 屏幕向下移動一頁,相當于PgDn | |
Ctrl+b | 屏幕向上移動一頁,相當于PgUp | |
Ctrl+d | 屏幕向下移動半頁 | |
Ctrl+u | 屏幕向上移動半頁 | |
+ | 光標移動到下一行的第一個非空白字符 | |
– | 光標移動到上一行的第一個非空白字符 | |
0或Home | 光標移動至這一行的絕對行首 | |
^ | 光標移動至這一行行首的第一個非空白字符 | |
$ | 光標移動至這一行的最后字符處 | |
H | 光標移動到這個屏幕的最上方那一行的第一個字符 | |
M | 光標移動到這個屏幕的中央那一行的第一個字符 | |
L | 光標移動到這個屏幕的最下方那一行的第一個字符 | |
G | 光標移動到這個文件的最后一行的第一個非空白字符 | |
nG | n為數字,光標移動至此文件的第n行的第一個非空白字符 | |
gg | 光標移動至此文件的第一行的第一個非空白字符,相當于1G | |
nEnter | n為數字,光標向下移動n行,至m+n行的第一個非空白字符(m為當前行) | |
) | 光標移動至下一句的第一個非空白字符 | |
( | 光標移動至上一句的第一個非空白字符 | |
} | 光標移動至下一段的第一個字符 | |
{ | 光標移動至上一段的第一個字符 | |
查找 | ||
/word | 從當前光標開始向下尋找包含word的字符串 | |
?word | 從當前光標開始向上尋找包含word的字符串 | |
n | 重復前一個查找的操作,與搜索命令同方向 | |
N | 反向進行前一個查找的操作,與搜索命令反方向 | |
刪除、復制、粘貼與編輯 | ||
x,X | x為刪除當前光標所在字符,X為刪除當前光標所在字符的前一個字符 | |
nx | n為數字,從當前光標所在字符連續向后刪除n個字符(含當前光標所在字符) | |
xp | 交換光標所在處的字符及其后面字符的位置 | |
dd | 刪除光標所在的那一整行 | vim中的刪除命令為d,后面可結合光標跳轉字符,實現范圍刪除 |
ndd | n為數字,從當前光標所在行連續向下刪除n行(含當前光標所在行) | |
d1G | 刪除從光標所在行至第一行的所有數據 | |
dG | 刪除從光標所在行至最后一行的所有數據 | |
d$ | 刪除從光標所在處到該行的最后一個字符,等同于D | |
d0 | 刪除從光標所在處的前一個字符到該行的第一個字符(包含空白字符) | |
d^ | 刪除從光標所在處的前一個字符到該行的第一個非空白字符 | |
yy | 復制光標所在的行 | vim中的復制命令為y,后面可結合光標跳轉字符,實現范圍復制 |
nyy | n為數字,復制從光標所在行向下的n行(含光標所在行) | |
y1G,ygg | 復制從光標所在行到第一行的所有數據 | |
yG | 復制從光標所在行到最后一行的所有數據 | |
y0 | 復制從光標所處的前一個字符至該行第一個字符(包含空白字符)的所有數據 | |
y^ | 復制從光標所在處的前一個字符至該行的第一個非空白字符的所有數據 | |
y$ | 復制從光標所在處字符到該行行尾的所有數據 | |
Y | 復制當前光標所在的行 | |
cc | 刪除當前光標所在行并切換為插入模式 | vim中的改變命令為c,后面可結合光標跳轉字符,實現范圍改變 |
ncc | n為數字,刪除從光標所在行向下的共n行(含光標所在行)并切換為插入模式 | |
cgg,c1G | 刪除從光標所在行到第一行的所有數據并切換為插入模式 | |
cG | 刪除從光標所在行到最后一行的所有數據并切換為插入模式 | |
c0 | 刪除從光標所在處的前一個字符至第一個字符(包含空白字符)的所有數據并切換為插入模式 | |
c^ | 刪除從光標所在處的前一個字符至第一個非空白字符的所有數據并切換為插入模式 | |
c$ | 刪除從光標所在處字符到該行行尾的所有數據并切換為插入模式,等同于C | |
p,P | p:緩沖區存的如果為整行,則粘貼在當前光標所在行的下方;否則,則粘貼至當前光標所在處的后面 P:緩沖區存的如果為整行,則粘貼在當前光標所在行的上方;否則,則粘貼至當前光標所在處的前方 |
|
~ | 將當前光標所在字符改變大小寫 | |
n~ | n為數字,將從當前光標所在字符開始的n個字符改變其大小寫 | |
g~~ | 改變當前光標所在行字母的大小寫 | |
U | 將可視化模式下選擇的字母全部改成大寫 | vim中大小寫轉換的命令是gu和gU,gu代表轉化為小寫,gU代表轉化為大寫,后面跟光標跳轉字符(對這兩個命令的地址界定),代表從當前光標所在處(行)到指定位置進行轉換 |
u | 將可視化模式下選擇的字母全部改成小寫 | |
gUU | 將當前光標所在行字母全部改成大寫 | |
ngUU | n為數字,將從當前光標所在行向下共n行的字母全部改成大寫 | |
nguu | n為數字,將從當前光標所在行向下共n行的字母全部改成小寫 | |
J | 將當前光標所在行與下一行的數據結合成同一行 | |
u | 撤銷最近的更改 | |
nu | n為數字,撤銷最近的n次更改 | |
U | 撤銷光標落在這行后所有此行的更改 | |
Ctrl+r | 重做撤銷的更改 | |
. | 重復前一個操作 | |
n. | n為數字,重復前一個操作n次 | |
ZZ | 保存后離開 | |
ZQ | 不保存而退出 | |
進入插入或替換的編輯模式 | ||
i,I | 進入插入模式,i為從當前光標所在處插入,I為從當前所在行的第一個非空格字符處開始插入 | |
a,A | 進入插入模式,a為從當前光標所在處的下一個字符開始插入,A為從光標所在行的最后一個字符(包含空白字符)處開始插入 | |
o,O | 進入插入模式,o為在當前光標所在處的下一行插入新的一行;O為在目前光標所在處的上一行插入新的一行 | |
r | 進入替換模式,只替換光標所在處的字符一次 | |
R | 進入替換模式,會一直替換光標所在的文字,直到按下Esc鍵 | |
Esc | 退出編輯模式,回到一般模式中 | |
命令行模式的保存、離開等命令 | ||
:w | 將編輯的數據寫入硬盤文件中 | |
:w! | 若文件屬性為“只讀”時,強制寫入該文件,不過,到底能不能寫入,與文件權限有關; 若對文件所在目錄有寫權限,當對文件沒有寫權限而強制寫入時,會將原文件刪除,并創建與原文件同名的新文件 |
|
:q | 離開vim | |
:q! | 若曾修改過文件,又不想保存,使用:q!為強制離開不保存文件 | |
:wq,:wq! | wq為保存后離開;wq!為強制保存后離開 | |
:x,:x! | :x為保存后離開;:x!為強制保存后離開 | |
:w/PATH/TO/FILE | 將編輯后的數據保存為另一個文件;但若再次編輯仍是在原文件上編輯 | |
:r/PATH/TO/FILE | 在編輯的數據中,讀入另一個文件的數據,即將FILE這個文件的內容追加到光標所在行的下一行 | |
:地址定界 w /PATH/TO/FILE | 將地址定界中的內容保存為另一個文件 | |
:!COMMAND | 暫時離開vim到命令行模式下執行COMMAND;按Enter返回vim | |
:r!COMMAND | 在編輯的數據中,讀入COMMAND命令的執行結果,即將COMMAND這個命令的執行結果追加到光標所在行的下一行 | |
:e!,:edit! | 撤銷對文件做的所有更改,回到上一次保存的狀態 | |
vim環境的更改 | ||
:set nu | 顯示行號,設置之后,會在每行的前綴顯示該行的行號 | |
:set nonu | 與set nu相反,為取消行號 |
四、地址定界與查找替換
1、地址定界
在vim中,我們通常需要對范圍內的數據進行操作,那么如何進行范圍確定呢?這時,就需要用到vim中的地址定界了,其常用的有以下幾種
#:具體第#行
m,n:從第m行的絕對行首至第n行的行尾
m,+n:從第m行的絕對行首至m+n行的行尾
.:當前行
$:最后一行整行
%:全文,相當于1,$
/part/:從光標所在處向文件尾部,第一次被模式所匹配到的行
/pat1/,/part2/:從第一次被part1模式匹配到的行的絕對行首開始,一直到第一次被part2匹配到的行的行尾結束
m,/part/:從m行的絕對行首開始,一直到第一次被part匹配到的行的行尾結束
2、查找與替換
在進行地址定界之后,我們就可以在后面跟一些操作命令來實現范圍操作,其中的查找與替換時我們比較常用的編輯命令,其具體命令與用法如下:
s:在擴展命令行模式下完成查找替換操作
格式:s/要替換的內容/替換為的內容/修飾符
需要注意的是:
u 要替換的內容可用正則表達式;
u 替換為的內容,不能使用模式,但可以使用\1,\2,…等后向引用符號引用要替換的內容中的組;還可以使用&引用要替換的內容查找到的整個內容;
u 分隔符/可替換為其他字符, 常用的有#與@
修飾符:
i:忽略大小寫
g:全局替換;默認情況下,每一行至替換第一次出現;
c:每次替換前詢問
五、可視化與多窗口
1、可視化模式
我們上面介紹了使用vim的地址定界來實現范圍操作,而除了地址定界之外,vim還提供了可視化模式來實現連續范圍選取,共有三種選擇方式:
u v:字符選擇,會將光標經過的字符選擇
u V:行選擇,會將光標經過的行選擇
u Ctrl+v:塊選擇,可以用長方形的方式選擇數據
我們可以對被選擇的突出顯示的數據進行刪除,復制,變更,過濾,搜索替換等。
2、多文件切換
在vim的命令 語法中,我們知道vim可以打開多個文件,那么我們如何在各文件間切換呢?vim對于多文件在擴展命令模式下有特定的命令,下面來看一下:
:next,:n?下一個文件
:prev,:N?前以上文件
:first?第一個文件
:last?最后一個文件
:wall?保存所有文件
:qall?退出所有文件
:file?列出目前這個vim打開的所有文件
:wqall?保存并退出所有文件
3、多窗口分割
在一般窗口界面下的編輯軟件大多有“切割窗口或是凍結窗口”的功能來將一個文件切割成多個窗口,vim同樣具有這個功能,這就是vim的多窗口功能。
當我們對多文件進行多窗口分割時,我們可以使用如下的命令:
vim -o|-O FILE1 FILE2…
其中-o表示水平分割;-O表示豎直分割。
對于單文件同樣可以分割窗口,分割按鍵如下
:sp [filename]:打開一個新窗口(水平分割),如果有加filename,表示在新窗口打開一個新文件,否則表示兩個窗口為同一個文件內容(同步顯示)
Ctrl+w,s:split,水平分割窗口
Ctrl+w,v:vertical,豎直分割窗口
Ctrl+w,q:取消相鄰窗口
Ctrl+w,o:取消全部窗口
:wqall:保存并退出
而在vim的多窗口分割后,在窗口間切換時的按鍵為:Ctrl+w,Arrow
六、vim的環境設置與記錄
我們會發現,我們在vim中對字符進行查找、復制、替換等操作時,總會有一些特定的顯示格式,而這些格式就是vim的環境設置了。
在vim中分別 有針對全局和和個人進行設置的配置文件,其中全局配置文件為/etc/vimrc,個人配置文件為~/.vimrc。對于全局配置文件,我們一般不建議修改,一般建議將配置寫到個人配置文件。
同樣的,如果我們僅希望一些配置只在當前vim中生效,那么我們可以在擴展命令模式下通過命令來進行設置,在擴展命令模式下的設置僅對當前vim進程有效;在擴展命令模式下可使用:set all來顯示目前所有的環境參數設置值;用:set來顯示與系統默認值不同的設置參數。
原創文章,作者:luoliumeng,如若轉載,請注明出處:http://www.www58058.com/33343
關于vim文本編輯器的用法總結的很全面。排版也有很用心哦,