Linux vi/vim


1.vi/vim快捷鍵位圖

詳細可以參考:https://www.runoob.com/w3cnote/all-vim-cheatsheat.html

2.vi/vim的三種模式

基本上 vi/vim 共分為三種模式,分別是命令模式(Command mode)輸入模式(Insert mode)底線命令模式(Last line mode)。 這三種模式的作用分別是:

命令模式:

用戶剛剛啟動 vi/vim,便進入了命令模式。

此狀態下敲擊鍵盤動作會被Vim識別為命令,而非輸入字符。比如我們此時按下i,並不會在界面上輸入一個字符i,i被當作了一個命令。

以下是常用的幾個命令:

  • i 切換到輸入模式,以輸入字符。
  • x 刪除當前光標所在處的字符。
  • : 切換到底線命令模式,以在最底一行輸入命令。

若想要編輯文本:啟動Vim,進入了命令模式,按下i,切換到輸入模式。

命令模式只有一些最基本的命令,因此仍要依靠底線命令模式輸入更多命令。

輸入模式:

在命令模式下按下i,a,o等就進入了輸入模式。

在輸入模式中,可以使用以下按鍵:

  • 字符按鍵以及Shift組合,輸入字符
  • ENTER,回車鍵,換行
  • BACK SPACE,退格鍵,刪除光標前一個字符
  • DEL,刪除鍵,刪除光標后一個字符
  • 方向鍵,在文本中移動光標
  • HOME/END,移動光標到行首/行尾
  • Page Up/Page Down,上/下翻頁
  • Insert,切換光標為輸入/替換模式,光標將變成豎線/下划線
  • ESC,退出輸入模式,切換到命令模式

底線命令模式

在命令模式下按下:(英文冒號)就進入了底線命令模式。

底線命令模式可以輸入單個或多個字符的命令,可用的命令非常多。

在底線命令模式中,基本的命令有(已經省略了冒號):

  • q 退出程序
  • w 保存文件

按ESC鍵可隨時退出底線命令模式。

3.vi/vim打開和新建文件

(1)打開文件:vi filename

(2)打開文件並到指定行:vi filename +[n],其中n為指定行數,如果不輸入n,會到文件末尾行。

4.vi/vim的異常處理

如果vi/vim退出異常,在磁盤上可能會保存交換文件,此時輸入vi filename會有E325提示。

此時,可用ls -la命令查看到一個“.filename.swp”文件

可以輸入:recover恢復文件

再用rm .filename.swp命令刪除這個文件,再次使用vi filename就不會報錯了。如果不需要恢復直接執行rm .filename.swp命令刪除這個文件即可。

5.vi/vim命令合集

(1)命令模式切換到編輯模式:

    ①.插入模式

    輸入i,I,o,O,a,A等任何一個字母都可以進入vi插入模式。

  • i 在當前位置插入
  • I 在當前行首插入
  • a 在當前位置后插入
  • A 在當前行尾插入
  • o 在當前行之后插入一行
  • O 在當前行之前插入一行

    ②.取代模式

    輸入r和R會進入取代模式。

  • r 只會取代光標所在的那一個字符一次
  • R 會一直取代光標所在的文字,直到按下 ESC 為止

(2)命令模式切換到底線命令模式:

    ①.寫入

  • :w 將編輯的數據寫入文件中
  • :w! 若文件屬性為只讀時,強制寫入該文件。(能不能寫入與用戶對文件的權限有關)

    ②.離開

  • :q 離開vi
  • :q! 在vi模式下修改過文件但在離開vi時又不想保存可用
  • :wq 或 :x 保存寫入或修改的數據后離開vi
  • :wq! 強制保存寫入或修改的數據后離開
  • ZZ 注意ZZ前面不需要輸入“:”,若文件沒有改動,則不保存離開,若檔案已經被改動過,則保存后離開

    ③.另存為

  • :w [filename] 將文件的數據保存為 filename 這個文件
  • :n1,n2 w [filename] 將 n1 行到 n2 行的數據另存為成 filename 這個文件

    ④.讀入其他文件的數據

  • :r [filename] 在編輯的數據中,讀入另一個文件的數據。亦即將 filename 這個檔案內容加到游標所在行后面

    ⑤.暫時離開vi模式

  • :! command 暫時離開 vi 到指令行模式下執行 command 的顯示結果

(3)命令模式

    ①.移動光標

上下左右移動 行內移動 行數移動 屏幕移動 程序的段落移動 程序的段落切換 

  • [n]h 或 鍵盤左箭頭([n]←)光標向左移動n個字符
  • [n]j 或 鍵盤下箭頭([n]↓)光標向下移動n行
  • [n]k 或 鍵盤上箭頭([n]↑)光標向上移動n行
  • [n]l 或 鍵盤右箭頭([n]→)光標向右移動n個字符
  • [n]w 向后移動n個單詞
  • [n]b 向前移動n個單詞
  • [n]+空格符向右移動n個字符
  • 0或者Home鍵 到行首
  • ^ 到行首第一個不是空白字符的位置
  • $ 到行尾
  • n$ 到下面n行行尾
  • gg 到文件開頭
  • G 到文件行尾
  • [n]gg 或 [n]G 或 :n 到第n行
  • [n]+enter鍵 向下移動n行
  • + 到非空格符的下一行
  • - 到非空格符的上一行
  • Control鍵+f 屏幕向下移動一頁
  • Control鍵+b 屏幕向上移動一頁
  • Control鍵+d 屏幕向下移動半頁
  • Control鍵+u 屏幕向上移動半頁
  • Control鍵+e 向下移動一行
  • Control鍵+y 向上移動一行
  • H 到屏幕頂部第一個字符
  • M 到屏幕中間第一個字符
  • L 到屏幕底部第一個字符
  • { 上一段
  • } 下一段
  • % 括號匹配及切換

    ②.搜索

  • /str str表示查找的內容,查找到指定內容之后可以使用n:查找下一個,N:查找上一個
  • ?str 向光標之上尋找一個字符串名稱為str的字符串
  • * 向后查找當前光標所在單詞
  • # 向前查找當前光標所在單詞

    ③.替換

  • r 替換當前字符
  • R 一直替換當前行光標后字符
  • :%s/word1/word2/g word1替換成word2,全局替換,替換所有匹配
  • :s/word1/word2/g 可視區域替換,需要先選擇要替換的范圍
  • :%s/word1/word2/gc 確認替換,在替換時會有提示
  • :n1,n2s/word1/word2/g n1 與 n2 為數字。在第 n1 與 n2 行之間尋找 word1 這個字符串,並將該字符串取代為 word2 
  • :1,$s/word1/word2/g 或 :%s/word1/word2/g 從第一行到最后一行尋找 word1 字符串,並將該字符串取代為 word2
  • :s/word1/word2/ 用word2替換word1,替換當前行的第一個匹配
  • :%s/word1/word2/ 用word2替換word1,替換所有行的第一個匹配
  • :1,$s/word1/word2/gc 或 :%s/word1/word2/gc 從第一行到最后一行尋找 word1 字符串,並將該字符串取代為 word2 ,且在取代前顯示提示字符給用戶確認 (confirm) 是否需要取代。y為確認替換,n為不替換,a為替換所有,q為退出替換

    ④.刪除

  • x 或 dl 刪除光標所在字符,或者在一行當中選中的文字
  • nx 刪除當前光標向后n個字符
  • X 或 dh 為向前刪除一個字符
  • dd 刪除光標所在一整行
  • dj 刪除上一行
  • dk 刪除下一行
  • dw 從光標位置刪除到單詞末尾
  • d} 從光標位置刪除到段落結尾
  • nd 刪除當前行開始的n行
  • ndd 刪除光標所在向下n行
  • d1G 刪除光標所在到第一行的所有數據
  • dG 刪除光標所在到最后一行的所有數據
  • d$ 或 D 刪除光標所在處到該行的最后一個字符
  • d0 刪除光標所在處到該行第一個字符 
  • kdgg 刪除當前行之前的所有行(不包括當前行)
  • jdG 刪除當前行之后的所有行(不包括當前行)
  • :n1,n2d 刪除n1到n2行
  • :n1,$d 刪除n1行及以后所有行
  • J 刪除兩行之間的空格

    ⑤.復制

  • yy 復制游標所在那一行的所有數據
  • nyy n為數字,復制光標所在的向下 n 行
  • y1G 復制游標所在行到第一行的所有數據
  • yG 復制游標所在行到最后一行的所有數據
  • y0 復制光標所在的那個字符到該行行首的所有數據
  • y$ 復制光標所在的那個字符到該行行尾的所有數據

    ⑥.粘貼

  • p 將已復制的數據貼在光標下一行
  • P 將已復制的數據貼在游標上一行!

    ⑦.標記與定位

  • m[flag] 添加標記,flag可以是a-z或者A-Z之間的任意一個字母
  • '[flag] 直接定位到flag所在位置

    ⑧.剪切

  • 在vi中,刪除操作其實就相當於剪切操作
  • 正常模式下按v(逐字)或V(逐行)進入可視模式,然后用h、j、k、l等命令移動即可選擇某些行或字符,再按d即可剪切
  • ndd 剪切當前行之后的n行。利用p命令可以對剪切的內容進行粘貼
  • :n1,n2d 將n1到n2行剪切。利用p命令可將剪切后的內容進行粘貼。
  • :n1,n2 m n3 將第n1到n2行移動到第n3行之后。

    ⑨.撤銷和重做

  • u 撤銷上次命令
  • U 撤銷對整行的操作
  • Control鍵+r 重做,即恢復撤銷的命令

    ⑩.重復執行和縮進

  • . 重復執行前一個操作
  • >> 向右增加縮進
  • << 向左增加縮進

(4)可視模式

    可視模式可以和移動光標命令連用,如ggVG可以選中所有內容。

  • v 可視模式,從光標位置開始按照正常模式選擇文本
  • V 可視行模式,選中光標經過的所有行
  • Control鍵+v 可視塊模式,垂直方向選中文本

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM