第九章 vim程序編輯器
9.1 vi與vim
所有的Linux發行版都有vi文本編輯器。
vim是高級版的vi,對不同內容可以進行不同顏色顯示,就是個性能強悍的代碼編輯器。
9.2 按鍵說明
9.2.1 一般命令行可用的按鍵功能說明
移動光標的方法 | 具體情況 |
---|---|
h 或 向左箭頭 | 光標向左移動一個字符 |
j 或 向下箭頭 | 光標向下移動一個字符 |
k 或 向上箭頭 | 光標向上移動一個字符 |
l 或 向右箭頭 | 光標向右移動一個字符 |
30j 或 30向左箭頭 | 向下移動30行 |
Ctrl + f | 屏幕向下移動一頁,相當於page down按鍵【常用】 |
Ctrl + b | 屏幕向上移動一頁,相當於page up按鍵【常用】 |
Ctrl + d | 屏幕向下移動半頁 |
Ctrl + u | 屏幕向上移動半頁 |
+ | 光標移動到非空格字符的下一行 |
- | 光標移動到非空格字符的上一行 |
n + 空格鍵 | 那個n表示數字,按下數字後再按下空格鍵,光標會向右移動這一行的n個字符 |
0 或 功能鍵home | 按下數字0或home鍵,移動到這一行的最前面字符處【常用】 |
$ 或 功能鍵End | 移動到這一行的最後面字符處【常用】 |
H | 光標移動到這個屏幕的最上方那一行的第一個字符 |
M | 光標移動到這個屏幕的中央那一行的第一個字符 |
L | 光標移動到這個屏幕的最下方那一行的第一個字符 |
G | 移動到這個文件的最後一行【常用】 |
nG | n爲數字,移動到這個文件的第n行,可配合:set nu |
gg | 移動到這個文件的第一行,相當於1G【常用】 |
n + 功能鍵Enter | n爲數字,光標向下移動n行【常用】 |
查找與替換 | 具體情況 |
---|---|
/word | 向光標之下尋找一個名稱爲word的字符串 |
?word | 向光標之上查找一個名稱爲word的字符串 |
n | 這個n是英文按鍵,代表重複前一個查找的操作。如果是向上查找word,那麼繼續向上查找word;如果向下查找word,那麼繼續向下查找word |
N | 這個N是英文按鍵,與n剛好相反,爲反向進行前一個查找。例如/word之後,本來是向下查找word的,但是按下N,會向上查找word。【使用/word配合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 | 替換之前顯示提示字符給用戶,確認confirm是否需要替換【常用】 |
刪除、複製、粘貼 | 具體情況 |
---|---|
x與X | 在一行當中,x爲向後刪除一個字符(del鍵),X爲向前刪除一個字符(backspace鍵)【常用】 |
nx | n爲數字,連續向後刪除n個字符。10x連續向後刪除10個字符 |
dd | 剪切光標所在行【常用】 |
ndd | 剪切光標所在的向下n行。20dd剪切20行【常用】 |
d1G | 剪切光標所在到第一行的所有數據 |
dG | 剪切光標所在到最後一行的所有數據 |
d$ | 剪切光標所在處,到該行最後一個字符 |
d0 | 是數字0,剪切光標所在處,到該行第一個字符 |
yy | 複製光標所在的那一行【常用】 |
nyy | 複製光標所在的向下n行。20yy複製20行【常用】 |
y1G | 複製光標所在到第一行的所有數據 |
yG | 複製光標所在到最後一行的所有數據 |
y$ | 複製光標所在處,到該行最後一個字符 |
y0 | 是數字0,複製光標所在處,到該行第一個字符 |
p和P | p爲將已複製的數據在光標下一行粘貼;P爲將已複製的數據在光標上一行粘貼【常用】 |
J | 將光標所在行與下一行的數據結合成一行 |
c | 重複刪除多個數據。10cj向下刪除10行 |
u | 恢復前一個操作【常用】 |
Ctrl + r | 重做上一個操作【常用】 |
. | 小數點,重複前一個操作【常用】 |
9.2.2 一般命令行切換到編輯模式的可用按鍵功能說明
進入插入或替換的編輯模式 | 具體情況 |
---|---|
i與I | 進入插入模式,i爲從目前光標所在處插入,I爲在目前所在行的第一個非空格符處開始插入【常用】 |
a與A | 進入插入模式,a爲從目前光標所在的下一個字符處開始插入,A爲從光標所在行的最後一個字符處開始插入【常用】 |
o與O | 進入插入模式,o爲在目前光標所在的下一行處插入新的一行,O爲在目前光標所在處的上一行插入新的一行【常用】 |
r與R | 進入替換模式,r只會替換光標所在那一個字符一次,R會一直替換光標所在的文字,直到按下Esc爲止【常用】 |
Esc | 退出編輯模式,回到一般命令模式中【常用】 |
9.2.3 一般命令行切換到命令行模式的可用按鍵功能說明
命令行模式的保存、退出等命令 | 具體情況 |
---|---|
:w | 將編輯的數據寫入硬盤文件中【常用】 |
:w! | 若文件屬性爲只讀時,強制寫入該文件。不過到底能否成功寫入,還是跟你對該文件的權限有關 |
:q | 退出vi【常用】 |
:q! | 若曾修改過文件,又不想保存,使用!爲強制退出不保存 |
:wq | 保存後退出,若爲:wq!則爲強制保存後退出 |
ZZ | 大寫的Z,若文件已經修改則保存後退出,若文件沒有修改則不保存退出 |
:w [filename] | 將編輯的數據另存爲filename文件 |
:r [filename] | 在編輯的數據中,讀入另一個文件的數據,就是將filename這個文件內容加到光標所在行後面 |
:n1,n2 w [filename] | 將n1到n2的內容保存爲filename文件 |
:! command | 暫時退出vi到命令行模式下執行command的顯示結果。:! ls/home 可在vi當中查看/home下以ls輸出的文件信息 |
:set nu | 顯示行號 |
:set nonu | 取消顯示行號 |
9.2.4 vim的緩存、恢復問題
如果不幸宕機,可從緩存文件恢復。
模擬宕機:
vim man_db.conf
ctrl + z
kill -9 %1
此時殺掉了後臺進程,但是由於是非正常退出,緩存文件並不會正常消失,它還存在
緩存文件名爲`.man_db.conf.swap`
進行恢復:
vim man_db.conf 這是就會提示各種警告信息
點擊R後,輸入 :wq 保存並退出文件
然後手動刪除緩存文件 rm -f .man_db.conf.swap
最後再 vim man_db.conf
即可恢復正常
9.3 vim的額外功能
9.3.1 可視區塊 virtual block
可視區塊的按鍵 | 具體情況 |
---|---|
v | 字符選擇,會將光標經過的地方反白選擇 |
V | 行選擇,會將光標經過的行反白選擇 |
Ctrl + v | 可視區塊,可以用矩形的方式選擇數據 |
y | 將反白的地方複製起來 |
d | 將反白的地方刪掉 |
p | 將剛剛複製的區塊,在光標所在處粘貼 |
9.3.2 多文件編輯
vi中,使用:r filename
可以讀入整個filename文件;如果只想讀入一部分內容,可使用多文件編輯命令。
多文件編輯按鍵 | 具體情況 |
---|---|
:n | 編輯下一個文件 |
:N | 編輯上一個文件 |
:files | 列出目前這個vim開啓的所有文件 |
使用vim file1 file2
同時打開兩個文件,其中file1是第一個文件,file2是最後一個文件。
9.3.3 多窗口功能
多窗口按鍵 | 具體情況 |
---|---|
:sp [filename] |
打開一個新窗口,如果有加filename,表示在新窗口創建一個新文件,否則表示兩個窗口爲同一個文件(同步顯示) |
Ctrl + w + j 或者 Ctrl + w + 向下箭頭 |
先同時按下Ctrl + w,然後再按下j或向下箭頭,光標移動到下方的窗口 |
Ctrl + w + k 或者 Ctrl + w + 向上箭頭 |
先同時按下Ctrl + w,然後再按下k或向上箭頭,光標移動到上方的窗口 |
Ctrl + w + q |
先同時按下Ctrl + w,然後再按下q,結束當前窗口;或者輸入:q 或者:close |
先vim file1
如果:sp
,會在下方再開一個窗口,內容與file1
相同;
如果:sp file2
,會在下方再開一個窗口,內容是file2
。
9.3.4 vim的關鍵詞補全功能
編輯器兩大要求:
語法檢驗
關鍵詞補全
關鍵詞補全按鍵 | 具體情況 |
---|---|
ctrl+x -> ctrl+n | 通過目前正在編輯的這個文件的內容文字作爲關鍵詞,予以補齊 |
ctrl+x -> ctrl+f | 以當前目錄內的文件名作爲關鍵詞,予以補齊 |
ctrl+x -> ctrl+o | 以擴展名作爲語法補充,以vim內置的關鍵詞,予以補齊 |
9.3.5 環境設置與記錄 ~/.vimrc ~/viminfo
vim的環境設置按鍵 | 具體情況 |
---|---|
:set nu | 顯示行號 |
:set nonu | 忽略行號 |
:set hlsearch | 高亮度查找,找到的字符串反白顯示 |
:set nohlsearch | 非高亮度查找 |
:set autoindent | 自動縮進 |
:set noautoindent | 不自動縮進 |
:set backup | 自動保存備份文件,任何一次修改file時,同目錄中,源文件被另存爲一個文件名爲file~的文件 |
:set ruler | 顯示或不顯示右下角的一些狀態欄說明 |
:set showmode | 是否顯示–INSERT–之類信息在左下角狀態欄 |
:set backspace=(012) | 按下i進入編輯模式後,可以利用退格鍵(backspace)刪除任意字符。2,可刪任意值;0或1,僅可刪除剛剛輸入的字符,無法刪除原本就已經存在的文字 |
:set all | 顯示目前所有的環境參數設置值 |
:set | 顯示與默認值不同的參數,顯示你自行變動過的參數 |
:syntax on | 依據程序相關語法顯示不同顏色 |
:syntax off | 純文本顏色 |
:set bg=dark | 設置顯示的不同色調 |
:setbg=light | 同上,系統默認是light |
vim ~/.vimrc 在用戶家目錄下,創建.vimrc 文件,設置vim編輯器的默認值
打開文件後,輸入以下內容並保存:
set hlsearch
set backspace=2
set autoindent
set ruler
set showmode
set nu
set bg=dark
syntax on
9.4 其他vim使用注意事項
9.4.1 中文編碼問題
如果文件是GBK
編碼,而環境使用的是Linux
的GNOME
,啓動的終端界面爲GNOME-terminal
,採用如下方法修正打開後的亂碼問題:
首先:
LANG=zh_CN.gb18030
export LC_ALL=zh_CN.gb18030
在終端工具欄:終端—》設置字符編碼—》中文(簡體),選擇好中文簡體後,就可以用vim去打開GBK編碼的文件了。
9.4.2 DOS與Linux換行符
Windows的DOS下換行符是: ^M$ = CR + LF
Linux下換行符是: $ = LF
需要安裝dos2unix-*
在不同系統之間複製一些純文本文件時,務必要記得使用unix2dos 或 dos2unix來轉換換行格式!
unix2dos -k file1 將file1中的換行符換成dos下的,同時不改變mtime時間
dos2unix -k file1 將file1中的換行符換成unix下的,同時不改變mtime時間
dos2unix -k -n file1 file2 跟之前一樣把file1中的換行符換成unix下的,保留舊文件file1,換好後保存到新文件file2
9.4.3 語系編碼轉換
iconv --list
iconv -f 原編碼格式 -t 新編碼格式 filename [-o newfile]
--list 列出iconv支持的語系數據
-f from,來自於哪個編碼格式
-t to,要變成哪個編碼格式
-o file 如果要保留原本文件,那麼使用-o新文件名,可以建立新的編碼文件
iconv -f big5 -t utf8 vi.big5 -o vi.utf8 將big5格式的vi.big5轉換爲utf8格式的vi.utf8
iconv -f utf8 -t big5 vi.utf8 | \
iconv -f big5 -t gb2312 | \
iconv -f gb2312 -t utf8 -o vi.gb.utf8 將繁體中文的utf8轉換成簡體中文的utf8