vim 常用快捷鍵及使用技巧

[TOC]

使用前需要知道的

vim 是對vi的擴(kuò)展茁裙,文中的很多操作是vi通用的

vi是區(qū)分大小寫的命令的彪蓬,也就是說 gG 是不同的命令

在不同模式下殉了,快捷鍵是不一樣的 模式分 一般模式 編輯模式 指令模式

一般模式用于文件內(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 的文件就是樣例

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鹃愤,一起剝皮案震驚了整個(gè)濱河市簇搅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌软吐,老刑警劉巖瘩将,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡姿现,警方通過查閱死者的電腦和手機(jī)肠仪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來备典,“玉大人异旧,你說我怎么就攤上這事√嵊叮” “怎么了吮蛹?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長拌屏。 經(jīng)常有香客問我潮针,道長,這世上最難降的妖魔是什么倚喂? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任然低,我火速辦了婚禮,結(jié)果婚禮上务唐,老公的妹妹穿的比我還像新娘雳攘。我一直安慰自己,他們只是感情好枫笛,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布吨灭。 她就那樣靜靜地躺著,像睡著了一般刑巧。 火紅的嫁衣襯著肌膚如雪喧兄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天啊楚,我揣著相機(jī)與錄音吠冤,去河邊找鬼。 笑死恭理,一個(gè)胖子當(dāng)著我的面吹牛拯辙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播颜价,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼涯保,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了周伦?” 一聲冷哼從身側(cè)響起夕春,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎专挪,沒想到半個(gè)月后及志,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體片排,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年速侈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了划纽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锌畸,死狀恐怖勇劣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情潭枣,我是刑警寧澤比默,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站盆犁,受9級特大地震影響命咐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谐岁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一醋奠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伊佃,春花似錦窜司、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至帅涂,卻和暖如春议薪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背媳友。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工斯议, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人醇锚。 一個(gè)月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓哼御,卻偏偏與公主長得像,于是被迫代替她去往敵國和親搂抒。 傳聞我的和親對象是個(gè)殘疾皇子艇搀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 最近集中讀了幾本關(guān)于Vim的書尿扯,?以《Practical Vim》最為詳盡求晶,特重新溫習(xí)并總結(jié)成篇,一來作為復(fù)習(xí)和練...
    南瓜不胡鬧閱讀 5,751評論 1 28
  • Ubuntu的發(fā)音 Ubuntu爵赵,源于非洲祖魯人和科薩人的語言吝秕,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 99,202評論 9 467
  • Vim幾句話介紹Vim是Unix系統(tǒng)上的文本編輯軟件(你該不會(huì)不知道什么是文本編輯軟件吧?栈谩)烁峭,在windows上也...
    何必遠(yuǎn)方閱讀 3,130評論 0 3
  • 曾經(jīng)在思科的工廠測試系統(tǒng)`KlemTest` (`SUSE`命令行模式)中使用`VI`/`VIM`超過2年半,現(xiàn)在...
    戈多在地獄閱讀 1,789評論 1 13
  • 前些天,不怎么發(fā)朋友圈的師姐但两,連發(fā)三條鬓梅,最后一條說身體有點(diǎn)問題,感覺來日無多谨湘,看完一個(gè)哆嗦绽快,去年在她來成都出差,還...
    wwling2001閱讀 284評論 0 1