Vim編輯器

什麼是Vim

Vim是從 vi 發展出來的一個文本編輯器。代碼補全、編譯及錯誤跳轉等方便編程的功能特別豐富,在程序員中被普遍使用,和Emacs(誇張的說法是假裝成編輯器的操做系統)並列成爲類Unix系統用戶最喜歡的文本編輯器。Bram Moolenaar 從一個開源的vi開發了1.0的Vim,而且在1992 年 1.22 版本的 Vim 被移植到了 UNIX 和MS-DOS上。自vim發佈有不少程序員使用,到2010年vim發佈7.3版本,目前最新的一個版本。php

安裝Vim

Mac下能夠直接使用brew安裝:linux

brew install macvim

其餘系統下的安裝可查看官方網站http://www.vim.org/download.p...git

基本概念

普通( Normal )模式

當咱們經過vim 文件或文件夾進入編輯器時,默認的就是普通模式,或者叫作命令模式,在這種模式下,鍵盤上的大部分輸入會被認做是快捷鍵。普通模式也是vim使用中最多使用的模式,能很大的提升編輯效率。
命令解釋中的參數:程序員

CHAR 任何非空白字符
WORD 非空白字符的序列 (字串)
N 命令前輸入的數值
{motion} 光標移動命令
Nmove {motion} 移動通過的文本github

當進入普通模式時左下角顯示--INSERT--,下面介紹一些經常使用的快捷鍵:正則表達式

1.模式轉換

基本的模式轉換快捷鍵,對於進入編輯模式,下面還有其餘快捷鍵在完成後也會進入編輯模式。
普通模式進入編輯模式shell

i 在當前位置生前插入N次     
I 在當前行首插入N次
a 在當前位置後插入N次       
A 在當前行尾插入N次
o 在當前行以後插入一行N次    
O 在當前行以前插入一行N次

普通模式進入可視化模式編程

v 開始面向字符的可視 (Visual) 模式
V 進入面向行的可視 (Visual) 模式
CTRL+v 進入面向列的可視 (Visual) 模式

2.光標移動及屏幕調整

經過快捷鍵咱們能夠完成光標的快速移動.vim

h 光標左移 N 個字符
l 光標右移 N 個字符,這個命令不多用,通常用w代替。
k 光標上移 N 行
j 光標下移 N 行

w 光標向前移動 N 個 WORD,停留在該 WORD 的第一個字符,當到達該行行尾時,會自動換行。
e 光標向前移動 N 個 WORD,停留在該 WORD 的最後一個字符,當到達該行行尾時,會自動換行。
b 光標向後移動 N 個 WORD,停留在該 WORD 的第一個字符,當到達該行行首時,會自動換行。
W,E,B 與w,e,b 功能是一致的,可是在區分 WORD 上是不一樣的,對於parent.child這種,大寫的快捷鍵會忽略標點符號。

^ 移動到本行第一個非空白字符上。
0(數字0)移動到本行第一個字符上,HOME鍵也可。
$ 移動到當前行,下 N 行行尾。
| 移到當前行的第 N 個字符。
gg 移動到文件的第一行,同 [[。
G  移動到文件的最後一行,同 ]]。(NG會移動到第 N 行)
f 也可用於移動光標,fx會查找光標後的字符x,3fx會查找光標後的第三個字符x。但f只侷限與當前行不會跨行。
F 同f,反向查找。
; 重複前面的f、F、t或T查找命令。
, 以相反的方向重複前面的f、F、t或T查找命令。

z<return> 將當前行下的第 N 行置爲屏幕的頂行(即z+ENTER) 或者zt
z. 將當前行上的第 N 行置爲屏幕的中央 或者zz
z- 將當前行上的第 N 行置爲屏幕的底行 或者zb

H 移動到當前屏幕的開頭下 N 行。
M 移動到當前屏幕的中間。
L 移動到當前屏幕的結尾上 N 行。
gm 移動到屏幕中間
+ 移動到下一行的第一個非空字符
- 移動到上一行的第一個非空字符
% 光標會移動後面的第一個小括號中括號大括號 ,所匹配的小括號中括號大括號,即成對出現的符號。

書籤緩存

m[a-zA-Z] 在光標所在行定義書籤,使用'+書籤名 跳轉。例如 ma,'a。

組合鍵

Ctrl + e 向下滾動一行
Ctrl + y 向上滾動一行
Ctrl + d 向下滾動半屏
Ctrl + u 向上滾動半屏
Ctrl + f 向下滾動一屏,同 PAGEDOWN。
Ctrl + b 向上滾動一屏,同 PAGEUP。
Ctrl + o 依次沿着你的跳轉記錄向回跳
Ctrl + i 依次沿着你的跳轉記錄向前跳

EX命令 當輸入: / ? 會進入命令行編輯,在編輯器的最下邊,出現 : / ? ,其中: + 命令 被稱做EX命令。

:+行號 能夠直接跳到該行 ,當輸入行號大於最大行號時,會跳到最後一行。在便器展現行號的狀況下,這個命令被常用。
:ju 列出跳轉歷史。

3.查找及替換

查找,vim中能夠經過EX命令 :set + 選項 ,去設置一些選項來影響查找。輸入/ ? 時,會在底行出現該命令,而後能夠輸入字符,輸入ENTER開始查找,支持正則表達式,而且支持歷史操做。

/{查找的內容}[/偏移量] 光標處向下查找指定內容 
?{查找的內容}[/偏移量] 光標處向上查找指定內容
/和? 在開始查找時可以使用n或者N在找到的內容之間跳轉。
n 重複前一個查找的動做
N 與 n 恰好相反,反向進行前一個查找動做
:set ignorecase  忽略大小寫的查找
:set noignorecase  不忽略大小寫的查找
:set hlsearch  高亮搜索結果,全部結果都高亮顯示,而不是隻顯示一個匹配。
:set nohlsearch  關閉高亮搜索顯示
:nohlsearch  關閉當前的高亮顯示,若是再次搜索或者按下n或N鍵,則會再次高亮。
:set incsearch  逐步搜索模式,對當前鍵入的字符進行搜索而沒必要等待鍵入完成。
:set wrapscan  從新搜索,在搜索到文件頭或尾時,返回繼續搜索,默認開啓。
*或者# 會選中光標處的WORD,而後 直接輸入N/n,開始查找。

替換,替換操做能夠實現縮進,註釋。

r{CHAR} 替換光標處的字符。
R{WORD} 替換光標處的字符,直到輸入<ESC>或者CTRL+[爲止。
:s/old/new/ 用old替換new,替換當前行的第一個匹配
:s/old/new/c 用old替換new,替換當前行的第一個匹配 帶確認選項的刪除(選項y[es] ,n[o] ,a[ll] ,q[uit],l[ast]替換完當前退出,Ctrl+e ,Ctrl+y)
:%s/\s\+$// 刪除行尾空格
:s/old/new/g 用old替換new,替換當前行的全部匹配
:%s/old/new/ 用old替換new,替換全部行的第一個匹配
:%s/old/new/g 用old替換new,替換全部行的全部匹配
:%s/\([^,]*\), \(.*\)/\2 \1/
:n,m s/old/new/g 在第n行到第m行之間,用old替換new,替換全部匹配。
& 重複最後的:s命令
:10,20 s/^/    /g 在第10行知第20行每行前面加四個空格,用於縮進。
:起始行號,結束行號s/^/註釋符/g
:起始行號,結束行號s/^註釋符//g

查找並執行命令

:g/text1/s/text2/text3 查找包含text1的行,用text3替換text2
:g/text/command 在全部包含text的行運行command所表示的命令 :g/^/m 0
:v/text/command 在全部不包含text的行運行command所表示的命令

4.刪除 剪切 拷貝 粘貼

vim是不支持系統的剪切板,linux中,一般經過vim的寄存器來實現,"+y 複製到系統剪切板 ,"+p 把系統粘貼板裏的內容粘貼到vim,對於mac,macvim是command+c 和command+v

x 刪除光標後 N 個字符
d{motion} 刪除移動命令通過的字符,例如 dj 刪除當前行及下面一行。
dd 刪除當前行
d$ 刪除光標到行尾的內容 同D。
Ndd 刪除當前行開始的N行。
dG 刪除當前行以後全部行
dgg 刪除當前行以前全部行
:1,10d 刪除1-10行
:11,$d 刪除11行及之後全部的行
:1,$d 刪除全部行
J 合併當前行及下面 N 行。即刪除空格。
s 刪除光標處的 N 個字符並進入插入模式
S 刪除光標下的 N 行並進入插入模式
c{motion} 改變移動命令通過的字符,同d 命令,並進入插入模式。
y  拷貝當前光標選中部分,常在可視模式中使用。
yy 拷貝當前行下 N 行
:1,10y 複製1-10行
:,10y  複製光標所在行到10行
p  在當前光標後粘貼 N 次,若是以前使用了yy命令來複制一行,那麼就在當前行的下一行粘貼。
P  在當前行前粘貼 N 次
:1,n co m 將1-n行插入到第m行以後。
:1,$ co $ 將整個文件複製一份並添加到文件尾部。

5.撤銷 重複

u 撤銷(Undo)
U 撤銷對整行的操做
Ctrl + r ,即撤銷的撤銷。
. 重複上次修改,包含你在插入模式的插入。許多若是想屢次使用的修改命令,能夠它代替。

6.EX命令

當輸入:會在底行出現:,再次輸入的內容都會出如今:以後,這些輸入的內容,會被認做EX命令。
經過EX命令設置的vim選項,都只在當前編輯窗中有效,退出後,則消失,如需永久有效,需修改vim的配置文件.vimrc。
常使用的EX命令:

:q 退出文件
:w 保存文件 (或者+ filename 另存爲)
:wq 保存退出文件(也可在普通模式下使用 ZZ 快捷鍵)
:x 保存退出 與wq的區別是保存退出時,若是該文件沒有修改,則不會修改文件的時間戳,wq則必定會。
:q! 強制退出
:help+命令 查看幫助
:e 後接文件名,打開文件,支持ftp,不接文件名時,直接刷新當前文件。
:e!放棄全部修改,從新打開文件。
:open+<file> 打開file
#可經過:files或者:ls或者:buffers,來查看vim緩衝區,便可跳轉文件。
:bn 切換到下一個文件 
:n   編輯下一個文件
:bp 切換到上一個文件
:new 打開個新窗口或者在新窗口打開文件
:split 打開個新窗口或者在新窗口打開文件(vsplit也能夠,split打開的窗口都是橫向的,使用vsplit能夠縱向打開窗口。)
:!command  在當前目錄下執行shell命令。
:sh 打開子shell,ctrl+d或者exit退出 (或者使用Ctrl+z 掛起 ,fg返回)
:r 文件名   在光標所在處插入一個文件的內容。
:10r 文件名   將文件插入至 10 行以後。
:r! {command} 將命令 {command} 的標準輸出插入到光標之下
:10,29write [!或者>>]name   將10-29 行的內容保存到文件name中。!表示強制 >> 表示追加 
:f 顯示文件名、當前的行號、文件的總行數和文件位置的百分比,是否修改。
:f+<filename> 改變編輯中的文件名。
:iab[breviate] re React 定義插入模式下縮寫。
:abclear
#set 選項
:set+<option> ,設置當前打開的vim 編輯器的選項,例如是否展現行號,自動縮進等。
:set all ,查看全部選項。
:set shiftwidth=4 ,設置自動縮進 4 個空格, 固然要設自動縮進先。
:set tabstop=4 ,   實際的 tab 即爲 4 個空格。
:set nonumber ,   設置不展現行號。
:set number ,   設置展現行號。
:set numberwidth=4 ,設置行號所佔寬度
:set ai ,          設置自動縮進
:map ,查看定義的全部映射,(映射?例如a映射ab,則a與ab 相同做用。在一些插件中都會使用映射)

7.其餘

:ls 查看緩存區
q: 查看命令窗口
:reg 查看寄存器
:marks 查看書籤
:delm[ark] + 書籤名  刪除書籤。
<{motion} 將動做 {motion} 覆蓋的全部行向左移動 1個移位寬度
>{motion} 將動做 {motion} 覆蓋的全部行向右移動 1個移位寬度
>> 向右移動一個移位寬度
<< 向左移動一個移位寬度
:n,m>> ,n到m行右移一個移位寬度
CTRL+g 顯示文件名、當前的行號、文件的總行數和文件位置的百分比,是否修改。
:= 打印文件中的行數
gf 打開光標處文件,文件要在當前目錄內。
gd 到達光標所在處函數或者變量的定義處。
:'.   它移動光標到上一次的修改行
K  看光標所指標識符的 man 幫助頁
~ 大小寫替換,同時光標前移
gu{motion} 通過的位置內容小寫(guu 當前行)
gU{motion} 通過的位置內容大寫(gUU 當前行)
g~{motion} 通過的位置內容大小寫互換。
zfap 按段落摺疊
zo 打開摺疊

插入模式

只有在插入模式下,才能夠作文字輸入,不會被認爲是快捷鍵,在普通模式下能夠經過i進入插入模式。

CTRL+c 同<ESC>離開插入模式
CTRL+o {command}短暫離開插入模式,執行命令command後回到插入。

可視模式

可視模式下可使用普通模式的大部分快捷鍵,當進入可視模式時左下角顯示--VISUAL--,具體細節可查看vim的文檔
可視模式主要是作選擇操做,此時移動光標的操做都會把光標通過的部分選中。

CTRL+c 同<ESC>離開可視模式
ab 選擇 "一個塊" (從 "[(" 至 "])") (block)
ib 選擇 "內含塊" (從 "[(" 到 "])")
aB 選擇 "一個大塊" (從 "[{" 到 "]}") (Block)
iB 選擇 "內含大塊" (從 "[{" 到 "]}")
U 選中部分大寫
u 選中部分小寫

經常使用插件

NERDTree

NERDTree最經常使用的插件之一,以樹形結構展現文件夾,實現咱們在IDE的項目視圖。能夠去官方網站https://github.com/scrooloose...查看如何下載安裝。
主要快捷鍵:

ctrl + w + h    工做窗口左移
ctrl + w + l    工做窗口右移
ctrl + w + w    光標自動在左右側窗口切換
ctrl + w + r    移動當前窗口的佈局位置
o       在已有窗口中打開文件、目錄或書籤,並跳到該窗口
go      在已有窗口 中打開文件、目錄或書籤,但不跳到該窗口
t       在新 Tab 中打開選中文件/書籤,並跳到新 Tab
T       在新 Tab 中打開選中文件/書籤,但不跳到新 Tab
i       split 一個新窗口打開選中文件,並跳到該窗口
gi      split 一個新窗口打開選中文件,但不跳到該窗口
s       vsplit 一個新窗口打開選中文件,並跳到該窗口
gs      vsplit 一個新 窗口打開選中文件,但不跳到該窗口
!       執行當前文件
O       遞歸打開選中 結點下的全部目錄
x       合攏選中結點的父目錄
X       遞歸 合攏選中結點下的全部目錄
e       Edit the current dif
雙擊    至關於 NERDTree-o
中鍵    對文件至關於 NERDTree-i,對目錄至關於 NERDTree-e
D       刪除當前書籤
P       跳到根結點
p       跳到父結點
K       跳到當前目錄下同級的第一個結點
J       跳到當前目錄下同級的最後一個結點
k       跳到當前目錄下同級的前一個結點
j       跳到當前目錄下同級的後一個結點
C       將選中目錄或選中文件的父目錄設爲根結點
u       將當前根結點的父目錄設爲根目錄,並變成合攏原根結點
U       將當前根結點的父目錄設爲根目錄,但保持展開原根結點
r       遞歸刷新選中目錄
R       遞歸刷新根結點
m       顯示文件系統菜單
cd      將 CWD 設爲選中目錄
I       切換是否顯示隱藏文件
f       切換是否使用文件過濾器
F       切換是否顯示文件
B       切換是否顯示書籤
q       關閉 NerdTree 窗口
?       切換是否顯示 Quick Help
#切換標籤頁
:tabnew [++opt選項] [+cmd] 文件 創建對指定文件新的tab
:tabc   關閉當前的 tab
:tabo   關閉全部其餘的 tab
:tabs   查看全部打開的 tab
:tabp   前一個 tab
:tabn   後一個 tab

pathogen

插件管理工具,vim有不少插件可供咱們使用,當插件數量大的時候就須要一個專門的工具去管理,pathogen就是實現功能,下載安裝https://github.com/tpope/vim-...

其餘

vim 有不少有用的插件,像ctags、taglist、foldmethod、xmledit、visualmark、vim-markdown等。固然也有一些人把一些好的配置分享出來,比較受歡迎的有:
https://github.com/spf13/spf1...
https://github.com/carlhuda/j...

最近發現個,能夠看看試着去配置本身的vim
https://github.com/square/max...

相關文章
相關標籤/搜索