vim编辑器作为Linux上面预设的程式编辑命令,相信大家都有简单的使用经历。事实上除了简单的i,[Esc],:wq之外,vi还有非常多的按键可以使用哦。vi的三种模式只有一般指令模式可以与编辑、指令列模式切换,编辑模式与指令模式之间不能切换。
一般指令模式可用的按钮说明
一般指令模式可用的按钮说明:游标移动,复制粘贴,搜寻替代等;
游标移动
按键 | 功能说明 |
---|---|
h 或 向左方向鍵(←) | 游標向左移動一個字元 |
j 或 向下方向鍵(↓) | 游標向下移動一個字元 |
k 或 向上方向鍵(↑) | 游標向上移動一個字元 |
l 或 向右方向鍵(→) | 游標向右移動一個字元 |
Ctrl+f | 屏幕『向下』移动一页,相当于【Page Down】 |
Ctrl+d | 屏幕『向下』半页 |
Ctrl+b | 屏幕『向上』移动一页,相当于【Page Up】 |
Ctrl+u | 屏幕『向上』半页 |
+ | 游標移動到非空白字元的下一行 |
- | 游標移動到非空白字元的上一行 |
n<space> |
游标向右移动到这一行的第n个字元 |
0 或功能键【Home】 | 移动游标到这一行的最前面字元处 |
$ 或功能键【End】 | 移动游标到这一行的最后面字元处 |
H | 游標移動到這個螢幕的最上方那一行的第一個字元 |
M | 游標移動到這個螢幕的中央那一行的第一個字元 |
L | 游標移動到這個螢幕的最下方那一行的第一個字元 |
G | 移動到這個檔案的最後一行 |
nG | n 為數字,移動到這個檔案的第 n 行 |
gg | 移动到档案的第一行,相当于1G |
n<Enter> |
n 為數字,游標向下移動 n 行 |
搜寻与取代
按键 | 功能说明 |
---|---|
/word | 向游標之下尋找一個名稱為 word 的字串 |
?word | 向游標之上尋找一個字串名稱為 word 的字串 |
n | 代表『重複前一個搜尋的動作』 |
N | 代表為『反向』進行前一個搜尋動作 |
:n1,n2s/word1/word2/g | 在第n1行和n2行之间查找word1字符串,并将该串取代为word2 |
:1,$s/word1/word2/g | 從第一行到最後一行尋找 word1 字串,並將該字串取代為 word2 |
:1,$s/word1/word2/gc | 從第一列到最後一列尋找 word1 字串,並將該字串取代為 word2 ,且在取代前顯示提示字元給使用者確認 (confirm) |
删除、复制与粘贴
按键 | 功能说明 |
---|---|
x, X | 在一行字符中,x 為向後刪除一個字元 (相當於 [del] 按鍵), X 為向前刪除一個字元(相當於 [backspace] ) |
nx | 連續向後刪除 n 個字元 |
d$ | 删除游标所在处到该行最后一个字元 |
d0 | 删除游标所在处到该行最前面一个字元 |
dd | 刪除游標所在的那一整列 |
ndd | 刪除游標所在的向下 n 列 |
d1G | 刪除游標所在到第一行的所有資料 |
dG | 刪除游標所在到最後一行的所有資料 |
y0 | 複製游標所在的那個字元到該列行首的所有資料 |
y$ | 複製游標所在的那個字元到該列行尾的所有資料 |
yy | 複製游標所在的那一列 |
nyy | 複製游標所在的向下 n 列 |
y1G | 複製游標所在行到第一行的所有資料 |
yG | 複製游標所在列到最後一列的所有資料 |
p, P | p 為將已複製的資料在游標下一列貼上,P 則為貼在游標上一列 |
J | 將游標所在列与下一列的資料結合成同一列 |
u | 恢复前一個動作,即撤回 |
Ctrl+r | 重做上一個動作,经常和u一起愉快的编辑 |
. | 重复前一個動作,比如要要重複刪除、重複貼上等等動作 |
一般指令切换到编辑模式的可用按钮说明
按键 | 功能说明 |
---|---|
i,I | i为从当前游标所在处插入,I为从所在行的第一个非空白字元处开始插入 |
a,A | a为从游标所在的下一个字元处开始插入,A为从游标所在行的最后一个字元处开始插入 |
o,O | o为在游标所在的下一行处插入新的一行,O为在游标所在的上一行插入新的一行 |
r,R | r只会取代游标所在的那一个字元一次,R会一直取代游标所在的文字,直到ESC为止 |
Esc | 退出編輯模式,回到一般指令模式中 |
一般指令模式切换到指令模式的可用按钮说明
按键 | 功能说明 |
---|---|
:w | 將編輯的資料寫入硬碟檔案中 |
:w! | 若檔案屬性為『唯讀』時,強制寫入該檔案。但最终能否写入还要看檔案權限 |
:q | 离开vi |
:q! | 若曾修改過檔案,又不想儲存,使用 ! 為強制離開不儲存檔案 |
wq | 儲存後離開,若為 :wq! 則為強制儲存後離開 |
:w [filename] | 将编辑的资料存储成另一个档案,类似另存为 |
:r [filename] | 在编辑的资料中读入另一个资料的档案,即将filename的档案内容加到游标所在列后面 |
:n1,n2 w [filename] | 將 n1 到 n2 的內容儲存成 filename 這個檔案 |
:! command | 暫時離開 vi 到指令列模式下執行 command 的顯示結果,比如:! ls /home |
:set nu | 显示行号,设定后会在每一行的字首显示该行行号 |
:set nonu | 与set nu相反,为取消行号 |
vim环境的变更
vim 環境的變更
:set nu 顯示行號,設定之後,會在每一列的字首顯示該列的行號
:set nonu 與 set nu 相反,為取消行號!
vim编辑器使用练习
請在 /tmp 這個目錄下建立一個名為 vitest 的目錄;
進入 vitest 這個目錄當中;
將 /etc/man_db.conf 複製到本目錄底下(或由上述的連結下載 man_db.conf 檔案);
使用 vi 開啟本目錄下的 man_db.conf 這個檔案;
在 vi 中設定一下行號;
移動到第 43 列,向右移動 59 個字元,請問你看到的小括號內是哪個文字?
移動到第一行,並且向下搜尋一下『 gzip 』這個字串,請問他在第幾列?
接著下來,我要將 29 到 41 列之間的『小寫 man 字串』改為『大寫 MAN 字串』,並且一個一個挑選是否需要修改,如何下達指令?如果在挑選過程中一直按『y』, 結果會在最後一列出現改變了幾個 man 呢?
修改完之後,突然反悔了,要全部復原,有哪些方法?
我要複製 66 到 71 這 6 列的內容(含有MANDB_MAP),並且貼到最後一列之後;
113 到 128 列之間的開頭為 # 符號的註解資料我不要了,要如何刪除?
將這個檔案另存成一個 man.test.config 的檔名;
去到第 25 列,並且刪除 15 個字元,結果出現的第一個單字是什麼?
在第一列新增一列,該列內容輸入『I am a student…』;
儲存後離開吧!
整個步驟可以如下顯示:
1 | mkdir /tmp/vitest |
如果以上练习您都能毫不费力的kill掉的话,恭喜您,您在vi的使用上应该没有太大问题啦!