[Linux] VIM的使用

VIM的簡介

VIM是一款功能強大、高度可定製的文本編輯工具。可以使用命令apt install vim(Ubuntu環境,在安裝有apt工具的情況下)安裝,相比起vi來說,vim做的一些變化

  • vi是visual interface的縮寫,而vim是Vi IMproved的縮寫
  • EX的可視化接口
  • 增加了多級撤銷、多窗口操作
  • 穩定性提高、減少崩潰以及崩潰後也可以恢復
  • 關鍵字自動補全自己上下文相關的補全

vim工作模式

VIM一共分爲五種模式,分別爲

  • 普通模式:vim打開一個文件時默認模式(命令模式)
  • 插入模式:i 進入插入模式之外,還有o,a都進入插入模式
  • 命令行模式:可以輸入命令執行,例如:set number可以設置行號,如果想一直有效,可以將命令寫入到 /etc/vim/vimrc 配置文件。
  • 可視化模式:按v進入到可視化模式,然後移動光標就可以選中一塊文本了,可以進行後續的粘貼、刪除、複製等操作
  • 替換模式:按R就可以進入到替換模式

細節操作

光標移動

單個字符移動:

  • h: 向左移動
  • l: 向右移動
  • j: 向下移動
  • k: 向上移動
  • xh: 向左移動x個字符距離

單詞移動:

  • w: 將光標移動到下一個單詞的開頭
  • b: 將光標移動到前一個單詞的開頭
  • e: 將光標移動到下一個單詞的詞末
  • E: 移動到單詞的結尾(忽略標點符號)
  • ge: 將光標移動到上一個單詞的詞末
  • 2w: 指定移動的次數

行移動:

  • $: 將光標移動到當前行的行尾
  • 0:將光標移動到當前行的行首
  • ^:將光標移動到當前行的第一個非空字符
  • 2|:移到當前行的第2列
  • fx:將光標移動到當前行的第一個字符x上
  • 3fx: 將光標移動到航前行的第3個字符x上
  • tx: 將光標移動到目標字符x的前一個字符上
  • fx和tx可以通過;和,進行正向或反向重複移動
  • %: 用於符號間的移動,它會在一對()、[]、{}之間跳躍

文本塊移動:

  • (:移到當前句子的開頭
  • ): 移到下一個句子的開頭
  • {: 移到當前一段的開頭
  • }:移到下一段的開頭
  • [[: 移到當前這一節的開頭
  • ]]: 移到下一節的開頭

在屏幕中移動

  • xG: 跳轉到指定的第x行,G移動到文件按末尾,
  • ``(2次單引號)返回到跳轉前的位置
  • gg: 移動到文件開頭
  • x%: 移動到文件中間,就使用50%
  • H: 移動到home
  • M: 移動到屏幕中間
  • L: 移動到一屏末尾
  • ctrl+G: 查看當前的位置狀態

滾屏與跳轉

  • 半屏滾動: ctrl+u/ctrl+d
  • 全屏滾動: ctrl+f/ctrl+b
  • 定位光標的位置
  • zz:將光標置於屏幕的中間
  • zt: 將光標移動到屏幕的頂部
  • zb:將光標移動到屏幕的底部

設置跳轉標記

  • mx,my,mz設置三個位置,以m開頭,後可接任意字母
  • `x, `y, `z 可以跳轉到各自設置的位置

文本操作

文本插入操作

  • i: 在當前光標的前面插入字符
  • a: 在當前光標的後面追加字符
  • o: 在當前光標的下一行行首插入字符
  • I:在一行的開頭添加文本
  • A:在一行的結尾處添加文本
  • O:在光標當前行的上一行插入文本
  • s:刪除當前光標處的字符並進入到插入模式
  • S:刪除光標所在處的行,並進入到插入模式
  • u: 撤銷修改

字符文本刪除

  • x: 刪除當前光標所在處的字符
  • X:刪除當前光標左邊的字符

單詞刪除

  • dw: 刪除一個單詞(從光標處到空格)
  • daw: 刪除光標所在的整個單詞(包括空白字符)
  • diw: 刪除整個單詞文本,但是保留空格字符不刪除
  • d2w: 刪除從當前光標開始處的2個單詞
  • d$: 刪除從光標到一行末尾的整個文本
  • d0: 刪除從光標到一行開頭的所有單詞
  • dl: 刪除當前光標處的字符=x
  • dh: 刪除當前光標左邊的字符=X

行刪除

  • dd: 刪除當前光標處的一整行=D
  • 5dd: 刪除從光標開始處的5行代碼
  • dgg: 刪除從光標到文本開頭
  • dG: 刪除從光標到文本結尾

行合併

  • J:刪除一個分行符,將當前行與下一行合併

文本複製、剪切與粘貼

  • y: 複製
  • p:粘貼
  • yw: 複製一個單詞
  • y2w: 複製2個單詞
  • y$: 複製從當前光標到行結尾的所有單詞
  • y0: 複製從當前光標到行首的所有單詞
  • yy: 複製一整行
  • 2yy: 複製從當前光標所在行開始的2行

複製文本塊

  • 首先進入visual模式:v
  • 移動光標選擇文本
  • 複製與粘貼的操作

文本修改與替換

  • cw: 刪除從光標處到單詞結尾的文本並進入到插入模式
  • cb: 刪除從光標處到單詞開頭的文本並進入到插入模式
  • cc: 刪除一整行並進入到插入模式
  • ~: 修改光標下字符的大小寫
  • r: 替換當前光標下的字符
  • R:進入到替換模式
  • xp: 交換光標和下一個字符

組合命令

Linux組合命令

查找與替換

字符串查找

  • /string 正向查找
  • ?string 反向查找
  • :set hls 設置高亮顯示
  • *按鍵將當前光標處的單詞高亮顯示
  • 使用n瀏覽下一個查找高亮的結果

字符串替換

  • : s/old/new 將當前行的第一個字符串old替換爲new
  • : s/old/new/g 將當前行的所有字符串old替換爲new
  • : 90s/old/new/g 將指定行的所有字符串old替換爲new
  • : 90,93s/old/new/g 將90到93行的所有字符串old替換爲new
  • : %s/old/new/g 將文本中所有的字符串old替換爲new
  • : %s/old/new/gc 依次替換每個字符串關鍵字
  • : %s/^struct/int/g 將所有以struct開頭的字符串替換爲int

修改的撤銷、重做和保存

  • u: 撤銷上一步的操作。
  • Ctrl+r: 將原來的插銷重做一遍
  • U:恢復一整行原來的面貌(文件打開時的文本狀態)
  • q: 若文件沒有修改,直接退出
  • q!: 文件已經被修改,放棄修改退出
  • wq: 文件已經被修改,保存修改並退出
  • e!: 放棄修改,重新回到文件打開時的狀態

編輯多個文件

文件和緩衝區的區別:文件是保存在磁盤上的,而打開的文件的文件是在內存中,在內存中有一個緩衝區,用來存放打開的文件。vim每次打開文件時都會創建一個緩衝區,vim支持打開多個文件。

  • :buffers 查看緩衝區列表==ls
  • :buffer N 根據緩衝區列表的編號跳轉到指定緩衝區
  • :bnext/bprev 遍歷緩衝區列表
  • :bfirst/blast分別調到緩衝區列表的開頭和結尾
  • :write 將緩衝區的修改保存到磁盤上
  • :edit! e!放棄緩衝區的修改,恢復到文件打開時的狀態
  • :edit file 編輯另一個文件
  • :wnext 保存當前緩衝區的修改並跳轉到緩衝區列表中的下一個文件
  • :set autowrite:自動保存

標籤頁與摺疊欄

  • 標籤頁的新建:tabedit file/tab split
  • 標籤頁的切換: tabn/tabp
  • 按鍵:gt/gT
  • 標籤頁的關閉: tabclose 關閉當前的標籤頁,:tabonly
  • 創建一個摺疊: zf200G: 將光標和200行之間的代碼摺疊起來
  • 摺疊的打開與關閉
    za: 打開和關閉摺疊
    zr/zm: 一層一層地打開和關閉摺疊
    zR/zM: 分別打開和關閉所有的摺疊
  • 摺疊鍵的光標移動
    zj: 跳轉到下一個摺疊處
    zk: 跳轉到上一個摺疊處
  • 刪除摺疊
    zd: 刪除光標下的摺疊
    zD: 刪除光標下的摺疊以及嵌套的摺疊
    zE: 刪除所有的摺疊標籤
    創建的摺疊當退出vim之後就失效了。

多窗口操作

  • 分割窗口
    split/vsplit filename
  • 窗口間跳轉
    ctrl+w hjkl:不同的字母跳轉不同的方向
    ctrl+w w
  • 移動窗口
    ctrl+w HJKL
  • 調整窗口尺寸
    ctrl+w +/- 調整窗口的高度
    ctrl+w </> 調整窗口的寬度
    ctrl+w = 所有的窗口設置相同的尺寸
    :resize n 將當前窗口尺寸調整爲N行
  • 關閉窗口
    close: 關閉一個窗口
    qall: 退出所有窗口
    qall!: 放棄修改,退出所有窗口
    wqall: 保存並退出所有窗口
    wall: 保存所有窗口

以上就是我學習VIM時候的所有做的筆記。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章