[TOC]
使用前需要知道的
vim 是對vi的擴(kuò)展茁裙,文中的很多操作是vi通用的
vi是區(qū)分大小寫的命令的彪蓬,也就是說 g
與G
是不同的命令
在不同模式下殉了,快捷鍵是不一樣的 模式分 一般模式
編輯模式
指令模式
一般模式用于文件內(nèi)部操作贴汪,編輯模式用于輸入編寫等冯遂,指令模式用于對文本文件進(jìn)行操作
常用操作
進(jìn)入一般模式為開始編輯蕊肥,或者按esc后進(jìn)入
按鍵 | 效果 |
---|---|
a,i,r,o,A,I,R,O | 進(jìn)入編輯模式 |
h,backspace | 左移動(dòng) |
l,space | 右移動(dòng) |
j | 下移動(dòng) |
k | 上移動(dòng) |
0, | 移動(dòng)到行首 |
$ | 移動(dòng)到行末,1$ 表示當(dāng)前行的行尾蛤肌,2$ 表示當(dāng)前行的下一行的行尾 |
b | 按照單詞向前移動(dòng) 字首 |
e | 按照單詞向后移動(dòng) 字尾 |
w | 按照單詞向后移至次一個(gè)字首 |
H | 移動(dòng)到屏幕最上 非空白字 |
M | 移動(dòng)到屏幕中央 非空白字 |
L | 移動(dòng)到屏幕最下 非空白字 |
G | 移動(dòng)到文檔最后一行 |
gg | 移動(dòng)到文檔第一行 |
v | 進(jìn)入光標(biāo)模式壁却,配合移動(dòng)鍵選中多行 |
Ctrl+f | 向下翻頁 |
Ctrl+b | 向上翻頁 |
u | 撤銷上一次操作 |
`` | 回到上次編輯的位置 |
dw | 刪除這個(gè)單詞后面的內(nèi)容 |
dd | 刪除光標(biāo)當(dāng)前行 |
dG | 刪除光標(biāo)后的全部文字 |
d$ | 刪除本行光標(biāo)后面的內(nèi)容 |
d0 | 刪除本行光標(biāo)前面的內(nèi)容 |
y | 復(fù)制當(dāng)前行,會(huì)復(fù)制換行符 |
yy | 復(fù)制當(dāng)前行的內(nèi)容 |
yyp | 復(fù)制當(dāng)前行到下一行裸准,此復(fù)制不會(huì)放到剪切板中 |
nyy | 復(fù)制當(dāng)前開始的n行 |
p,P,. | 粘貼 |
ddp | 當(dāng)前行和下一行互換位置 |
J | 合并行 |
Ctrl+r | 重復(fù)上一次動(dòng)作 |
Ctrl+z | 暫停并退出 |
ZZ | 保存離開 |
xp | 交換字符后面的交換到前面 |
~ | 更換當(dāng)前光標(biāo)位置的大小寫展东,并光標(biāo)移動(dòng)到本行右一個(gè)位置,直到無法移動(dòng) |
光標(biāo)詳細(xì)操作
按鍵 | 效果 |
---|---|
Ctrl+e | 向下滾動(dòng) |
Ctrl+b | 向上翻頁 |
b | 按照單詞向前移動(dòng) 字首 |
B | 按照單詞向前移動(dòng) 字首 忽略一些標(biāo)點(diǎn)符號 |
e | 按照單詞向后移動(dòng) 字尾 |
E | 按照單詞向后移動(dòng) 忽略一些標(biāo)點(diǎn)符號 |
w | 按照單詞向后移至次一個(gè)字首 |
W | 按照單詞向后移至次一個(gè)字首 忽略一些標(biāo)點(diǎn)符號 |
H | 移動(dòng)到屏幕最上 非空白字 |
M | 移動(dòng)到屏幕中央 非空白字 |
L | 移動(dòng)到屏幕最下 非空白字 |
G | 移動(dòng)到文檔最后一行 |
gg | 移動(dòng)到文檔第一行 |
( | 光標(biāo)到句尾 |
) | 光標(biāo)到局首 |
{ | 光標(biāo)到段落開頭 |
} | 光標(biāo)到段落結(jié)尾 |
nG | 光標(biāo)下移動(dòng)到n行的首位 |
n$ | 光標(biāo)移動(dòng)到n行尾部 |
n+ | 光標(biāo)下移動(dòng)n行 |
n- | 光標(biāo)上移動(dòng)n行 |
查找命令
指令 | 效果 |
---|---|
* | 向下查找同樣光標(biāo)的字符 |
# | 向上查找同樣光標(biāo)的字符 |
/code | 查找 code 一樣的內(nèi)容炒俱,向后 |
?code | 查找 code 一樣的內(nèi)容盐肃,向前 |
n | 查找下一處 |
N | 查找上一處 |
ma | 在光標(biāo)處做一個(gè)名叫a的標(biāo)記 可用26個(gè)標(biāo)記 (a~z) |
`a | 移動(dòng)到一個(gè)標(biāo)記a |
d`a | 刪除當(dāng)前位置到標(biāo)記a之間的內(nèi)容 |
:marks | 查看所有標(biāo)記 |
指令模式
指令 | 效果 |
---|---|
:q | 一般退出 |
:q! | 退出不保存 |
:wq | 保存退出 |
:w filename | 另存為 filename |
:jumps | 歷史編輯文檔記錄 |
:set nu | 設(shè)置行號顯示 |
:set nonu | 取消行號顯示 |
:set | 顯示設(shè)置參數(shù) |
:set autoindent | 自動(dòng)縮排,回車與第一個(gè)非空格符對齊 |
:syntax on/off | 根據(jù)程序語法高亮顯示 |
:set highlight | 高亮設(shè)置查看 |
:set hlsearch | 查找代碼高亮顯示 |
:nohlsearch | 暫時(shí)關(guān)閉高亮顯示 |
:set nohlsearch | 永久關(guān)閉高亮顯示 |
:set bg=dark | 設(shè)置暗色調(diào) |
:set bg=light | 設(shè)置亮色調(diào) |
屏幕翻滾
按鍵 | 效果 |
---|---|
Ctrl+f | 向文件尾翻一屏幕 |
Ctrl+b | 向文件首翻一屏幕 |
Ctrl+d | 向文件尾翻半屏幕 |
Ctrl+u | 向文件首翻半屏幕 |
插入命令
按鍵 | 效果 |
---|---|
i | 在光標(biāo)前 |
I | 在當(dāng)前行首 |
a | 在光標(biāo)后 |
A | 在當(dāng)前行尾部 |
o | 在當(dāng)前行下新開一行 |
O | 在當(dāng)前行上新開一行 |
r | 替換當(dāng)前字符 |
R | 替換當(dāng)前行及后面的字符权悟,直到按esc為止 |
s | 從當(dāng)前行開始砸王,以輸入的文本替代指定數(shù)目的字符 |
S | 刪除指定數(shù)目的行,并以輸入的文本替代 |
ncw,nCW | 修改指定數(shù)目n的字符 |
nCC | 修改指定數(shù)目n的行 |
刪除命令
按鍵 | 效果 |
---|---|
ndw,nDW | 刪除光標(biāo)開始及其后 n-1 個(gè)字符 |
dw | 刪除這個(gè)單詞后面的內(nèi)容 |
dd | 刪除光標(biāo)當(dāng)前行 |
dG | 刪除光標(biāo)后的全部文字 |
d$ | 刪除本行光標(biāo)后面的內(nèi)容 |
d0 | 刪除本行光標(biāo)前面的內(nèi)容 |
ndd | 刪除當(dāng)前行峦阁,以及其后的n-1行 |
x | 刪除一個(gè)字符谦铃,光標(biāo)后 |
X | 刪除一個(gè)字符,光標(biāo)前 |
Ctrl+u | 刪除輸入模式下的輸入的文本 |
多窗口模式
指令 | 效果 |
---|---|
:split | 創(chuàng)建新窗口 |
Ctrl+w | 切換窗口 |
Ctrl-w = | 所有窗口一樣高 |
Ctrl-w+方向鍵 | 多窗口視圖切換 |
多文件編輯
指令 | 效果 | |
---|---|---|
:args | 列出當(dāng)前編輯的文件名 | |
:next | 打開多文件榔昔,使用 n(Next) p(revious) | N(ext) 切換 |
:file | 列出當(dāng)前打開的所有文件 |
vim 自定義技巧
復(fù)制粘貼取消縮進(jìn)
:set paste
進(jìn)入paste模式以后驹闰,可以在插入模式下粘貼內(nèi)容,不會(huì)有任何變形
這個(gè)參數(shù)做了這么多事:
textwidth設(shè)置為0
wrapmargin設(shè)置為0
set noai
set nosi
softtabstop設(shè)置為0
revins重置
ruler重置
showmatch重置
formatoptions使用空值
下面的選項(xiàng)值不變撒会,但卻被禁用
lisp
indentexpr
cindent
綁定快捷鍵來激活/取消 paste模式
:set pastetoggle=<F11>
出現(xiàn)粘貼換行符錯(cuò)位嘹朗,設(shè)置一下 .vimrc
" this can change way of paste words
:set paste
" default tabstop=8
:set tabstop=4
" use keyboard F11 to change paste mode
:set pastetoggle=<F11>
vim 縮進(jìn)
Normal Mode下,命令>>
將對當(dāng)前行增加縮進(jìn)茧彤,而命令<<
則將對當(dāng)前行減少縮進(jìn)
在命令前使用數(shù)字骡显,來指定命令作用的范圍
5<<
在Insert/Replace Mode下
Ctrl-Shift-t
可以增加當(dāng)前行的縮進(jìn)
Ctrl-Shift-d
則可以減少當(dāng)前行的縮進(jìn)
使用0-Ctrl-Shift-d
命令,將移除所有縮進(jìn)
需要注意的是,當(dāng)我們輸入命令中的“0”時(shí)惫谤,Vim會(huì)認(rèn)為我們要在文本中插入一個(gè)0壁顶,并在屏幕上顯示輸入的“0”;然后當(dāng)我們執(zhí)行命令0-Ctrl-Shift-d時(shí)溜歪,Vim就會(huì)意識(shí)到我們要做的是減少縮進(jìn)若专,這時(shí)0會(huì)就會(huì)從屏幕上消失
vim tab縮進(jìn)
tab縮進(jìn)寬度默認(rèn)為8個(gè)空格
我們可以使用以下命令,來修改縮進(jìn)寬度
:set tabstop=4
:set softtabstop=4
:set shiftwidth=4
:set expandtab
tabstop:表示一個(gè) tab 顯示出來是多少個(gè)空格的長度默認(rèn) 8
softtabstop:表示在編輯模式的時(shí)候按退格鍵的時(shí)候退回縮進(jìn)的長度當(dāng)使用 expandtab 時(shí)特別有用蝴猪。
shiftwidth:表示每一級縮進(jìn)的長度一般設(shè)置成跟 softtabstop 一樣调衰。 當(dāng)設(shè)置成 expandtab 時(shí)縮進(jìn)用空格來表示noexpandtab 則是用制表符表示一個(gè)縮進(jìn)
expandtab選項(xiàng),用來控制是否將Tab轉(zhuǎn)換為空格,但是這個(gè)選項(xiàng)并不會(huì)改變已經(jīng)存在的文本自阱,如果需要應(yīng)用此設(shè)置將所有Tab轉(zhuǎn)換為空格嚎莉,需要執(zhí)行
:retab!
vim 自動(dòng)縮進(jìn)
- cindent
:set cindent
vim可以很好的識(shí)別出C和Java等結(jié)構(gòu)化程序設(shè)計(jì)語言,并且能用C語言的縮進(jìn)格式來處理程序的縮進(jìn)結(jié)構(gòu)
- smartindent
:set smartindent
在這種縮進(jìn)模式中沛豌,每一行都和前一行有相同的縮進(jìn)量趋箩,同時(shí)這種縮進(jìn)形式能正確的識(shí)別出花括號,當(dāng)遇到右花括號(})加派,則取消縮進(jìn)形式叫确。此外還增加了識(shí)別C語言關(guān)鍵字的功能。如果一行是以#開頭的芍锦,那么這種格式將會(huì)被特殊對待而不采用縮進(jìn)格式竹勉。
- autoindent
:set autoindent
在這種縮進(jìn)形式中,新增加的行和前一行使用相同的縮進(jìn)形式
顯示隱藏符號
- 默認(rèn)不顯示
:set nolist
- 顯示
:set invlist
" normal is :set nolist | show hide is :set invlist
:set nolist
使用vim寄存器
使用vim寄存器 “+p 粘貼
根本不用考慮是否自動(dòng)縮進(jìn)娄琉,是否paste模式次乓,直接原文傳遞
如果想保存原寄存器中內(nèi)容而同時(shí)增加新的內(nèi)容
就要在yy前增加標(biāo)簽
標(biāo)簽以雙引號開始,跟著的是標(biāo)簽名稱车胡,可以是數(shù)字0-9檬输,也可以是26個(gè)字母
顯示所有寄存器內(nèi)容
:reg
注意兩個(gè)特殊的寄存器:*
和 +
這兩個(gè)寄存器是和系統(tǒng)相通的照瘾,前者關(guān)聯(lián)系統(tǒng)選擇緩沖區(qū)匈棘,后者關(guān)聯(lián)系統(tǒng)剪切板
通過它們可以和其他程序進(jìn)行數(shù)據(jù)交換
若寄存器列表里無
*
或+
寄存器,則可能是由于沒有安裝vim的圖形界面所致
sudo apt-get install vim-gnome
設(shè)置vim永遠(yuǎn)顯示行號
修改vim的配置文件加入 set nu
vi ~/.vimrc
然后輸入
set nu
當(dāng)然也可以輸入其他配置類似
set nonu
syntax on
vimrc 常用配置
" open syntax
syntax on
" set not show line number can change by :set nu
:set nonu
" set show line number when in edit
:set ruler
" set tab button stop
" default tabstop=8
:set tabstop=4
:set softtabstop=4
:set shiftwidth=4
:set expandtab
" use keyboard F11 to change paste mode
:set pastetoggle=<F11>
" normal is :set nolist | show hide is :set invlist
:set nolist
" fix mac vim keyboard delete can not delete error, so as set backspace=indent,eol,start
set backspace=2
" ------------
" install plug-in manager see https://github.com/VundleVim/Vundle.vim
查看vim設(shè)置的樣例文件
- linux 查看
find /usr/share/ -name "*example.vim"
- mac 查看方法
locate example.vim
如果是第一次運(yùn)行會(huì)報(bào)告錯(cuò)誤析命,需要建立索引主卫,根據(jù)提示操作即可,建議運(yùn)行一次 updatedb
找到標(biāo)識(shí)為 example.vim
的文件就是樣例