Vim 備忘單

2021-08-30 16:12 更新
inner / aroundinner / aroundVim 8.2 快速參考備忘單的有用集合,可幫助您更快地學(xué)習(xí) vim 編輯器。

開(kāi)始

運(yùn)動(dòng)圖

▼/? Cursor   ▽/? Target

左右動(dòng)作

┌───────────── |      
├───────────── 0      $ ──────────────┐ 
│  ┌────────── ^      fe ────────┐    │
│  │  ┌─────── Fo     te ───────┐│    │
│  │  │┌────── To     30| ───┐  ││    │
│  │  ││ ┌──── ge     w ───┐ │  ││    │
│  │  ││ │ ┌── b      e ─┐ │ │  ││    │
│  │  ││ │ │  ┌h      l┐ │ │ │  ││    │
▽  ▽  ▽▽ ▽ ▽  ▽▼      ▼▽ ▽ ▽ ▽  ▽▽    ▽
   echo "A cheatsheet from quickref.me"

上下動(dòng)作

                 - SCREEN 1 START
   ┌─┬─────────? #!/usr/bin/python
   │ │     ┌───?     
   │ │     │     print("Hello")
   │ │     { } ? print("Vim")
   │ │       │   print("!")
   │ │       └─?    
   │ │ ┌───┬───? print("Welcome")
G gg H M L k j ? print("to")
│        │   └─? print("quickref.me")
│        │       print("/vim")
│        │     
│        └─────? 
│                - SCREEN 1 END
└──────────────? print("SCREEN 2")

快捷鍵大全

h | j | k | l 方向鍵
<C-u> / <C-d> 上/下半頁(yè)
<C-b> / <C-f> 向上/向下翻頁(yè)

b / w 上一個(gè)/下一個(gè)單詞
ge / e 上一個(gè)/下一個(gè)詞尾

0 (零) / $ 行開(kāi)始/結(jié)束
^ 行首(非空白)

特點(diǎn)

Fe / fe 移至上一個(gè)/下一個(gè) e
To / to 在上一個(gè)/下一個(gè)之前/之后移動(dòng) o
| / n| 轉(zhuǎn)到第一/n第列

文檔

gg / G 第一行/最后一行
:n | nG 去線 n
} / { 下一個(gè)/上一個(gè)空行

窗口

H / M / L 上/中/下屏幕
zt / zz / zb 這條線的頂部/中心/底部

插入模式

i / a 在光標(biāo)前/后插入
I / A 插入行首/行尾
o / O (字母) 在下方/上方插入新行
s / S 刪除字符/行并插入
C 更改為行尾
gi 在最后一個(gè)插入點(diǎn)插入
Esc | <C-[> 退出插入模式

保存和退出

:w 節(jié)省
:q 關(guān)閉文件
:wq | :x | ZZ 保存并退出
:wqa 保存并退出所有文件
:q! | ZQ 強(qiáng)制退出
:qa 關(guān)閉所有文件
:qa! 強(qiáng)制退出所有文件
:w new.txt 寫(xiě)給 new.txt
:sav new.txt 保存和編輯 new.txt
:w !sudo tee % 寫(xiě)入只讀文件

正常模式

r 替換一個(gè)字符
R 進(jìn)入替換模式
u / 3u 撤消更改1/3次數(shù)
U 在一行上撤消更改
J 加入下一行
<C-r> / 5<C-r> 重做更改1/5次數(shù)

剪切和粘貼

x 刪除字符(剪切)
p / P 粘貼之后/之前
xp 交換兩個(gè)字符
D 刪除到行尾(剪切)
dw 刪除單詞(剪切)
dd 刪除線(剪切)
ddp 交換兩行
yy 揚(yáng)克線(復(fù)?。?/font>
"*p | "+p 從系統(tǒng)剪貼板粘貼
"*y | "+y 粘貼到系統(tǒng)剪貼板

在視覺(jué)模式

d | x 刪除選擇 (剪切)
s 替換選擇
y Yank 選擇(復(fù)制)

重復(fù)

. 重復(fù)上一個(gè)命令
; 重復(fù)最近的f, t,FT
, 重復(fù)上次的f,tFT逆轉(zhuǎn)
& 最后重復(fù) :s
@: 重復(fù)命令行命令

視覺(jué)模式

v 進(jìn)入視覺(jué)模式
V 進(jìn)入視線模式
<C-v> 進(jìn)入視覺(jué)塊模式
ggVG 選擇所有文本
> / < 向右/向左移動(dòng)文本

qi 錄制宏 i
q 停止錄制宏
@i 運(yùn)行宏 i
7@i 運(yùn)行宏i7 次
@@ 重復(fù)上一個(gè)宏

Vim 操作符

用法

d ?w?
Operator(操作符)
Motion(動(dòng)作)

結(jié)合操作符動(dòng)作來(lái)使用它們

可用的運(yùn)算符

d 刪除
y 揚(yáng)克(復(fù)制)
c 更改(刪除然后插入)
p 粘貼
= 格式代碼
g~ 切換案例
gU 大寫(xiě)
gu 小寫(xiě)
> 縮進(jìn)權(quán)
< 向左縮進(jìn)
! 通過(guò)外部程序過(guò)濾

例子

?dd? 刪除當(dāng)前行
?dj? 刪除兩行
?dw? 刪除到下一個(gè)單詞
?db? 刪除到詞首
?dfa? 刪除直到a字符
?d/hello? 刪除直到 hello
?cc? 更改當(dāng)前行
?yy? 復(fù)制當(dāng)前行
?>j? 縮進(jìn) 2 行
?ggdG? 刪除一個(gè)完整的文檔
?gg=G? 縮進(jìn)完整的文檔
?ggyG? 復(fù)制整個(gè)文檔

計(jì)數(shù)

[count] <operator> <motion>
<operator> [count] <motion>

?2dd? 刪除2
?6yy? 復(fù)制6
?d3w? 刪除3單詞
?d5j? 5向下刪除
?>4k? 4向上縮進(jìn)

Vim 文本對(duì)象

用法

v         i / a p
Operator(操作符)
inner / around
Text object(文本對(duì)象)

在文本塊內(nèi)部或周圍使用運(yùn)算符操作

文本對(duì)象

?p?
段落
?w?
單詞
?W?
WORD
(由空格包圍)
?s?
句子
?[ ( { <? []、() 或 {} 塊
?] ) } >? []、() 或 {} 塊
?' `? 帶引號(hào)的字符串
?b? 一個(gè)塊 [(
?B? [{ 中的一個(gè)塊
?t? 一個(gè) HTML 標(biāo)簽塊

:help text-objects

刪除

???diw???
刪除內(nèi)詞
??dis??
刪除內(nèi)句
??di?"?
在引號(hào)中刪除
??da?"?
在引號(hào)中刪除(包括引號(hào))
??dip??
刪除一個(gè)段落

選擇

??v?i? 選擇內(nèi)引號(hào)“ ...
?va? 選擇引號(hào) "..."
?vi[? 選擇內(nèi)括號(hào) [ ...]
?va[? 選擇括號(hào) [...]
viw 選擇內(nèi)詞
vip 選擇內(nèi)部段落
vipip 選擇更多段落

雜項(xiàng)

ciw 改變內(nèi)在的話
??ci?? 更改內(nèi)部引號(hào)
cit 更改內(nèi)部標(biāo)簽 (HTML)
cip 更改內(nèi)部段落
yip 拉取內(nèi)段
ysp Yank 段落(包括換行符)

Vim 多個(gè)文件

緩沖器

:e file 在新緩沖區(qū)中編輯文件
:bn 轉(zhuǎn)到下一個(gè)緩沖區(qū)
:bp 轉(zhuǎn)到上一個(gè)緩沖區(qū)
:bd 從緩沖區(qū)列表中刪除文件
:b 5 打開(kāi)緩沖區(qū) #5
:b file 按文件轉(zhuǎn)到緩沖區(qū)
:ls 列出所有打開(kāi)的緩沖區(qū)
:sp file 打開(kāi)和拆分窗口
:vs file 打開(kāi)和垂直拆分窗口
:hid 隱藏此緩沖區(qū)
:wn 寫(xiě)入文件并移至下一個(gè)
:tab ba 將所有緩沖區(qū)編輯為選項(xiàng)卡

窗口

<C-w> s 拆分窗口
<C-w> v 垂直拆分窗口
<C-w> w 切換窗口
<C-w> q 退出窗口
<C-w> T 進(jìn)入新標(biāo)簽頁(yè)
<C-w> x 與下一個(gè)交換當(dāng)前
<C-w> - / + 降低/增加高度
<C-w> < / > 減少/增加寬度
<C-w> | 最大寬度
<C-w> = 同樣高寬
<C-w> h / l 轉(zhuǎn)到左/右窗口
<C-w> j / k 轉(zhuǎn)到上/下窗口

標(biāo)簽

:tabe [file] 在新選項(xiàng)卡中編輯文件
:tabf [file] 如果在新選項(xiàng)卡中存在則打開(kāi)
:tabc 關(guān)閉當(dāng)前標(biāo)簽
:tabo 關(guān)閉其他標(biāo)簽
:tabs 列出所有標(biāo)簽
:tabr 轉(zhuǎn)到第一個(gè)選項(xiàng)卡
:tabl 轉(zhuǎn)到最后一個(gè)選項(xiàng)卡
:tabm 0 移動(dòng)到位置 0
:tabn 前往下一個(gè)標(biāo)簽
:tabp 前往上一個(gè)標(biāo)簽    

正常模式

gt 前往下一個(gè)標(biāo)簽
gT 前往上一個(gè)表親啊
2gt 前往編號(hào)為 2的標(biāo)簽

Vim 搜索和替換

/foo 向前搜索
/foo\c 向前搜索(不區(qū)分大小寫(xiě))
?foo 向后搜索
/\v\d+ 使用正則表達(dá)式搜索
n 下一個(gè)匹配的搜索模式
N 上一場(chǎng)匹配
* 向前搜索當(dāng)前詞
# 向后搜索當(dāng)前詞

換行

:[range]s/{pattern}/{str}/[flags]
:s/old/new 先更換
:s/old/new/g 全部替換
:s/\vold/new/g 全部替換為正則表達(dá)式
:s/old/new/gc 全部替換(確認(rèn))
:s/old/new/i 先忽略大小寫(xiě)替換
:2,6s/old/new/g 在行之間替換2-6

#替換文件

:%s/{pattern}/{str}/[flags]
:%s/old/new 先更換
:%s/old/new/g 全部替換
:%s/old/new/gc 全部替換(確認(rèn))
:%s/old/new/gi 全部替換(忽略大小寫(xiě))
:%s/\vold/new/g 全部替換為正則表達(dá)式

范圍

% 整個(gè)文件
’<,’> 當(dāng)前選擇
5 5
5,10 510
$ 最后一行
2,$ 2到最后
. 當(dāng)前線路
,3 下一3
-3, 前鋒3

全局命令

:[range]g/{pattern}/[command]

:g/foo/d 刪除包含的行 foo
:g!/foo/d 刪除不包含的行 foo
:g/^\s*$/d 刪除所有空行
:g/foo/t$ 復(fù)制包含foo到 EOF 的行
:g/foo/m$ 移動(dòng)包含foo到 EOF 的行
:g/^/m0 反轉(zhuǎn)文件
:g/^/t. 復(fù)制每一行

Inverse :g

:[range]v/{pattern}/[command]
:v/foo/d 刪除不包含foo
(也:g!/foo/d)的行

Flags

g 替換所有出現(xiàn)
i 忽略大小寫(xiě)
I 不要忽略大小寫(xiě)
c 確認(rèn)每次替換

替換表達(dá)式(魔術(shù))

& | \0 替換為整個(gè)匹配
\1...\9 替換為 0-9 組
\u 大寫(xiě)下一個(gè)字母
\U 大寫(xiě)以下字符
\l 小寫(xiě)下一個(gè)字母
\L 小寫(xiě)以下字符
\e 結(jié)束\u, \U,\l\L
\E 結(jié)束\u, \U,\l\L

例子

:s/a\|b/xxx\0xxx/g		         # Modifies "a b"      to "xxxaxxx xxxbxxx"
:s/test/\U& file/                # Modifies "test"     to "TEST FILE"
:s/\(test\)/\U\1\e file/         # Modifies "test"     to "TEST file"
:s/\v([abc])([efg])/\2\1/g	     # Modifies "af fa bg" to "fa fa gb"
:s/\v\w+/\u\0/g		             # Modifies "bla bla"  to "Bla Bla"
:s/\v([ab])|([cd])/\1x/g         # Modifies "a b c d"  to "ax bx x x"
:%s/.*/\L&/                      # Modifies "HTML"     to "html"
:s/\v<(.)(\w*)/\u\1\L\2/g        # Make every first letter of a word uppercase
:%s/^\(.*\)\n\1/\1/              # Remove duplicate lines
:%s/<\/\=\(\w\+\)\>/\U&/g        # Convert HTML-Tags to uppercase
:g/^pattern/s/$/mytext           # Find and append text to the end
:g/pattern/norm! @i              # Run a macro on matching lines
/^\(.*\)\(\r\?\n\1\)\+$          # View the duplicates lines
/\v^(.*)(\r?\n\1)+$              # View the duplicates lines (very magic)
:v/./,/./-j                      # Compress blank lines into a blank line
:g/<p1>/,/<p2>/d                 # Delete inclusively from <p1> to <p2>

Vimdiff

用法


$ vimdiff file1 file2 [file3]
$ vim -d file1 file2 [file3]

編輯

:[range]diffget [bufspec]
:[range]diffput [bufspec]

do / :diffget 獲得(get)差異
dp / :diffput 區(qū)分差異
:dif 重新掃描差異
:diffo 關(guān)閉差異模式
:1,$+1diffget 獲取所有差異
ZQ 退出而不改變

請(qǐng)參閱:范圍

折疊

zo / zO 打開(kāi)
zc / zC 關(guān)閉
za / zA 切換
zv 為這條線打開(kāi)折疊
zM 關(guān)閉所有
zR 全部打開(kāi)
zm 折疊更多(foldlevel += 1)
zr 減少折疊(foldlevel -= 1)
zx 更新折疊

跳躍

]c 下一個(gè)區(qū)別
[c 以前的區(qū)別

其他

案件

vU 大寫(xiě)字符
vu 小寫(xiě)字符
~ 切換大小寫(xiě)字符
viw U 大寫(xiě)單詞
viw u 小寫(xiě)單詞
viw ~ 切換大小寫(xiě)單詞
VU / gUU 大寫(xiě)
Vu / guu 小寫(xiě)
V~ / g~~ 切換案例
gggUG 大寫(xiě)所有文本
ggguG 小寫(xiě)所有文本
ggg~G 切換大小寫(xiě) 所有文本

跳躍

<C-o> 返回上一個(gè)
<C-i> 直走
gf 轉(zhuǎn)到光標(biāo)中的文件
ga 顯示十六進(jìn)制、ASCII 值

其他命令行

:h 幫助 打開(kāi)幫助視圖
:edit! 重新加載當(dāng)前文件
:2,8m0 移動(dòng)線2-80
:noh 清除搜索亮點(diǎn)
:sort 排序線
:ter 打開(kāi)終端窗口
:set paste 啟用插入粘貼子模式
:set nopaste 禁用插入粘貼子模式
:cq 出現(xiàn)錯(cuò)誤退出
(中止 Git)
% 最近/匹配 {[()]}
[( | [{ | [< 上一個(gè)(,{<
]) | ]{ | ]> 下一個(gè)),}>
[m 上一個(gè)方法開(kāi)始
[M 上一個(gè)方法結(jié)束

柜臺(tái)

<C-a> 增加數(shù)量
<C-x> 減少數(shù)量

標(biāo)簽

:tag Classname 跳轉(zhuǎn)到 Classname 的第一個(gè)定義
<C-]> 跳轉(zhuǎn)到定義
g] 查看所有定義
<C-t> 返回上一個(gè)標(biāo)簽
<C-o> <C-i> 后退前進(jìn)
:tselect Classname 查找 Classname 的定義
:tjump Classname 查找類名的定義(自動(dòng)選擇第一個(gè))

格式化

:ce 8 8之間的中心線
:ri 4 4處右對(duì)齊行
:le 左對(duì)齊線

:help formatting

分?jǐn)?shù)

`^ 插入模式下光標(biāo)的最后位置
`. 當(dāng)前緩沖區(qū)的最后更改
`" 最后退出的當(dāng)前緩沖區(qū)
`0 在上次編輯的文件中
'' 返回當(dāng)前緩沖區(qū)中跳轉(zhuǎn)的行
`` 返回當(dāng)前緩沖區(qū)中跳轉(zhuǎn)的位置
`[ 到先前更改或猛拉的文本的開(kāi)頭
`] 結(jié)束先前更改或猛拉的文本
`< 到最后一個(gè)視覺(jué)選擇的開(kāi)始
`> 到最后一個(gè)視覺(jué)選擇結(jié)束
ma 將此光標(biāo)位置標(biāo)記為 a
`a 跳轉(zhuǎn)到光標(biāo)位置 a
'a 跳到帶有位置的行的開(kāi)頭 a
d'a 從當(dāng)前行刪除到標(biāo)記行 a
d`a 從當(dāng)前位置刪除到標(biāo)記位置 a
c'a 將文本從當(dāng)前行更改為 a
y`a 將文本從當(dāng)前位置拉到 a
:marks 列出所有當(dāng)前標(biāo)記
:delm a 刪除標(biāo)記 a
:delm a-d 刪除標(biāo)記a, b, c,d
:delm abc 刪除標(biāo)記a, b,c

計(jì)算器

<C-r> = 7*7 顯示結(jié)果
<C-r> = 10/2 顯示結(jié)果

在 INSERT 模式下執(zhí)行此操作

shell

:!<shell> 解釋 Shell 命令
:r!<shell> 讀入 shell 的輸出
:r!date 插入日期
:!!date 用日期替換當(dāng)前行

命令行

<C-r><C-w> 將當(dāng)前單詞插入命令行
<C-r>" 從“注冊(cè)”粘貼
<C-x><C-f> 在插入模式下自動(dòng)完成路徑

技巧

刪除重復(fù)行

:sort | %!uniq -u

對(duì)文件中的行進(jìn)行編號(hào)

:%!cat -n

將整個(gè)文檔復(fù)制到剪貼板

:%w !pbcopy            # Mac OS X
:%w !xclip -i -sel c   # GNU/Linux
:%w !xsel -i -b        # GNU/Linux

另見(jiàn)


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)