本文介紹Vim編輯器的使用
vi和vim的區別
它們都是多模式編輯器 不同的是vim是vi的升級版本
它不僅兼容vi的所有指令而且還有一些新的特性在裡面
vim的這些優勢主要體現在以下幾個方面
- 多級撤消 在vi裡 按u只能撤消上次命令 而在vim裡可以無限制的撤消
- 易用性 vi只能運行於unix中 而vim不僅可以運行於unix windows mac等多操作平台
- 語法加亮 vim可以用不同的顏色來加亮你的代碼
- 可視化操作 vim不僅可以在終端運行 也可以運行於x window mac windows
- 完全兼容vi 某些情況下 你可以把vim當成vi來使用
Linux編輯器Vim鍵盤詳解 見 http://www.linuxidc.com/Linux/2016-05/131866.htm
vim主要模式介紹
確認是否安裝了vim工具
[[email protected] /]# rpm -qf `which vim`
vim-enhanced-7.4.160-1.el7.x86_64
如果沒有安裝使用yum在線安裝即可
[[email protected] /]# yum -y install vim
三種模式
vim編輯器三種模式:命令模式、插入模式、末行模式
從上圖可以看出:末行模式切換到插入模式需要先切換到命令模式
按鍵說明
光標移動
按鍵 | 說明 |
h或←
光標向左移動一個字符
j或↓
光標向下移動一個字符
k或↑
光標向上移動一個字符
l或→
光標向右移動一個字符
Ctrl+f或PageDown
向下翻一頁
Ctrl+b或PageUp
向上翻一頁
+
光標移動到非空白字符的下一列
-
光標移動到非空白字符的上一列
n+space
光標移動到本行第n個字符處
0或home
光標所在行行首
$或end
光標所在行行尾
H
移動光標到屏幕第一行行首
M
移動光標到屏幕中央那一行的行首
L
移動光標到屏幕最後一行行首
G
移動光標到當前文件的末尾
n+G
移動光標到這個文件的第n行
gg
移動光標到這個文件的第一列 相當於1+G
:n
移動光標到這到這個文件的第n行 相當於nG
n+Enter
向下移動n行
查找
按鍵 | 說明 |
/word
向光標之下尋找一個名稱為word的字符串
?word
想光標之上尋找一個名稱為word的字符串
n
重復前一個尋找動作
如果執行/vim去向下尋找vim字符串
按n會向下繼續尋找下一個vim字符串
如果執行?vim按n則會向上尋找vim字符串
N
與n相反,進行反向搜索
:n1,n2s/word1/word2/g
在n1與n2行之間尋找word1字符串並替換為word2字符串
:1,$s/word1/word2/gc
從首行到末行尋找word1字符串並替換為word2字符串
並且在取代前提示是否確認替換
:% s/a/b
將每行的第一個a替換為b
:% s/a/b/g
將所有的a替換為b
% 表示所有內容
g 全部
c confirm提示確認
復制粘貼刪除
按鍵 | 說明 |
x
向後刪除一個字符
X
向前刪除一個字符
BackSpace
向前刪除一個字符
nx
連續向後刪除n個字符
dd
刪除光標所在行
ndd
刪除包含光標所在行在內的向下n行
d1G
刪除首行到光標所在行的所有數據
dG
刪除光標所在行到最後一行的所有數據
d$
刪除光標所在行光標位置到該行行尾的所有數據
d0
刪除光標所在行光標位置到該行行首的所有數據
yy
復制光標所在的整行
nyy
復制光標所在的向下n行
y1G
復制首行到光標所在行的所有數據
yG
復制光標所在行到末行的所有數據
y0
復制光標所在位置到光標所在行行首的所有數據
y$
復制光標所在位置到光標所在行行尾的所有數據
p
將已復制的數據粘貼到光標下一行
P
將已復制的數據粘貼到光標上一行
J
將光標所在行與下一行的數據合並為一行
c
重復刪除多個數據
u
撤銷
Ctrl+r
反撤銷
.
重復前一個動作
插入和修改
按鍵 | 說明 |
i
從光標所在位置插入
I
從光標所在行第一個非空字符位置插入
a
從光標所在的下一個字符位置插入
A
從光標所在行的最後一個字符處開始插入
o
從光標所在位置向下插入新的一行
O
從光標所在位置向上插入新的一行
r
替換光標所在位置的一個字符
R
替換光標所在位置的所有字符直到按ESC結束
ESC
退出插入模式回到命令模式
末行模式
在命令模式下按:鍵會進入到末行模式
按鍵 | 說明 |
:w
保存數據寫入到硬盤
:W
強制寫入數據到只讀文件(需要有對該文件的寫入權限)
:q
退出vim
:q!
強制退出不保存
:wq
保存後退出
:wq!
強制保存退出
ZZ
如果文件沒有更改則不保存並退出如何有更改則保存退出
:w test.txt
將更改後的數據另存為test.txt文件
:r test.txt
將test.txt這個文件的內容追加到光標所在行之後
:n1,n2 w test.txt
將n1到n2行之間的內容存儲到test.txt文件中
:! command
暫時離開vim到系統文本模式下查看執行command執行的結果
:set nu
顯示行號
:set nonu
撤銷行號
區塊選擇
按鍵 | 說明 |
v
將光標經過的地方全部選中
V
將光標經過的行全部選中
Ctrl+v
以長方形的方式選擇數據
y
復制未被選中的地方
d
刪除未被選中的地方
p
將復制的內容粘貼在光標所在位置
vim警告信息
當我們在使用vim進行編輯時,vim會在與被編輯的文件的目錄下再創建一個名為.filename.swp的文件
當你因為某些原因(系統斷線、Ctrl+z等)而沒有保存你正在編輯的文件時,這個swp文件就能發揮救援功能
創建test.txt文件後使用vim編輯再按Ctrl+z模擬非正常保存退出
[[email protected] ~]# touch test.txt
[[email protected] ~]# vim test.txt
[7]+ Stopped vim test.txt
再次使用vim編輯test.txt文件出現以下信息
E325: ATTENTION
Found a swap file by the name ".test.txt.swp"
owned by: root dated: Sat Aug 13 11:42:16 2016
file name: ~root/test.txt
modified: no
user name: root host name: www.linuxidc.com
process ID: 20247 (still running)
While opening file "test.txt"
dated: Sat Aug 13 11:38:53 2016
(1) Another program may be editing the same file. If this is the case,
be careful not to end up with two different instances of the same
file when making changes. Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r test.txt"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file ".test.txt.swp"
to avoid this message.
Swap file ".test.txt.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
上面的信息已經明確的說明了原因
- 其他人或程序同時在修改這個文件
由於Linux是多用戶多任務的環境,因此很可能有很多人同時在編輯同一個文件。
如果在多人共同編輯的情況下,大家同時儲存,這個文件會被修改的面目全非。
這是出現這個警告的原因之一,解決方案:
- 找到正在修改這個文件的程序或用戶,請他結束該vim的工作後再進行處理
- 如果只是查看文件的內容而不進行編輯行為,按O以只讀模式打開
- 在上一次的vim編輯時異常中斷
比如使用SSH遠程連接服務器使用vim進行編輯時連接斷開這種情況。
根據不同的情況采用不同的解決方案:
- 如果之前的vim操作沒有保存,按R進入恢復模式就可以找回之前為存儲的數據
- 如果確定之前的vim操作是無用的,按D刪除之前swp文件,此時vim會創建新的swp文件
警告信息中的六個按鍵的作用
按鍵 | 說明 |
O
以只讀方式打開文件
E
以正常方式編輯文件並且不會載入之前的swp文件中的內容
(謹慎操作:有可能會造成多個使用者互相修改文件的情況)
R
恢復之前未存儲的內容
D
刪除之前的swp文件,此時vim會創建新的swp文件
Q
退出vim
A
跟Q差不多,忽略這次的編輯行為返回到文本界面
多文件編輯
vim可以同時編輯多個文件
[[email protected] ~]# vim anaconda-ks.cfg test.txt
按鍵 | 說明 |
:n
編輯上一個文件
:N
編輯下一個文件
:files
列出本次vim指令打開的所有文件
:files
1 %a "anaconda-ks.cfg" line 1
2 "test.txt" line 0
多窗口功能
vim可以分屏編輯多個文件
按鍵 | 說明 |
:sp [文件名]
如果有加文件名則以上下分屏的模式在右邊打開一個新的文件
否則在下面的窗口打開當前文件
使用vim的-o參數打開多個文件時會上下分屏,使用-O參數會左右分屏
Ctrl+w+j或Ctrl+w+↓
先按下Ctrl+w,再按下j或↓在上下兩個窗口間進行窗口切換
左右分屏的情況使用 ←→或hl左右切換窗口
Ctrl+w+q
退出關閉光標所在的窗口
補全功能
vim和大部分集成開發環境一樣包含補全功能
按鍵 | 說明 |
[ctrl]+x -> [ctrl]+n
通過目前正在編輯的這個“文件的內容文字”作為關鍵字,予以補齊
[ctrl]+x -> [ctrl]+f
以當前目錄內的“文件名”作為關鍵字,予以補齊
[ctrl]+x -> [ctrl]+o
以擴展名作為語法補充,以vim內置的關鍵字,予以補齊
常用指令示意圖
亂碼處理
造成亂碼的原因是文件的源編碼和vim的編碼不一致
比如:在windows中編輯好的漢字文本文檔上傳到Linux打開就亂碼了
解決方案:使用iconv工具解決亂碼
查看是否安裝了iconv,如果沒有安裝使用yum或rpm安裝即可
[[email protected] ~]# rpm -qf `which iconv`
glibc-common-2.17-106.el7_2.4.x86_64
使用iconv命令轉碼
輸入/輸出格式規范:
-f, --from-code=名稱 原始文本編碼
-o, --output=FILE 輸出文件
-l, --list 列舉所有已知的字符集
iconv -f 原本編碼 -t 新編碼 filename [-o newfile]
例:
[[email protected] ~]# iconv -f gb2312 test.txt -o new.txt
附錄
vim小抄
vim鍵盤圖