VIM技巧-基础
-
Inert a shell command output
:[n]r! command
insert at nth line
:r! command
insert at current line -
Session
mksession
-
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进入
v
+i
+w
選取一個單詞,不管光標是在單詞的哪一個位置。v
+a
+w
选取一个单次, 同时会包含空格
w
可替换为小括號()
中括號[]
大括號{}
單引號'
雙引號"
vi)
-> 選取括號內的文字va"
-> 选取包括引号的内容
i
與 a
指令之前,加上數字
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
- 文字的替代功能
將當前行中第一個舊的文字取代成新的文字
-
:s/{舊的文字}/{新的文字}
s
代表 substitute
將取代文字的動作,作用於整行文字 -
:s/{舊的文字}/{新的文字}/g
g
代表當前一整行的範圍
將取代文字的動作作,用於整份文件 -
:%s/{舊的文字}/{新的文字}/g
%
表示當前的檔案 -
搭配 大寫 V 行的選取模式
選取後 輸入冒號 (😃,下方出現這組符號 :'<,'>
輸入相同的指令 : s/oldText/newText/g
替換的文字就只會作用在選取的範圍上
- 提取文件內容的功能
:r {檔案路徑}
例如 :
同目錄的 Parameter.txt 文件
:r Parameter.txt
-> 不需要切換文本編輯器,就可以繼續編輯。
Vim - Live Template
搭配上一個「 文字替代指令 」(😒) ,就可以當成是 vim 編輯器的 Live Template
預先寫好許多常用的模板 :
r 指令 導入
s 指令 取代
- 複製指定行數
兩種情況:
:{行數}t.
-> 複製單行的情況:{起始行數},{結束行數}t.
複製多行的情況
例如 :
:6t.
-> 複製第 6 行的文字內容
:6,8t.
-> 複製從第 6 到第 8 行的文字內容
使用這個指令
可以讓拷貝的動作更加精準,而且也不用光標來回移動,減少多餘且繁瑣的作業。
- 移動指定行數
相似於第三個,指令格式完全相同,「 t 指令 」換成「 m 指令 」
:6m.
-> 移動第 6 行的文字內容
:6,8t.
-> 移動從第 6 到第 8 行的文字內容
- 查找檔案開啟
搜尋當前目錄底下的檔案
:find {檔案名稱}
指令直接執行無法使用 :
因為搜索的路徑並沒有向下定位
路徑指令
-
:set path
指令 -> 預設的路徑path=.,/usr/include,,
重新設定這個指令,在原始的路徑後方加上**
-
:set path=.,/usr/include,,**
再使用 find 指令,就可以找到子資料夾的文件。
配置檔案
set path 指令,在退出 vim 編輯器後會被重置, 想要這個指令持續的生效,可以在 「 ~/.vimrc」 的文件中加入。
set path=.,/usr/include,,**
如果不想要修改配置檔,折衷方案 :
:find **/{檔案名稱}
:e **/{檔案名稱}
也可以發揮相同效果。