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,并顯示一下資訊。
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
首先會進入普通模式
按
i
進入插入模式
然後輸入要編輯的内容
1.按
ESC
退出插入模式
2.按
:
進入指令行模式
3.輸入
指令回車,儲存并退出
wq
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 | 轉換為大寫, 作用于目前行 |
> | 增加縮進 |
< | 減小縮進 |
= | 自動縮進 |
! | 使用外部程式過濾{motion}所跨越的行 |
6.常用vim指令-普通模式
單詞:由/
數字
/
字母
/
下劃線
.
'
組成
字串:非空字元組成`
指令 | 說明 |
. | 重複上次的操作:[普通模式,插入模式)&& [插入模式,ESC] |
* | 比對目前光标單詞,并查找 |
/pattern + 回車 | 文檔中查找下一處比對項 , 下一個, 上一個 |
?pattern + 回車 | 文檔中查找上一處比對項, 下一個, 上一個 |
: [range]s[ubstitute]/target/replacement/[flags] | 查找 替換, 下一個, 撤銷,最後标志位 代表全局, 代表需确認, 代表不執行替換僅報告比對次數 上一個标志位 |
:%s/target/replacement/g | 查找替換全部, 撤銷. 上次查找字元的個數 |
"% | 目前檔案名 |
"# | 輪換檔案名 |
". | 上次插入文本 |
": | 上次執行Ex指令 |
/ | 上次查找模式 |
/\c | 忽略大小寫查找 |
/\C | 強制大小寫查找 |
/\v | very magic模式查找,一般查找需要用 轉義 .這個模式不需要 |
/\V | 原義查找,特殊字元不需要轉義 |
/\v<單詞> | 完整單詞比對 |
"0P | 黏貼第一次複制寄存器内容 |
"_diw | 黑洞寄存器 |
"+p | 将系統 粘貼闆内容複制到目前位置,插入模式用 + + |
`` | 目前檔案上次跳轉動作之前的位置 |
`{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} | 進入宏記錄模式, 檢視宏自定義内容.錄制時確定每條指令都可重複執行.大寫的寄存器名進入追加模式 |
@{register} | 執行指定宏寄存器内容,@@執行最近調用過的宏 |
m{letter} | 給目前光标位置建立标記(小寫字母是本文檔,大寫字母是全局) |
f{char} | 查找目前光标行後,輸入單個字元,定位字元上,按 定位下一個位置,按 定位上一個位置 |
t{char} | 查找目前光标行後,輸入單個字元,定位字元前,按 定位下一個位置,按 定位上一個位置 |
A | 光标所在行尾,插入模式 |
C | 删除目前光标後所有字元,插入模式 |
E | 定位下一個空格或符号 |
P | 黏貼到光标之前 |
S | 删除目前行所有字元,并在此行首,插入模式 |
I | 光标所在行首,插入模式 |
K | 單詞的說明手冊, 退出 |
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 | 複制段落, 目前段落 |
qx{changes}q | 執行一系列修改, 繼續, 撤銷 |
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} | 插入以二合字母表示的字元; 檢視二合字母表 |
8.常用vim指令-可視模式
三種不同可視模式:操作字元文本、行文本和列塊文本.
可視模式指令重複執行時,它會影響相同選擇數量的文本.
按鍵 | 說明 |
v | 進入面向字元的可視模式 |
b | 選擇區域上一個單詞開頭處 |
c | 删除選擇區域并進入插入模式,輸入要修改的内容後隻會在第一行顯示按 ,才會在之前所選區域發生變化. |
o | 選擇區域的開頭和結尾切換,一端固定一端随光标移動 |
V | 面向行的可視模式,批量選擇操作 |
U | 大小寫轉換==>等同于普通模式下的 |
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}指定的行下,簡寫 或者 |
:[range]move {address} | 把指定範圍内的行移動到{address}指定的行下,簡寫 |
:[range]join | 連接配接指定範圍内的行 |
:[range]normal {commands} | 對指定範圍内的每一行執行普通指令 |
:[range]substitute/{pattern}/{string}/[flags] | 把指定範圍内出現{pattern}的地方替換成{string},簡寫 |
:[range]global[!]/{pattern}/[cmd] | 對指定範圍内比對{pattern}的所有行執行Ex指令cmd ,簡寫 ,反向簡寫 |
:[range]!{filter} | 執行外部程式過濾指定範圍.如 :以逗号分隔的記錄,從第二行到結尾按第二列字段升序排序 |
: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: | 進入指令行視窗(曆史指令,上下選擇,按 進入插入模式,編輯曆史指令,回車執行) |
q/ | 進入查找指令行視窗(查找曆史指令,上下選擇,按 進入插入模式,編輯曆史指令,回車執行) |
:0 | 虛拟行,在檔案第一行上方 |
:e | 重新整理目前文檔 |
:'m | 标記m的行 |
:’< | 高亮選區的起始行 |
:6t. | 将第6行複制到目前行下方 |
:t6 | 把目前行複制到第6行下方 |
:t. | 把目前行複制下方,類似 |
:t$ | 把目前行複制文本結尾 |
:’<,’>t0 | 把高亮選擇的行複制到檔案開頭 |
:’> | 高亮選區的結束行 |
:數字 | 光标跳轉到指定行 |
:[數字]p | 列印目前行,同 ;列印數字行 |
:[數字]d | 删除第數字行 |
: $ | 光标跳轉到最後一行 |
@: | 重複上次指令 |
:{start},{end}p | 列印從開始到結束行 |
: /内容/+數字,/内容/-數字 | 比對開始内容加上偏移量行,到結束内容減去數字偏移量行 |
:.,$p | 目前行到最後一行列印 |
:%p | 目前文檔所有行列印 |
:’<,’>normal . | 對高亮選擇區域執行普通模式下的 指令 |
Ctrl + r | 複制光标下的單詞 |
Ctrl + w | 黏貼光标下的單詞 |
Ctrl + a | 黏貼光标下的字串,空格隔開的 |
Ctrl + d | 顯示已輸入指令可用清單 |
Ctrl + f | 儲存目前指令,并進入指令行視窗 |
| 指令自動補全 |
Shift + | 反向指令自動補全 |
[過濾字元] | 曆史指令切換,前面可加字首過濾,可在vimrc裡面修改 個數 |
:args | 顯示所有多個檔案清單,當用 打開多個檔案時,檔案會加載到緩沖區 |
:first | 顯示第一個打開檔案 |
:next | 顯示下一個打開檔案 |
:bnext | 顯示下一個打開檔案 |
:bprev | 顯示上一個打開檔案 |
:bfirst | 顯示第一個一個打開檔案 |
:blast | 顯示最後一個打開檔案 |
:bufer {bufname} | 跳轉到指定編号緩沖區 |
:bdelete {bufname} | 删除到指定編号可以多個,空格隔開緩沖區, 也可以範圍删除 |
:argdo source batch.vim | 對所有同時打開的多個檔案一起執行batch.vim腳本 |
:ls | 顯示所有被載入記憶體的檔案清單, 表示目前視窗可見, 代表輪換檔案 交替檔案 |
:vimgrep /查找字元/ ** | 多個檔案裡面查找字元 |
:quit | 退出緩沖區 |
:qall! | 關閉所有,摒棄修改無需警告,簡寫 |
:write | 儲存緩沖區,簡寫 |
:wall! | 寫入所有,摒棄修改無需警告,簡寫 |
:edit! | 放棄修改緩沖區,簡寫 |
:edit %:h | 切換點前檔案所在目錄路徑 |
: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的标簽頁同: |
:tabn[lext | 下一個标簽頁 |
:tabp[revious] | 上一個标簽頁 |
:set path+=path/** | 添加路徑,友善find查找 |
:set number | 顯示行号 |
:set spell | 拼寫檢測, 反向跳轉, 正向跳轉, 建議修改清單 , 添加删除單詞 |
:set spelllang=en_us | 拼寫檢測語言 |
vim . | 打開檔案管理器同 或者 |
:Explore | 打開檔案管理器,并顯示活動緩沖區所在目錄同 |