vim 小總結

vi/vim的介紹及相關命令

在介紹vi/vim的相關命令前,先來了解下什麼是vi/vim?爲何學習vi/vim?html

什麼是vi/vim?linux

  • vi 是Visual Interface的縮寫,即 可視化接口
  • vim是vi iMprove的縮寫,即vi的加強版 (具備語法着色功能),Vim是從 vi 發展出來的一個文本編輯器。

爲何學習vi/vim?git

  1. 全部的Unix系統上都會默認內置vi/vim編輯器,而不必定帶有其餘文本編輯器,很是通用;
  2. 不少軟件的編輯接口都會默認調用vi/vim;
  3. vi/vim具備程序編輯的能力;
  4. vi/vim程序簡單,編輯速度至關快速

vi和vim有什麼區別?github

  1. 多級撤銷:在vi編輯器中,按u只能撤消上次命令,而在vim裏能夠無限制的撤消
  2. vi編輯器只能運行於unix中,而vim不只能夠運行於unix,還可用於windows、mac等多操做平臺
  3. vim能夠用不一樣的顏色來加亮你的代碼
  4. 能夠把vim當成vi來使用

因爲vi與vim在命令上幾乎相同,因此這裏以vim爲例,目前咱們使用較多的也是vim編輯器。shell

vim的4種模式

進入vim模式:在終端裏打 vim 回車。vim

vim一共有4個模式。經常使用是normalinsert模式, 大部分時候都在兩個模式下來回切換windows

模式 英文名 描述 切換操做
正常模式 normal-mode 用於查看文本,也可複製、粘貼、撤銷、重作等 - 默認進入的是正常模式
- 不論位於什麼模式,按下<Esc>鍵(有時須要按兩下)都會進入正常模式
插入模式 insert-mode 也即編輯模式,用於編輯文本 - 正常模式下,按下i, a, o, I,A,O鍵,進入插入模式
命令模式 normal-mode 用於輸入指令
如:保存、運行、切換標籤、切割屏幕等
- 正常模式下,按下:(英文冒號)鍵,進入命令模式
可視模式 visual-mode 至關於高亮選取文本後的正常模式
可視模式中的操做有些像拿鼠標進行操做
- 在正常模式下,按下v,V,<ctrl>+v,能夠進入可視模式

退出vim

指令 描述
:q 直接退出(無更改)
:wq 保存退出
:q! 放棄修改,強行退出

一、-normal- 正常模式下

啓動vim後默認位於正常模式。不論位於什麼模式,通常狀況,按下<Esc>鍵(有時須要按兩下)都會進入normal(正常)模式。bash

正常模式通常用於瀏覽文件,也包括一些複製、粘貼、刪除等操做。app

在VIM的Normal模式下,全部的鍵就是功能鍵了less

返回 Normal 模式,請按 ESC

返回 Insert 模式,請按 i

  1. 插入/刪除

    keys 效果 keys 效果
    a 光標以後插入 A 行尾插入
    o 下一行插入 O 上一行插入
    i 光標以前插入 I 行首插入
    s 刪除字符插入 S 刪除正行插入
    dd 刪除一行,並把刪除的行存到剪貼板裏 "cc"或者"S" 刪除後進入插入-insert-模式
    dw 刪除一個單詞 cw 刪除一個單詞進入插入-insert-模式
    x 或 dl 刪除一個字符 s 或 cl 刪除一個字符進入插入模式
    cw 替換從光標所在位置後到一個單詞結尾的字符 "D"或"C" 刪除到行尾能夠
    dt" 刪除全部的內容,直到遇到雙引號—— "
    u 撤銷 ctrl + r 重作
  2. 拷貝/黏貼/刪除

    keys 效果
    y 複製 當前光標所在的一個字符
    x 剪切 當前光標所在的一個字符
    p 粘貼
    xp 交換兩個字符
    ddp 交換兩行
    yy 拷貝當前行當行於 ddP
    0y$ 0y$ 命令意味着:0 先到行頭,y 從這裏開始拷貝,$ 拷貝到本行最後一個字符
    ye 從當前位置拷貝到本單詞的最後一個字符
    y2/foo 拷貝2個 「foo」 之間的字符串
    dt" 刪除全部的內容,直到遇到雙引號—— "

    還有不少時間並不必定你就必定要按y纔會拷貝,下面的命令也會被拷貝:

    • d (刪除 )
    • v (可視化的選擇)
    • gU (變大寫)
    • gu (變小寫)
  3. 光標的移動

    keys 效果
    k l j h 上右下左(↑→↓←) ` 移動到上次編輯文件的位置
    gg 跳到文件開頭 G 跳到文件尾
    { 移動到段首 } 移動到段尾
    b 跳到上一個單詞的開頭 J 合併兩行
    e 跳到下一個單詞的結尾 w 跳到下一個單詞的開頭
    0 數字零,到行頭 $ 到本行行尾
    ^ 到本行第一個非blank(空格,tab,換行,回車等)字符的位置 ngg 或 nG 或 :n 跳到第n行
    L 移動到底部 L 移動到底部
    H 移動光標到屏幕頂端 M 移動到屏幕中間
  4. 選中

    keys 做用
    v+w 打開選中模式,並向後移動一個單詞
    v+b 打開選中模型,並向前移動一個單詞
    v+i+w 打開選中模式,並選中當前單詞
  5. 修改

    keys 說明
    d s <existing char> 刪除兩邊的指定字符
    c s <existing char> <desired char> 修改兩邊的指定字符
    y s <motion> <desired char> 修改兩邊字符
    S <desired char> visual modes 選中指定字符中間的內容
  6. 格式

    • " >>"縮進全部選擇的代碼
    • "<<" 反縮進全部選擇的代碼
    • 合併兩行" J"
  7. 打開、保存、退出、改變文件

    keys 效果
    :e <path/to/file> → 打開一個文件
    :w 存盤
    :saveas <path/to/file> 另存爲 `<path/to/file>
    :xZZ:wq 保存並退出 (:x 表示僅在須要時保存,ZZ不須要輸入冒號並回車)(:w 存盤, :q 退出) (陳皓注::w 後能夠跟文件名)
    :q! 退出不保存
    :qa! 強行退出全部的正在編輯的文件,就算別的文件有更改。
    :bn:bp 你能夠同時打開不少文件,使用這兩個命令來切換下一個或上一個文件。(陳皓注:我喜歡使用:n到下一個文件)
    :help | 顯示相關命令的幫助。你也能夠就輸入:help` 而不跟命令。(陳皓注:退出幫助須要輸入:q)
    :e! 若不想保存文件,而從新打開
    :e filename 若想打開新文件
    ctrl + ^ 進行文件切換
  8. 代碼註釋

    gc 打開或關閉註釋 //
    gcc 打開或關閉某一行代碼註釋 //
    gc2j 打開或關閉兩行代碼註釋
    gC 塊代碼註釋
    gCi) 註釋 括號()中的代碼
  9. 其餘

    • gd - Go to definition, 跳轉到定義。
    • gb - af - VISUAL 模式命令, 依據語法分析, 將選擇區域向外擴展。
    • gh - 等同於將鼠標移至光標所在單詞, 方便查看定義以及報錯。
    • :set nu 顯示行號
    • :set nonu 不顯示行號
    • :nohl 不高亮顯示

二、–insert– 插入模式下

所謂插入模式就是進入到一個能夠編輯文本文檔的模式,常規的方式就是按小i進入編輯模式,左下角顯示「--insert插入--」狀態。

在 normal 模式下轉 insert 模式,有三種途徑。

  • a 光標以後插入, A 行尾插入。
  • i 光標以前插入, I 行首插入。
  • o 下一行插入 ,O 上一行插入。

刪除

操做 效果
ctrl+h 刪除前一個字符
ctrl+w 刪除前一個單詞
ctrl+u 刪除前面一行全部字符

三、-command- 命令模式

在normal(正常)模式中,按下:(冒號)鍵,會進入命令模式

在命令模式中能夠執行一些輸入並執行一些vim或插件提供的指令,就像在shell裏同樣。這些指令包括 設置環境、文件操做、調用某個功能等等。

以:冒號開頭的命令

操做 效果 操做 效果
:wq 或:x 保存退出 :set nu 顯示行號
:wq! 強制保存退出 :set nonu 不顯示行號
:q! 強制退出 :nohl 不高亮顯示

注意::wq 或:x 都是保存退出,相似wq 若是在更改文件以後去操做2者的效果徹底相同。

可是有一種狀況不一樣,若是文件僅僅只是打開只看了一眼,這個時候使用wq會修改Mtime,更改爲文件查看的那一刻,也就是輸入wq那個時間。若是使用x那麼就不會更改Mtime時間

四、-visual- 可視模式

在正常模式按下v, V, <Ctrl>+v,能夠進入可視模式。

可視模式中的操做有點像拿鼠標進行操做,選擇文本的時候有一種鼠標選擇的即視感,有時候會很方便。

可視塊模式有一個很好的使用:多選註釋 加註釋 :

  • 移動光標,選中的位置會有高亮顯示
  • shift + i,進入 insert 模式
  • 輸入//
  • esc

去註釋 :

  • 移動光標,選中的位置會有高亮顯示
  • 按d

小技巧

vim的資源佔用

近期筆者發現VSCode在vim 模式下CPU佔用常常是200%左右,卡頓很是嚴重,看了官方issue。 關閉easymotion 和 statusbarcolorcontrol 能夠解決此問題。

"vim.easymotion": false,
  "vim.statusBarColorControl": false
複製代碼

中文輸入法切換問題

vim 經常使用是normal 和 insert 模式。 大部分時候都在兩個模式下來回切換,若是在insert 模式下是中文輸入,按esc 或者 ctrl+[ 切到了 normal 模式,這個時候問題來了,須要手動切換輸入法到英文,不然會彈出中文提示。 還好官方給出瞭解決方案:

  1. 安裝 im-select: Switch your input method from terminal
  2. 修改配置
"vim.autoSwitchInputMethod.enable": true,
"vim.autoSwitchInputMethod.defaultIM": "com.apple.keylayout.US",
"vim.autoSwitchInputMethod.obtainIMCmd": "/usr/local/bin/im-select",
"vim.autoSwitchInputMethod.switchIMCmd": "/usr/local/bin/im-select {im}"
複製代碼

須要注意的是,mac下須要查明模式英文輸入法是US 仍是British ,而後修改defaultIM這個設置,不然會不起做用。

複製黏貼

在vscode下面,咱們只須要對vim的相關配置進行設置就行。具體以下: 在【首選項】中進行設置。

"vim.useSystemClipboard": true
複製代碼

進行了上面的設置以後。就可使用系統的剪切板了。

配置

到用戶目錄下新建文件爲 .vimrc,而後在其中寫下以下配置

syntax enable           //語法高亮                     
set number              //顯示行號
set cursorline          //突出顯示當前行
set ruler               //打開狀態欄標尺
set shiftwidth=4        //設定 << 和 >> 命令移動時的寬度爲 4
set softtabstop=4       //使得按退格鍵時能夠一次刪掉 4 個空格
set tabstop=4           //設定 tab 長度爲 4
複製代碼

vim引自

簡明 VIM 練級攻略

vim配置

VSCode裏面配置vim

vim命令大全

附:Linux的經常使用命令

幾個經常使用的Linux命令以下:

文件和目錄

  1. cd 命令,用於切換當前目錄,它的參數是要切換到的目錄的路徑,能夠是絕對路徑,也能夠是相對路徑

    cd /home 	||進入 '/ home' 目錄' cd .. ||返回上一級目錄 cd ../.. ||返回上兩級目錄 cd ||進入我的的主目錄 cd ~user1 ||進入我的的主目錄 cd - ||返回上次所在的目錄 複製代碼
  2. ls 命令,查看文件與目錄的命令,list之意,它的參數很是多,下面列出一些經常使用的:

    ls 	||查看目錄中的文件 
    ls -F 	||查看目錄中的文件 
    ls -l 	||顯示文件和目錄的詳細資料 
    ls -a 	||顯示隱藏文件 
    ls -d 	||僅列出目錄自己,而不是列出目錄的文件數據  
    ls -h 	||將文件容量以較易讀的方式(GB,kB等)列出來  
    ls -R 	||連同子目錄的內容一塊兒列出(遞歸列出),等於該目錄下的全部文件都會顯示出來  
    ls -lR 	||以長數據串的形式列出當前目錄下的全部文件  
    ls *[0-9]* 	||顯示包含數字的文件名和目錄名 
    複製代碼
  3. mkdir 命令,

    mkdir dir1 	||建立一個叫作 'dir1' 的目錄' mkdir dir1 dir2 ||同時建立兩個目錄 mkdir -p /tmp/dir1/dir2 ||建立一個目錄樹 複製代碼
  4. cp 命令,該命令用於複製文件,copy之意,它還能夠把多個文件一次性地複製到一個目錄下

    cp file1 file2 	||複製一個文件 
    cp dir/* . 	||複製一個目錄下的全部文件到當前工做目錄 
    cp -a 	||將文件的特性一塊兒複製  
    cp -a /tmp/dir1 . 	||複製一個目錄到當前工做目錄 
    cp -a dir1 dir2 	||連同文件的全部特性把文件dir1複製成文件dir2
    cp -p 	||連同文件的屬性一塊兒複製,而非使用默認方式,與-a類似,經常使用於備份  
    cp -i 	||若目標文件已經存在時,在覆蓋時會先詢問操做的進行  
    cp -r 	||遞歸持續複製,用於目錄的複製行爲  
    cp -u 	||目標文件與源文件有差別時纔會複製  
    複製代碼
  5. mv 命令,該命令用於移動文件、目錄或改名,move之意

    mv dir1 new_dir 	||重命名/移動 一個目錄,把dir1重命名爲new_dir
    mv -f 	||force強制的意思,若是目標文件已經存在,不會詢問而直接覆蓋  
    mv -i 	||若目標文件已經存在,就會詢問是否覆蓋  
    mv -u 	||若目標文件已經存在,且比目標文件新,纔會更新  
    複製代碼
  6. rm 命令,用於刪除文件或目錄,remove之間

    rm -f  	||就是force的意思,忽略不存在的文件,不會出現警告消息 
    rm -i file	||刪除文件file,在刪除以前會詢問是否進行該操做   
    rm -i 	||互動模式,在刪除前會詢問用戶是否操做  
    rm -r 	||遞歸刪除,最經常使用於目錄刪除,它是一個很是危險的參數  
    rm -rf dir1 	||刪除一個叫作 'dir1' 的目錄並同時刪除其內容 
    rm -rf dir1 dir2 	||同時刪除兩個目錄及它們的內容 
    複製代碼
  7. find 命令,是一個基於查找的功能很是強大的命令,相對而言,它的使用也相對較爲複雜,參數也比較多,因此在這裏將給把它們分類列出:

    # 與時間有關的參數: 
    find -mtime n 	||n爲數字,意思爲在n天以前的「一天內」被更改過的文件;  
    find -mtime +n 	||列出在n天以前(不含n天自己)被更改過的文件名;  
    find -mtime -n 	||列出在n天以內(含n天自己)被更改過的文件名;  
    find -newer file 	||列出比file還要新的文件名  
    # 例如: 
    find /root -mtime 0 # 在當前目錄下查找今天以內有改動的文件 
      
    # 與用戶或用戶組名有關的參數: 
    find -user name 	||列出文件全部者爲name的文件  
    find -group name 	||列出文件所屬用戶組爲name的文件  
    find -uid n 	||列出文件全部者爲用戶ID爲n的文件  
    find -gid n 	||列出文件所屬用戶組爲用戶組ID爲n的文件  
    # 例如: 
    find /home/ljianhui -user ljianhui # 在目錄/home/ljianhui中找出全部者爲ljianhui的文件 
      
    # 與文件權限及名稱有關的參數: 
    find -name filename 	||找出文件名爲filename的文件  
    find -size [+-]SIZE 	||找出比SIZE還要大(+)或小(-)的文件  
    find -tpye TYPE 	||查找文件的類型爲TYPE的文件,TYPE的值主要有:通常文件(f)、設備文件(b、c)、  
                 目錄(d)、鏈接文件(l)、socket(s)、FIFO管道文件(p);  
    find -perm mode 	||查找文件權限恰好等於mode的文件,mode用數字表示,如0755;  
    find -perm -mode 	||查找文件權限必需要所有包括mode權限的文件,mode用數字表示  
    find -perm +mode 	||查找文件權限包含任一mode的權限的文件,mode用數字表示  
    # 例如: 
    find / -name passwd # 查找文件名爲passwd的文件 
    find . -perm 0755 # 查找當前目錄中文件權限的0755的文件 
    find . -size +12k # 查找當前目錄中大於12KB的文件,注意c表示byte 
    複製代碼
  8. pwd 命令,顯示工做路徑

  9. tree 命令,顯示文件和目錄由根目錄開始的樹形結構(1)

  10. lstree 命令,顯示文件和目錄由根目錄開始的樹形結構(2)

  11. ln -s file1 lnk1 命令,建立一個指向文件或目錄的軟連接

  12. ln file1 lnk1 命令,建立一個指向文件或目錄的物理連接

  13. cat命令,用於查看文本文件的內容,後接要查看的文件名,一般可用管道與more和less一塊兒使用,從而能夠一頁頁地查看數據。

    cat text | less 	||查看text文件中的內容  
    # 注:這條命令也可使用less text來代替 
    複製代碼

摘自linux最經常使用的20個命令

相關文章
相關標籤/搜索