VIM 使用方法

Vim是從vi發展出來的一個文本編輯器。代碼補全、編譯及錯誤跳轉等方便編程的功能特別豐富,在程序員中被廣泛使用,和Emacs並列成爲類Unix系統用戶最喜歡的文本編輯器。

一、vi、vim介紹

(1)基於圖形界面,如gedit、geany等;
(2)基於命令行,如nano、vi、joe等;

每個命令行界面的文本編輯器都有各自不同的快捷鍵,比如nano的保存爲CTRL+W,vim的保存爲:w;
基於命令行的文本編輯器是必要的,Linux的tty1~tty6都是命令行界面,是打不開圖形界面的文本編輯器的;
vi是每個Linux Distribution都默認安裝的文本編輯器,並且很多軟件的默認編輯器都是vi,因此學習vi是很必要的;
vim是vi的高級版本,vi是文本編輯器,而vim應該說是程序編輯器,因爲能夠像一般的IDE一樣,根據文件名載入不同的語法高亮,即顏色區分,比如java文件會遵循java的語法高亮;

下面我們就編寫一個"hello world"的java程序來看看vim的語法高亮;
vim1
可以看出vim有很好的語法檢查功能,因爲關鍵字都使用了不同的顏色標出;
vi有三種模式:

(1)一般模式:進入vi的默認模式,能夠進行復制、黏貼、刪除等操作;
(2)編輯模式:從一般模式按下‘i’即可進入;
(3)命令行模式:從一般模式按下「:」、'?'、'/'即可進入;

注意:如果安裝了vim後,輸入vi後也是使用vim編輯器,我們輸入alias後看到「alias vi='vim'」;

二、vi/vim按鍵

「一般模式」的常用按鍵:

「一般模式」的常用按鍵 按鍵含義
h 向左
J 向下
K 向上
l 向右
20h 向左20個字符
20j 向下20行
20k 向上20行
20l 向右20個字符
Page Up 向上翻頁
Page Down 向下翻頁
Home 光標移到當前行的最左端
End 光標移到當前航的最右端
n [空格] 光標向右移動n個字符
N[Enter] 光標向下N行
G 光標移到最後一行
nG 光標移動到第n行
gg或1G 光標移動到第一行
/word 向下查找word
?word 向上查找word
n 如果是/word後使用,則表示向下繼續查找;
如果是?word後使用,則表示向上繼續查找;
N 如果是/word後使用,則表示向上繼續查找;
如果是?word後使用,則表示向下繼續查找;
:n,m/old/new/g 從第n行到第m行中,將old替換爲new
:n,$s/old/new/g 從第n行到最後一行中,將old替換爲new
u 類似windows中的CTRL+Z,前一步
x 向後刪除一個字符
X 向前刪除一個字符
3x 向後刪除3個字符
3X 向前刪除3個字符
dd 刪除當前行
3dd 刪除當前行開始的3行
yy 複製當前行
3yy 複製當前行開始的3行
p 黏貼到當前光標的下一行
P 黏貼到當前光標的上一行
CTRL+r 重做前一個操作

「命令行模式」的常用按鍵:

「命令行模式」的常用按鍵 按鍵含義
:w 保存
:q 退出vim
:wq 保存並退出
:wq! (在可以轉換權限的情況下)強制保存並退出
:q! 直接退出不保存
:w filename 另存爲filename
:n,m w filename 將第n行到第m行另存爲filename
:set nu 顯示行號
:set nonu 不顯示行號
:! command 暫時離開vim,並執行command,執行完後再進入vim
:r filename 將filename文件的數據讀入當前文件
:set all 顯示當前vim的環境配置

三、vim的恢復機制

vim正在編輯某個文件時都會同時存在.file.swp,此文件用來暫存,幫助恢復文件內容,當vim正常關閉此文件時,.filename.swp文件會消失。
vim2
我們看到圖中說明了出現此界面的兩個原因:

(1)多人同時編輯此文件:因爲Linux是多用戶的操作系統,因此可能兩個人同時登陸並編輯此文件,如果A進入系統開始編輯1.txt文件,則會出現.1.txt.swp,當A還沒編輯完但B也想進去編輯時,因爲此文件的目錄中存在.1.txt.swp,則就會出現上圖的界面;
(2)非正常關閉文件;

圖中最後一行說明了我們此時可以採取的幾個動作:

(1)o:以只讀方式打開;
(2)R:恢復,即從swp文件中恢復,但是swp文件不會隨着vim關閉而刪除,需要手動刪除;
(3)d:刪除swp文件;
(4)q:退出vim;

四、vim記錄及默認配置文件

/etc/vimrc文件爲全局vim配置文件。

1.如果我們用xiazdong賬戶使用vim後,在/home/xiazdong就會出現.viminfo文件,此文件用來作爲vim的日誌,記錄用戶使用vim打開了什麼文件,做了什麼操作;
2.如果xiazdong賬戶想要配置vim的默認環境,則可以在/home/xiazdong創建.vimrc,並且配置一些特徵,比如顯示行號,語法檢查等;

一般使用如下配置:

set hlsearch
set backspace=2
set autoindent
set nu
set ruler
set showmode
set bg=dark
syntax on

五、Visual Block功能

Visual Block功能可以用於塊複製。

(1)CTRL+v:開始複製塊;
(3)y:複製塊;
(4)p:黏貼塊;
(5)d:刪除塊

vim3

六、同時編輯多個文件

多文件編輯的好處是能夠將一個文件的某些內容yy後,p到另一個文件中。
vim file1 file2 即可同時編輯兩個文件,但是屏幕中同時只會出現一個文件內容,需要進行切換。

(1):n:向下切換;
(2):N:向上切換;
(3):files:列出當前編輯的所有文件;

七、多窗口編輯

如下圖:一個界面能夠顯示多個文件內容。
vim4

(1):sp:打開當前文件;
(2):sp filename:打開filename文件;
(3)CTRL+w+↓:光標切換到下一個窗口;
(4)CTRL+w+↑:光標切換到上一個窗口;
(5):q:關閉光標所在的窗口;

八、編碼問題

可能會出現亂碼問題,解決方法:保持終端的字符編碼與文件的字符編碼一致!tty1~tty6不支持顯示中文,因此在tty1~tty6中顯示中文必出現亂碼,設置終端的字符編碼。
vim5

編碼轉換命令:iconv
iconv -f文件的原本編碼-t文件的新編碼filename -o newfilename
比如有一個big5編碼的文件:1.big5,要轉換成utf8的文件:2.utf8,則iconv -f big5 -t utf8 1.big5 -o 2.utf8