VIM技巧-基础

  1. Inert a shell command output
    :[n]r! command insert at nth line
    :r! command insert at current line

  2. Session
    mksession

  3. Oldfiles
    :browse oldfiles

光標垂直移動與定位

當然 vim 編輯器,並不是主要以這種方式移動,也有一些指令可以讓你一步到位

頁面定位

  • 頁面底端 : G
  • 頁面頂端 : gg

翻頁指令

  • 向下半頁 : control + d
  • 向上半頁 : control + u
  • 向下整頁 : control + f
  • 向上整頁 : control + b
  • 向下一行 : control + e
  • 向上一行 : control + y

光標定位

  • 置中 : zz
  • 行首 : zt
  • 行尾 : zb
  • 畫面頂行 : H
  • 畫面尾行 : L

跳轉行數

: {行數}
{行數} G
為什麼會有兩種方式 ?
個人認為
冒號加數字是普通模式下,一般操作比較直覺好用
數字加G則是使用在錄製巨集時,為了輸入的連貫性避免進入到其他模式,造成操作的混亂情況

查找指令

/ {查找文字}
下一個 : n
上一個 : N

光標水平移動與定位
假設已經找到目標行數了,接下來就是要使用光標的水平移動指令

水平移動指令

  • 移動到最前 : 0
  • 移動到最後 : $
  • 移動到最前(忽略空格符號) : ^
  • 移動到最後(忽略空格符號) : g_
  • 單字開頭 : w
  • 單字結尾 : e
  • 上一個單字開頭 : b
  • 單字開頭(以空格符號為基準) : W
  • 單字結尾(以空格符號為基準) : E
  • 上一個單字開頭(以空格符號為基準) : B

字符查找指令

  • 移動到字符 : f
  • 移動到字符前一格 : t
  • 反向移動到字符 : F
  • 反向移動到字符後一格 : T
  • 重複上一次的查找指令 : ;

example:
3w -> 移動三個單詞
3fa -> 移動到第三個 a 的字符
至此光標垂直與水平移動的指令,已經可以絕大多數的取代滑鼠的功能(起碼可以比滾輪的作用更加精準)

插入模式指令

要像滑鼠點擊哪裡,就可以從哪裡開始編輯一樣直覺。

光標移動指令加上插入模式 i 指令,兩個以上的組合指令,並不是一個直覺的方法。

除了 i 指令, 可以進入該模式以外,還有以下可以指定進入模式的方法

進入插入模式指令

  • 光標位置 : i (insert)
  • 光標後方 : a(append)
  • 光標下方 : o (open)
  • 取代字符 : s (substitute)
  • 取代文字 : c (change)
    取代文字 example:

cw -> 替換一個單詞
c$ -> 替換到結尾的文字
cf" -> 替換到第一個引號
大寫的指令

  • 當前的行首 : I
  • 當前的行尾 : A
  • 當前的上一行 : O
  • 取代整行文字 : S
  • 取代到行尾 : C ( 等同於 c$ )

退出插入模式

ESC
control + [

普通模式指令

普通模式要延伸補充的,是尚未歸類到上方的分類,但又不得不提非常有用的指令。

  • 刪除字元 : x
  • 刪除前一個字元 : X (普通模式的退格鍵)
  • 取代字元 : r (replace)
  • 取代模式 : R
  • 刪除單行文字 : dd
  • 拷貝單行文字 : yy
  • 貼上文字 : p
  • 光標的上方貼上文字 : P
  • 縮排 : >>
  • 反向縮排 : <<
  • 重複上一次的指令動作 : .
  • 恢復 : u (undo)
  • 重做 : control + r (redo)
  • 一次性恢復單行指令 : U

數字遞增與遞減

  • 遞增 : control + a
  • 遞減 : control + x

可视模式

v进入

  1. v+i+w 選取一個單詞,不管光標是在單詞的哪一個位置。
  2. v+a+w 选取一个单次, 同时会包含空格
    w 可替换为小括號() 中括號 [] 大括號 {} 單引號 ' 雙引號 "
  • vi) -> 選取括號內的文字
  • va" -> 选取包括引号的内容

ia 指令之前,加上數字

  • v2i) -> 選擇第二層的小括號範圍
  • vit / vat -> 指令 t 代表的是 tag

網頁 html 文件中的 xml 標籤格式:

  • vit -> 兩個標籤中的文字
  • vat -> 包含標籤的整個元素

剪贴

  • y 复制
  • p/P 粘贴
  • c 改变
  • d 删除
  • x 删除单个

大写寄存器是触发追加功能

书签功能

  • m + {reg} mark当前位置到寄存器
  • ` + {reg} 跳转到c寄存器记录的位置
    reg的大写字母表示是跨文档跳转
  • `` 代表上一个位置

宏功能

  • q + {reg} 同样reg大写表示追加
  • @ + {reg} 执行
  • @ + @ 重复上一次的执行

Others

  1. 文字的替代功能

將當前行中第一個舊的文字取代成新的文字

  • :s/{舊的文字}/{新的文字}
    s 代表 substitute
    將取代文字的動作,作用於整行文字

  • :s/{舊的文字}/{新的文字}/g
    g 代表當前一整行的範圍
    將取代文字的動作作,用於整份文件

  • :%s/{舊的文字}/{新的文字}/g
    % 表示當前的檔案

  • 搭配 大寫 V 行的選取模式

選取後 輸入冒號 (😃,下方出現這組符號 :'<,'> 輸入相同的指令 : s/oldText/newText/g
替換的文字就只會作用在選取的範圍上

  1. 提取文件內容的功能
    :r {檔案路徑}

例如 :

同目錄的 Parameter.txt 文件

:r Parameter.txt -> 不需要切換文本編輯器,就可以繼續編輯。

Vim - Live Template

搭配上一個「 文字替代指令 」(😒) ,就可以當成是 vim 編輯器的 Live Template

預先寫好許多常用的模板 :

r 指令 導入
s 指令 取代

  1. 複製指定行數
    兩種情況:
  • :{行數}t. -> 複製單行的情況
  • :{起始行數},{結束行數}t. 複製多行的情況

例如 :

:6t. -> 複製第 6 行的文字內容
:6,8t. -> 複製從第 6 到第 8 行的文字內容
使用這個指令

可以讓拷貝的動作更加精準,而且也不用光標來回移動,減少多餘且繁瑣的作業。

  1. 移動指定行數
    相似於第三個,指令格式完全相同,「 t 指令 」換成「 m 指令 」

:6m. -> 移動第 6 行的文字內容
:6,8t. -> 移動從第 6 到第 8 行的文字內容

  1. 查找檔案開啟
    搜尋當前目錄底下的檔案

:find {檔案名稱}
指令直接執行無法使用 :

因為搜索的路徑並沒有向下定位

路徑指令

  • :set path指令 -> 預設的路徑 path=.,/usr/include,,
    重新設定這個指令,在原始的路徑後方加上 **

  • :set path=.,/usr/include,,**
    再使用 find 指令,就可以找到子資料夾的文件。

配置檔案

set path 指令,在退出 vim 編輯器後會被重置, 想要這個指令持續的生效,可以在 「 ~/.vimrc」 的文件中加入。

set path=.,/usr/include,,**
如果不想要修改配置檔,折衷方案 :

:find **/{檔案名稱}
:e **/{檔案名稱}
也可以發揮相同效果。

posted @ 2021-08-26 09:12  司空亦墨  阅读(69)  评论(0编辑  收藏  举报