---
# System prepended metadata

title: vim筆記
tags: [程式學習筆記, "\_vim"]

---

# vim筆記
## 動機
就不知道在哪還是同學講了有vim這個編輯器
想當然耳vscode上面當然是有插件的阿然後再大量爬問找到了這個網站:
https://www.blog.lasai.com.tw/2020/07/05/vscode-vim-mode/?fbclid=IwAR0RoxsqMwOp9X3skdcbJbF-sgWUqasXm9YWgIl1G1rGcYzf_35OmQ8g4pk
他的設定檔在最後，抄下來之後把會衝突的或是沒有相對應檔案(我的話是問題在ICON、逗號等)改了一下就可以用了

完整影片:https://youtube.com/playlist?list=PLBd8JGCAcUAH56L2CYF7SmWJYKwHQYUDI&si=Nw2vOdTz92pReLvB
以下是我看完所有內容(除了設定)之後抄下來改的筆記
格式挺亂的 我懶得改了



Normal 模式:
:w    存檔
:q    離開
:wq	  存檔後離開
i 進入 Insert 模式

h	左
j	下
k	上
l	右

移动游标
h j k l 左下上右
w/W：往后移动一个单词，区别是 W 会跳过标点符号
b/B：往前移动一个单词，区别是 B 会跳过标点符号
{：移动到上一个段落
}：移动到下一个段落
gg：移动到整个文件的第一行
G：移动到整个文件的最后一行
0：移动到行首
$：移动到行尾
^：移动到当前行第一个字符处
gk：往上一行（当一行被编辑器软换行）
gj：往下一行（当一行被编辑器软换行）

搜索

- / ：向后搜索 
  n：查找下一个 N：查找上一个
- * ： 向后搜寻目前游标所在的关键字，如果存在，光标会跳转到该关键字下一次出现的地方
  n：查找下一个 N：查找上一个


- ? ：向前搜索
  n：查找 上一个 N：查找下一个
- # 向前搜寻目前游标所在关键字，如果存在，光标会跳转到该关键字上一次出现的地方
  n：查找上一个 N：查找下一个

- %s/欲被取代/取代物/g(代表global)
- %s/欲被取代/取代物/gc(代表global+check(確定要刪嗎))



- 行内查找字符上一次/下一次出现的位置： f/F
  fx:向后搜寻同一行最近的x
  Fx:向前搜寻同一行最近的x
  

zz ：将光标所在行拉至屏幕中央  
zt ：将光标所在行拉至屏幕顶部  (t:top)
zb ：将光标所在行拉至屏幕底部  (b:buttom)

选取

v ：进入visual模式进行选取
V：选取光标所在整行
v0/v^ ：选取光标所在处到行首，区别在于 ^ 是选取到首个字符处  
v$ ：选取光标处到行尾  
vgg：选取光标处到文件第一个字符  
vG ：选取光标处到文件最后一个字符  
vfa ：选取光标处到当前行下一个a处  
vFa：选取光标处到当前行上一个a处  
v{ ：选取光标处到段落开头  
v} ：选取光标处到段落尾  
ctrl+v ：选取块

yank 复制

y ：复制所选部分到寄存器  
Y/yy ：复制当前行到寄存器  
2yy ：复制从当前行往下2行  
y0/y^ ：从光标处复制到当前行行首，光标置为行首  
y$ ：从光标处复制到当前行行尾  
yfa ：从光标处复制到当前行下一个a处  
yFa ：从光标处复制到当前行上一个a处  
yG ：从当前行复制到文件尾部
ygg ：从当前行复制到文件首部  
"ay ：将所选部分复制到a寄存器(寄存器a-z都可以使用)

## paste 粘贴

p ：从光标处向后粘贴(如果复制的是整行，会贴在光标所在行的下面)  
P：从光标处向后粘贴(如果复制的是整行，会贴在光标所在行的上面)  
"ap：将a寄存器的内容粘贴

u	復原
<Ctrl-r>	重作

I	將游標移動到行首並進入到 Insert 模式
A	將游標移動到行尾並進入到 Insert 模式
o	將游標下方加一行並進入到 Insert 模式
O	將游標上方加一行並進入到 Insert 模式
x	在
	Normal 模式刪除當前游標位置的字元
	Visual 模式刪除選取的字元
	且刪除後的內容會被放到暫存器
d	在 Visual 模式刪除選取的字元 (刪除後的內容會被放到暫存器=>有複製+刪除效果)
D	刪除游標位置和同一行以後的所有字元 (刪除後的內容會被放到暫存器)
dd	刪除游標位置的那一整行
dgg	刪除游標以上的所有內容(包含游標所在的那一行)
dG	刪除游標以下的所有內容(包含游標所在的那一行)
c	用法與 d 相同，只是執行完後會進入 Insert 模式
r	換掉游標該處的字元(replace)
>>	增加該行縮排
<<	減少該行縮排
:set shiftwidth=2	將縮排的大小設為兩字元(僅有改變 << 和 >> 的行為)
3>>	將游標所在處的那一行和下面的兩行增加縮排
=	將選取的地方進行自動縮排.


Vim內
	:e 檔名		在vim內開啟檔案
	:tabe (可加黨名)新增頁籤
	gt		切換到下一個頁籤
	gT		切換到上一個頁籤
	:new		新增水平視窗
	:vnew		新增垂直視窗
	<Ctrl-w>w	切換視窗
	<Ctrl-w>h j k l	切換到目前視窗 左 下 上 右邊 的視窗
	:edit 檔名	關閉當前檔案並開啟其他檔案
	:close		關閉當前視窗
	:only		只保留當前視窗
		
命令提示字元中
	vim 檔名	利用 Vim 開啟檔案
	vim -o 多個檔名	利用 Vim 開啟多個檔案，每個檔案利用水平視窗分割
	vim -O 多個檔名	利用 Vim 開啟多個檔案，每個檔案利用垂直視窗分割
	vim -p 檔名	利用 Vim 開啟多個檔案，每個檔案利用頁籤顯示


buffer:資料保存
window:展示資料
tab:排版布局
(Vsvim不支持buffer(sad))
Vim內
	:ls	列出現在所有的 buffer
	<Ctrl-6>	兩個buffer交替切換
	:b2	切換到第二個 buffer
	:b 部分檔名	切換到符合檔案名稱的檔案
	:bn	切換到下一個 buffer
	:bp	切換到上一個 buffer
	:bf	切換到第一個 buffer
	:bl	切換到最後一個 buffer
	:bd	關閉目前所在的 buffer
	:tab ba	把全部的 buffer 以頁籤的形式顯示
命令提示字元中
	vim 檔名	利用 Vim 開啟檔案
	vim -o 多個檔名	利用 Vim 開啟多個檔案，每個檔案利用水平視窗分割
	vim -O 多個檔名	利用 Vim 開啟多個檔案，每個檔案利用垂直視窗分割
	vim 多個檔名	利用 Vim 開啟多個檔案，透過切換buffer來編輯每個檔案


V	切換到 Visual Line 模式 (一次選取整行)
<Ctrl-v>切換到 Visual Block 模式 
(一次選取一個區塊)(可以用在比如說在開頭切I然後加上同一個符號)
I	在
	Visual Block 模式一次編輯多行
	Normal 模式將游標移動到行首並進入到 Insert 模式
i	Visual Block 模式 inner
a	Visual Block 模式 around
viw	選取一個 word
vit	選取一個 tag 中的內容
diw	刪除一個 word
ciw	刪除一個 word 並進入 Insert 模式
vi"	選取在兩個雙引號間的內容
vi{	選取一個區塊中游標之後的內容
	選取被兩個大括號包住的內容
vi}	選取一個區塊中游標之後的內容
	選取被兩個大括號包住的內容
va"	選取在兩個雙引號間的內容(包含雙引號)



名詞:

w=>word
s=>sentance
p=>paragraph
t=>tag
其他成對的符號:
"
{
[
(
<


動詞:
y=>yank
p=>paste
d=>delete
c=>change
v=>visual

範圍:
i=>inner
a=>around

量詞:數字

組合:動詞+(量詞)+(範圍)+名詞


^	移動到當前行的第一個字符處(忽略tab)(比0好用)
數字G	跑到第<num>行
:set nu	顯示行號
:set nonu	隱沒行號
:數字	移動到指定行
<Ctrl-f>	移動到下一頁
<Ctrl-b>	移動到上一頁

zf	將被選取的數行摺疊成一行
zd	展開被摺疊的數行
(以上兩個在VSVIM中因為定義不同無法作用:他摺疊的是行但vscode的折疊span式)

需使用
zM	摺疊
zR	反摺疊

~	將游標當前的字符或選取的字符進行大小寫互換
.	重複先前做的一連串動作
J	將下面一行合併到游標所在行，或將選取的數行全部併成一行
<Ctrl-w>	在 Inset 模式刪除游標前的一個 word (終端機也適用)(cmd不可)
<Ctrl-u>	在 Inset 模式刪除該行游標前的所有內容 (終端機也適用)(cmd不可)


:!指令	執行終端機指令，並在執行完以後回到當前編輯畫面(不可用)
:h關鍵字	查詢相關說明(不可用)

巨集(macro)
q暫儲器	開始錄製
@暫儲器	播放巨集(前可加量詞 量詞可以過大他就只會做到底)
@@	播放上次播放的巨集
:reg (暫存器)	顯示所有(或指定)暫存器內容
<Ctrl-a>	遞增號碼
<Crtl-x>	遞減號碼


資源:
- Vim 官方文件 https://www.vim.org/docs.php
- Learn VimScript the Hard Way http://learnvimscriptthehardway.steve...
- Practical Vim https://pragprog.com/book/dnvim2/prac...
- Vimium https://chrome.google.com/webstore/de...
- VimGolf https://www.vimgolf.com