Vim 備忘單

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

開始

運動圖

▼/? Cursor   ▽/? Target

左右動作

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

上下動作

                 - 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> 上/下半頁
<C-b> / <C-f> 向上/向下翻頁

b / w 上一個/下一個單詞
ge / e 上一個/下一個詞尾

0 (零) / $ 行開始/結束
^ 行首(非空白)

特點

Fe / fe 移至上一個/下一個 e
To / to 在上一個/下一個之前/之后移動 o
| / n| 轉到第一/n第列

文檔

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

窗口

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

插入模式

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

保存和退出

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

正常模式

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

剪切和粘貼

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

在視覺模式

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

重復

. 重復上一個命令
; 重復最近的f, t,FT
, 重復上次的ft,FT逆轉
& 最后重復 :s
@: 重復命令行命令

視覺模式

v 進入視覺模式
V 進入視線模式
<C-v> 進入視覺塊模式
ggVG 選擇所有文本
> / < 向右/向左移動文本

qi 錄制宏 i
q 停止錄制宏
@i 運行宏 i
7@i 運行宏i7 次
@@ 重復上一個宏

Vim 操作符

用法

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

結合操作符動作來使用它們

可用的運算符

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

例子

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

計數(shù)

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

?2dd? 刪除2
?6yy? 復制6
?d3w? 刪除3單詞
?d5j? 5向下刪除
?>4k? 4向上縮進

Vim 文本對象

用法

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

在文本塊內部或周圍使用運算符操作

文本對象

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

:help text-objects

刪除

???diw???
刪除內詞
??dis??
刪除內句
??di?"?
在引號中刪除
??da?"?
在引號中刪除(包括引號)
??dip??
刪除一個段落

選擇

??v?i? 選擇內引號“ ...
?va? 選擇引號 "..."
?vi[? 選擇內括號 [ ...]
?va[? 選擇括號 [...]
viw 選擇內詞
vip 選擇內部段落
vipip 選擇更多段落

雜項

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

Vim 多個文件

緩沖器

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

窗口

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

標簽

:tabe [file] 在新選項卡中編輯文件
:tabf [file] 如果在新選項卡中存在則打開
:tabc 關閉當前標簽
:tabo 關閉其他標簽
:tabs 列出所有標簽
:tabr 轉到第一個選項卡
:tabl 轉到最后一個選項卡
:tabm 0 移動到位置 0
:tabn 前往下一個標簽
:tabp 前往上一個標簽    

正常模式

gt 前往下一個標簽
gT 前往上一個表親啊
2gt 前往編號為 2的標簽

Vim 搜索和替換

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

換行

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

#替換文件

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

范圍

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

全局命令

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

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

Inverse :g

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

Flags

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

替換表達式(魔術)

& | \0 替換為整個匹配
\1...\9 替換為 0-9 組
\u 大寫下一個字母
\U 大寫以下字符
\l 小寫下一個字母
\L 小寫以下字符
\e 結束\u, \U,\l\L
\E 結束\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 關閉差異模式
:1,$+1diffget 獲取所有差異
ZQ 退出而不改變

請參閱:范圍

折疊

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

跳躍

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

其他

案件

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

跳躍

<C-o> 返回上一個
<C-i> 直走
gf 轉到光標中的文件
ga 顯示十六進制、ASCII 值

其他命令行

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

柜臺

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

標簽

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

格式化

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

:help formatting

分數(shù)

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

計算器

<C-r> = 7*7 顯示結果
<C-r> = 10/2 顯示結果

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

shell

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

命令行

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

技巧

刪除重復行

:sort | %!uniq -u

對文件中的行進行編號

:%!cat -n

將整個文檔復制到剪貼板

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

另見


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號