天天看點

Vim入門技巧&常用指令整理

Vim入門技巧&常用指令整理

  • ​​1.搭建實驗環境​​
  • ​​1.1 直接使用CentOS系統​​
  • ​​1.2Windows版本安裝教程​​
  • ​​2.常用系統指令​​
  • ​​3.vim編輯檔案​​
  • ​​4.常用vimrc配置​​
  • ​​5.常用vim操作符​​
  • ​​6.常用vim指令-普通模式​​
  • ​​7.常用vim指令-插入模式​​
  • ​​8.常用vim指令-可視模式​​
  • ​​9.常用vim指令-指令行模式​​

書籍:《Vim實用技巧》(第2版)

ISBN: 9787115427861

作者:[英] Drew Neil

譯者:楊源 車文隆

頁數:289頁

閱讀時間:2020-04-05

推薦指數:★★★★★

操作環境:CentOS7.7

vim :7.4.629

Windows下載下傳位址:​​​https://github.com/vim/vim-win32-installer/releases/download/v8.2.0381/gvim_8.2.0381_x64.exe​​​ github官網:​​https://github.com/vim/​​ 示範代碼或檔案:​​https://pragprog.com/titles/dnvim/source_code​​​

​幫你自動完成重複的工作!​

​​

​入門隻需一分鐘,窮其一生才能達到精通.​

​​

​隻做一件事,并做到極緻​

​—UNIX哲學

初時,先有ed,ed為ex之父,ex為vi之父,vi為Vim之父

1.搭建實驗環境

1.1 直接使用CentOS系統

Vim入門技巧&常用指令整理

然後輸入​​

​vim​

​​會進入vim,并顯示一下資訊。

Vim入門技巧&常用指令整理

1.2Windows版本安裝教程

2.常用系統指令

指令 說明
vim --version 輸出vim基本資訊
vim -u NONE -N -u NONE不加載vimrc,-N會使能“nocompatible”選項,防止進入vi相容模式
vim -u cod/essential.vim 取代你的vimrc檔案
vim 檔案名/檔案路徑 vim打開了你後面跟的檔案,如果沒有就會建立這個檔案

3.vim編輯檔案

vim jack.txt
Vim入門技巧&常用指令整理
首先會進入普通模式
Vim入門技巧&常用指令整理
按​

​i​

​​進入插入模式

然後輸入要編輯的内容

Vim入門技巧&常用指令整理
1.按​

​ESC​

​​退出插入模式

2.按 ​​

​:​

​​進入指令行模式

3.輸入​​

​wq​

​指令回車,儲存并退出
Vim入門技巧&常用指令整理

4.常用vimrc配置

windows版本在安裝目錄下​

​D:\Program Files\Vim\_vimrc​

​​檔案

linux在​​

​/etc/vim/vimrc​

​修改全局檔案
" tab設定空格數
set tabstop=4    
" 退回tab的空格數
set softtabstop=4
" 每一級縮進的長度
set shiftwidth=4
" 用制表符表示一個縮進
set noexpandtab
" 顯示行号
set nu
" 自動縮進
set autoindent
" C語言自動縮進
set cindent
" 設定保留曆史指令條數
set history=200
" 全局設定忽略查找大小寫
set ignorecase
" 全局設定智能大小寫
set smartcase      

5.常用vim操作符

操作符 + 動作指令 = 操作

操作符重複兩次時會作用于目前行。

操作符 說明
c 修改
d 删除
y 複制到寄存器
g~ 反轉大小寫
gu 轉換為小寫
gU 轉換為大寫, ​

​gUU​

​作用于目前行
> 增加縮進
< 減小縮進
= 自動縮進
! 使用外部程式過濾{motion}所跨越的行

6.常用vim指令-普通模式

單詞:由​

​數字​

​​/​

​字母​

​​/​

​下劃線​

​​/​

​.​

​​ ​

​'​

​​組成

字串:非空字元組成`

指令 說明
. 重複上次的操作:[普通模式,插入模式)&& [插入模式,ESC]
* 比對目前光标單詞,并查找
/pattern + 回車 文檔中查找下一處比對項 ,​

​n​

​​下一個,​

​N​

​上一個
?pattern + 回車 文檔中查找上一處比對項,​

​n​

​​下一個,​

​N​

​上一個
: [range]s[ubstitute]/target/replacement/[flags] 查找 替換,​

​&​

​​下一個,​

​u​

​​撤銷,最後标志位​

​g​

​​代表全局,​

​c​

​​代表需确認,​

​n​

​​代表不執行替換僅報告比對次數​

​&​

​上一個标志位
:%s/target/replacement/g 查找替換全部,​

​u​

​​撤銷.​

​:%s///gn​

​上次查找字元的個數
"% 目前檔案名
"# 輪換檔案名
". 上次插入文本
": 上次執行Ex指令
/ 上次查找模式
/\c 忽略大小寫查找
/\C 強制大小寫查找
/\v very magic模式查找,一般查找需要用​

​\​

​​轉義​

​(]{​

​ .這個模式不需要
/\V 原義查找,特殊字元不需要轉義
/\v<單詞> 完整單詞比對
"0P 黏貼第一次複制寄存器内容
"_diw 黑洞寄存器
"+p 将系統 粘貼闆内容複制到目前位置,插入模式用​

​Ctrl​

​​+​

​r​

​​+​

​+​

`` 目前檔案上次跳轉動作之前的位置
`{letter} 跳轉到指定标記(小寫字母是本文檔,大寫字母是全局)
`. 上次修改的地方
`^ 上次插入的地方
`[ 上次修改或複制的起始位置
`] 上次修改或複制的結束位置
`< 上次高亮的起始位置
`> 上次高亮的結束位置
% 允許在一組開閉括号之間跳轉
光标移動到實際行的行首
g0 光标移動到螢幕行的行首
^ 光标移動到實際行的第一個非空白字元
g^ 光标移動到螢幕行的第一個非空白字元
$ 光标移動到實際行的行尾
g$ 光标移動到螢幕行的行尾
i、a 目前光标後,插入模式
b 移動端單詞開頭
u 撤銷上一步的操作
e 定位到單詞最後一個字元
c 進入修改狀态
y 進入複制狀态
p 黏貼到光标之後
v 進入面向字元的可視模式
x 剪切目前光标下的字元
j 下一行光标所在列
k 上一行光标所在列
h 光标往左移動一個字元
l 光标往右移動一個字元
o 光标所在行,回車,插入模式
s 删除目前光标字元,插入模式
x 删除目前光标字元
r 替換目前光标字元
w 定位到下一個單詞
q{register} 進入宏記錄模式,​

​:reg 寄存器名​

​檢視宏自定義内容.錄制時確定每條指令都可重複執行.大寫的寄存器名進入追加模式
@{register} 執行指定宏寄存器内容,@@執行最近調用過的宏
m{letter} 給目前光标位置建立标記(小寫字母是本文檔,大寫字母是全局)
f{char} 查找目前光标行後,輸入單個字元,定位字元上,按​

​;​

​​定位下一個位置,按​

​,​

​定位上一個位置
t{char} 查找目前光标行後,輸入單個字元,定位字元前,按​

​;​

​​定位下一個位置,按​

​,​

​定位上一個位置
A 光标所在行尾,插入模式
C 删除目前光标後所有字元,插入模式
E 定位下一個空格或符号
P 黏貼到光标之前
S 删除目前行所有字元,并在此行首,插入模式
I 光标所在行首,插入模式
K 單詞的說明手冊,​

​:q​

​退出
J 目前行和下一行連接配接
R 進入替換模式
U 大小寫轉換
V 面向行的可視模式,批量選擇操作
G 文章行尾開頭
W 定位到下一個單詞
F{char} 查找目前光标行前,輸入單個字元,定位字元上,按​

​;​

​​定位下一個位置,按​

​,​

​定位上一個位置
T{char} 查找目前光标行前,輸入單個字元,定位字元後,按​

​;​

​​定位下一個位置,按​

​,​

​定位上一個位置
dt. 删除目前光标行後所有内容,直到.
d/ge 删除目前光标行後所有内容,直到ge
dd 剪切目前行
db 删除此光标前到空格的文字,保留目前光标字元
dw 删除整個單詞 ,保留白格
daw 删除整個單詞,并去掉空格
[數字]g 跳轉到數字行
gg 行首
ga 顯示字元編碼
ge 反向移動到上一個單詞的結尾
gj 螢幕行往下移動
gk 螢幕行往上移動
gp 黏貼目前行之前
gP 黏貼目前行之後
gv 進入上次由可視模式選中的文本範圍
gg 打開目前光标下的路徑檔案
gR 進入虛拟替換模式
gn 進入面向字元可視模式,并選中下一處比對
gN 進入面向字元可視模式,并選中上一處比對
gU 将指定文本轉換成大寫
cl 删除目前光标後一個字元,插入模式
cw 删除目前光标單詞,插入模式
cW 删除目前字串,插入模式
c3w 删除3個單詞
ci" 修改雙引号的内部内容
cit 修改标簽的内部内容
yit 拷貝标簽的内部内容
3cw 删除一個單詞,執行三次。​

​數字可以用在所有指令上​

ko 目前光标,上一行,插入模式
yyp 複制一行,并回車黏貼
yap 複制段落,​

​ap​

​目前段落
qx{changes}q 執行一系列修改,​

​@x​

​​繼續,​

​u​

​撤銷
c + $ 删除目前行,并在此行首插入模式
$ + a 光标所在行尾編輯
^ + c 删除目前行,并在此行首插入模式
^ + i 光标所在行首編輯
{數字}Ctrl + a 首先光标到數字,就會按你輸入的數字加上光标上的數字
{數字}Ctrl + x 同僚,是減法。 沒有定位到數字,他會自動正向查找數字并運算。
Ctrl + o 傳回上一次打開檔案的檔案
Ctrl + r 恢複上一步被撤銷的操作,恢複撤銷
Ctrl + v 面向列塊的可視模式
Ctrl + g 最下面顯示檔案名,第幾行,這一行占所有行的百分比
Ctrl + f 向下翻一頁
Ctrl + b 向上翻一頁
Ctrl + p 自動補全單詞 ,上一個
Ctrl + n 自動補全單詞,下一個
Ctrl + y 确認目前自動補全單詞
Ctrl + e 還原最早輸入的文本
Ctrl + w + s 水準切分視窗
Ctrl + w + v 垂直切分視窗
Ctrl + w + w 視窗循環切換
Ctrl + w + h 切換到左邊視窗
Ctrl + w + j 切換到下邊視窗
Ctrl + w + k 切換到上邊視窗
Ctrl + w + l 切換到右邊視窗
Ctrl + w + c 關閉活動視窗
Ctrl + w + o 隻保留活動視窗
Ctrl + w + = 所有視窗等寬等高
Ctrl + w + _ 最大化活動視窗高度
Ctrl + w + | 最大化活動視窗寬度
[N]Ctrl + w + _ 活動視窗高度設定N行
[N]Ctrl + w + | 活動視窗寬度設定N列
Shift + $ 該行行尾 ,相當于end
Shift + {number}> 往右縮進
Shift + < 往左縮進

7.常用vim指令-插入模式

按鍵 說明
Ctrl + h 删除前一個字元(同倒退鍵)
Ctrl + w 删除前一個單詞
Ctrl + u 删除至行首
Ctrl + [ 切換到普通模式
Ctrl + o 切換到插入-普通模式
Ctrl + x + s 拼寫更正
ESC 切換到普通模式
Ctrl + r + = 做算數運算,​

​=​

​後面輸入表達式按回車即可完成運算
Ctrl + v + u{code} 插入字元編碼字元,其中u是當使用unicode時才加上,否則後跟三位數字
Ctrl + k + {char1}{char2} 插入以二合字母表示的字元;​

​:h digraph-table​

​檢視二合字母表

8.常用vim指令-可視模式

三種不同可視模式:操作字元文本、行文本和列塊文本.

可視模式指令重複執行時,它會影響相同選擇數量的文本.

按鍵 說明
v 進入面向字元的可視模式
b 選擇區域上一個單詞開頭處
c 删除選擇區域并進入插入模式,輸入要修改的内容後隻會在第一行顯示按​

​ESC​

​,才會在之前所選區域發生變化.
o 選擇區域的開頭和結尾切換,一端固定一端随光标移動
V 面向行的可視模式,批量選擇操作
U 大小寫轉換==>等同于普通模式下的​

​gU​

VG 選擇目前行到最後一行
iw 選擇目前單詞
aw 選擇目前單詞及一個空格
iW 選擇目前字串
aW 選擇目前字串及一個空格
is 選擇目前句子
as 選擇目前句子及一個空格
ip 選擇目前段落
ap 選擇目前段落及一個空格
vit 選擇标簽内部的内容
a" 以雙引号擴大選擇内容
i> 選中一對尖括号所有内容
gUit 選擇标簽内部的内容,使其大小寫轉換
Ctrl + g 可視模式和選擇模式切換
Ctrl + v 面向列快的可視模式

9.常用vim指令-指令行模式

按​

​:​

​​進入指令行模式,和shell下指令類似,輸入​

​Ex指令​

​​後按​

​回車​

​​執行.

在任意時刻,可以按​​

​ESC​

​​從指令行模式切回普通模式.

按​​

​/​

​​或者​

​Ctrl​

​​+​

​r​

​​+​

​=​

​通路表達式寄存器時也會進入指令行模式
指令 說明
:[range]delete [x] 删除指定範圍内的行[到寄存器]
:[range]yank [x] 複制指定範圍内的行[到寄存器]
:[line]put [x] 在指定行後黏貼寄存器x中的内容
:[range]copy {address} 把指定範圍内的行拷貝到{address}指定的行下,簡寫​

​t​

​​或者​

​co​

:[range]move {address} 把指定範圍内的行移動到{address}指定的行下,簡寫​

​m​

:[range]join 連接配接指定範圍内的行
:[range]normal {commands} 對指定範圍内的每一行執行普通指令
:[range]substitute/{pattern}/{string}/[flags] 把指定範圍内出現{pattern}的地方替換成{string},簡寫​

​s​

:[range]global[!]/{pattern}/[cmd] 對指定範圍内比對{pattern}的所有行執行Ex指令cmd ,簡寫​

​g​

​​,反向簡寫​

​v​

:[range]!{filter} 執行外部程式過濾指定範圍.如​

​:2,$!sort -t',' -k2​

​:以逗号分隔的記錄,從第二行到結尾按第二列字段升序排序
:read !{指令} 執行目前指令,将輸出結果儲存到目前文檔
:[range]write !sh 讀取[僅選中内容]目前檔案指令并在shell中執行
:write ! sh 讀取目前檔案指令并在shell中執行
:write! sh 将前檔案指令儲存到sh檔案中
:{cmd1} ​

​|​

​ {cmd2}
管道指令,執行完指令1執行指令2
:!{外部指令} 執行shell或者cmd中的指令
:!java % java執行目前檔案,​

​%​

​代表目前檔案名
:source xxx.vim 執行vim腳本
:shell 進入shell指令模式
:exit 退出shell指令模式,傳回vim
q: 進入指令行視窗(曆史指令,上下選擇,按​

​i​

​進入插入模式,編輯曆史指令,回車執行)
q/ 進入查找指令行視窗(查找曆史指令,上下選擇,按​

​i​

​進入插入模式,編輯曆史指令,回車執行)
:0 虛拟行,在檔案第一行上方
:e 重新整理目前文檔
:'m 标記m的行
:’< 高亮選區的起始行
:6t. 将第6行複制到目前行下方
:t6 把目前行複制到第6行下方
:t. 把目前行複制下方,類似​

​yyp​

:t$ 把目前行複制文本結尾
:’<,’>t0 把高亮選擇的行複制到檔案開頭
:’> 高亮選區的結束行
:數字 光标跳轉到指定行
:[數字]p 列印目前行,同​

​print​

​;列印數字行
:[數字]d 删除第數字行
: $ 光标跳轉到最後一行
@: 重複上次指令
:{start},{end}p 列印從開始到結束行
: /内容/+數字,/内容/-數字 比對開始内容加上偏移量行,到結束内容減去數字偏移量行
:.,$p 目前行到最後一行列印
:%p 目前文檔所有行列印
:’<,’>normal . 對高亮選擇區域執行普通模式下的​

​.​

​指令
Ctrl + r 複制光标下的單詞
Ctrl + w 黏貼光标下的單詞
Ctrl + a 黏貼光标下的字串,空格隔開的
Ctrl + d 顯示已輸入指令可用清單
Ctrl + f 儲存目前指令,并進入指令行視窗

​Tab​

指令自動補全
Shift + ​

​Tab​

反向指令自動補全
[過濾字元]​

​上下​

曆史指令切換,前面可加字首過濾,可在vimrc裡面修改​

​history​

​個數
:args 顯示所有多個檔案清單,當用​

​vim files/*.java​

​打開多個檔案時,檔案會加載到緩沖區
:first 顯示第一個打開檔案
:next 顯示下一個打開檔案
:bnext 顯示下一個打開檔案
:bprev 顯示上一個打開檔案
:bfirst 顯示第一個一個打開檔案
:blast 顯示最後一個打開檔案
:bufer {bufname} 跳轉到指定編号緩沖區
:bdelete {bufname} 删除到指定編号可以多個,空格隔開緩沖區, 也可以範圍删除​

​N,M bdelete​

:argdo source batch.vim 對所有同時打開的多個檔案一起執行batch.vim腳本
:ls 顯示所有被載入記憶體的檔案清單,​

​%​

​​表示目前視窗可見,​

​#​

​​代表輪換檔案 ​

​Ctrl+^​

​交替檔案
:vimgrep /查找字元/ ** 多個檔案裡面查找字元
:quit 退出緩沖區
:qall! 關閉所有,摒棄修改無需警告,簡寫​

​qa​

:write 儲存緩沖區,簡寫​

​w​

:wall! 寫入所有,摒棄修改無需警告,簡寫​

​wa​

:edit! 放棄修改緩沖區,簡寫​

​e​

:edit %:h​

​<Tab>​

切換點前檔案所在目錄路徑
:sp[lit] {file} 水準切分視窗,在新視窗載入file檔案
:vsp[lit] {file} 垂直切分視窗,在新視窗載入file檔案
:clo[se] 關閉活動視窗
:on[ly] 隻保留活動視窗
Ctrl + w +T 把目前視窗移動到新标簽頁
:tabe[dit] {file} 在新标簽頁打開檔案
:tabc[lose] 關閉目前标簽頁及其中所有視窗
:tabc[nly] 關閉其他标簽頁,隻保留活動标簽頁
:tabn[ext] {N} 切換到編号為N的标簽頁同:​

​{N}gt​

:tabn[lext 下一個标簽頁 ​

​gt​

:tabp[revious] 上一個标簽頁​

​gT​

:set path+=path/** 添加路徑,友善find查找
:set number 顯示行号
:set spell 拼寫檢測,​

​[s​

​​反向跳轉,​

​]s​

​​正向跳轉,​

​z=​

​​建議修改清單​

​zg​

​​,​

​zw​

​添加删除單詞
:set spelllang=en_us 拼寫檢測語言
vim . 打開檔案管理器同​

​:edit .​

​​ 或者​

​:e.​

:Explore 打開檔案管理器,并顯示活動緩沖區所在目錄同​

​:E​

上一篇: 碼農翻身