vim: filetype=markdown
vi / vim 基本操作
vi/vim 共分為三種模式:分別是命令模式(Command mode)失暴,插入模式(Insert mode)和底線命令模式(Last line mode)
[命令模式]:
用戶剛剛啟動(dòng) vi/vim,便進(jìn)入了命令模式。此狀態(tài)下敲擊鍵盤動(dòng)作會(huì)被Vim識(shí)別為命令,而非輸入字符。比如我們此時(shí)按下i,并不會(huì)輸入一個(gè)字符督惰,i被當(dāng)作了一個(gè)命令。
以下是常用的幾個(gè)命令:
i 切換到插入模式旅掂,以輸入字符赏胚。
i 在光標(biāo)左側(cè)插入正文
a 在光標(biāo)右側(cè)插入正文
o 在光標(biāo)所在行的下一行增添新行
O 在光標(biāo)所在行的上一行增添新行
I 在光標(biāo)所在行的開(kāi)頭插入
A 在光標(biāo)所在行的末尾插入
u 撤消前一條命令的結(jié)果;
. 重復(fù)最后一條修改正文的命令商虐。
若想要編輯文本:?jiǎn)?dòng)Vim觉阅,進(jìn)入了命令模式,按下i秘车,切換到輸入模式留拾。
命令模式只有一些最基本的命令,因此仍要依靠底線命令模式輸入更多命令鲫尊。
: 切換到底線命令模式,以在最底一行輸入命令沦偎。
[縮進(jìn)]
隨便輸入幾行文字疫向,移動(dòng)光標(biāo)到第一行,然后在命令模式下輸入
3>> 光標(biāo)下3行右移
3<< 光標(biāo)下3行左移
set expandtab 輸入tab時(shí)自動(dòng)將其轉(zhuǎn)化為空格
[保存退出]
w 保存豪嚎;or w filename 另存為 (:w file 將編輯的內(nèi)容寫(xiě)入 file 文件搔驼,保持原有文件的內(nèi)容不變)
q 在未作修改的情況下退出;
q! 放棄所有修改侈询,退出編輯程序舌涨。
wq or ZZ 保存退出(zz不保存空文件)
部分保存
:a,bw file 將第 a 行至第 b 行的內(nèi)容寫(xiě)入 file 文件
:345 將光標(biāo)移到第 345 行
:345w file 將第 345 行寫(xiě)入 file 文件
:3,5w file 將第 3 行至第 5 行寫(xiě)入 file 文件
:1,.w file 將第 1 行至當(dāng)前行寫(xiě)入 file 文件
:.,$w file 將當(dāng)前行至最后一行寫(xiě)入 file 文件
:.,.+5w file 從當(dāng)前行開(kāi)始將 6 行內(nèi)容寫(xiě)入 file 文件
:1,$w file 將所有內(nèi)容寫(xiě)入 file 文件,相當(dāng)于 :w file 命令
讀取和編輯
:r file 讀取 file 文件的內(nèi)容扔字,插入當(dāng)前光標(biāo)所在行的后面
:e file 編輯新文件 file 代替原有內(nèi)容
:f file 將當(dāng)前文件重命名為file(修改的內(nèi)容保存在新文件囊嘉,源文件不變)
:f 打印當(dāng)前文件名稱和狀態(tài),如文件的行數(shù)革为、光標(biāo)所在的行號(hào)等
[查找和替換]
: .,$ s/str1/str2/g 用字符串 str2 替換正文當(dāng)前行到末尾所有出現(xiàn)的字符串 str1
: 1,$ s/str1/str2/g 用字符串 str2 替換正文中所有出現(xiàn)的字符串 str1
g 放在命令末尾扭粱,表示對(duì)搜索字符串的每次出現(xiàn)進(jìn)行替換,不止匹配每行中的第一次出現(xiàn);不加g震檩,表示只對(duì)搜索字符串的首次出現(xiàn)進(jìn)行替換琢蛤;
s 表示后面跟著一串替換的命令蜓堕;
% 表示替換范圍是所有行,即全文博其。
gc 表示對(duì)每一處替換進(jìn)行確認(rèn)(反白顯示的是當(dāng)前需要確認(rèn)項(xiàng))
[Shell切換]
:!shell_command 執(zhí)行完 shell_command 后回到Vim
這稱為Shell切換套才。它允許執(zhí)行任何可以在標(biāo)準(zhǔn)的Shell提示符下執(zhí)行的命令。當(dāng)這條命令執(zhí)行完畢慕淡,控制返回給編輯程序背伴。又可以繼續(xù)編輯對(duì)話過(guò)程。
[分屏]
:split(可用縮寫(xiě) :sp) 上下分屏儡率。后面跟已經(jīng)存在的文件名則打開(kāi)該文件挂据。
:vsplit(可用縮寫(xiě) :vsp) 左右分屏。 后面跟已經(jīng)存在的文件名則打開(kāi)該文件儿普。
:new = sp
:vnew = vsp
Ctrl+w+h 切換到當(dāng)前分屏的左邊一屏崎逃;
Ctrl+w+l 切換到當(dāng)前分屏的右邊一屏;
Ctrl+w+j 切換到當(dāng)前分屏的下方一屏
Ctrl+w+w 來(lái)跳轉(zhuǎn)分屏眉孩,不過(guò)跳轉(zhuǎn)方向則是在當(dāng)前Vim窗口所有分屏中个绍,按照逆時(shí)針?lè)较蛱D(zhuǎn)
[分屏窗口大小調(diào)整]
ctrl-w + 增加一行 - 減少一行
> 寬增加 < 寬減少
[標(biāo)簽頁(yè)]
Vim的標(biāo)簽(Tab)頁(yè),類似瀏覽器的標(biāo)簽頁(yè)浪汪,一個(gè)標(biāo)簽頁(yè)打開(kāi)一個(gè)Vim的窗口巴柿,一個(gè)Vim的窗口可以支持N個(gè)分屏。
在Vim中新建一個(gè)標(biāo)簽的命令是:
:tabnew
如果要在新建標(biāo)簽頁(yè)的同時(shí)打開(kāi)一個(gè)文件死遭,則可以在命令后面直接附帶文件路徑:
:tabnew filename
Vim中的每個(gè)標(biāo)簽頁(yè)有一個(gè)唯一的數(shù)字序號(hào)广恢,第一個(gè)標(biāo)簽頁(yè)的序號(hào)是0,從左向右依次加一呀潭。
[可視模式]
v,V,<C-v>(在Windows下應(yīng)該是<C-q>)
J → 把所有的行連接起來(lái)
< 或 > 左右縮進(jìn)
= 自動(dòng)給縮進(jìn)
[vim幫助]
在vim的安裝目錄下钉迷,有一個(gè)vimtutor.bat的中文幫助文件
[vim配置]
配色:
菜單->編輯->啟動(dòng)設(shè)定 或者直接編輯_vimrc文件
寫(xiě)入 colo evening evening是配色名,也就是vim_root/color/evening.vim文件钠署】反希可以從網(wǎng)上下載配色文件,然后放到這個(gè)目錄下即可谐鼎。
字體大薪Ⅲ :
Linux/Unix命令格式:set guifont=字體 +\+空格 + 字體大小
Windows/Mac命令格式:set guifont=字體 + : + 字體大小
相同的是,兩個(gè)系統(tǒng)對(duì)空格都需要使用反斜杠\
進(jìn)行轉(zhuǎn)意狸棍。
不同的是身害,關(guān)于字體大小的表述。Linux/Unix字體大小直接寫(xiě)字號(hào)隔缀,Windows/Mac字號(hào)需要加上h的高度名题造。
實(shí)例:set guifont=幼圓:h10
關(guān)于命令和對(duì)象
許多改變文本的命令都由一個(gè)操作符和一個(gè)動(dòng)作構(gòu)成。
使用刪除操作符 d 的刪除命令的格式如下:
d motion
其中:
d - 刪除操作符猾瘸。
motion - 操作符的操作對(duì)象(在下面列出)界赔。
一個(gè)簡(jiǎn)短的動(dòng)作列表:
w - 從當(dāng)前光標(biāo)當(dāng)前位置直到下一個(gè)單詞起始處丢习,不包括它的第一個(gè)字符。
e - 從當(dāng)前光標(biāo)當(dāng)前位置直到單詞末尾淮悼,包括最后一個(gè)字符咐低。
$ - 從當(dāng)前光標(biāo)當(dāng)前位置直到當(dāng)前行末。
因此輸入 de 會(huì)從當(dāng)前光標(biāo)位置刪除到單詞末尾袜腥。
特別提示:
對(duì)于勇于探索者见擦,請(qǐng)?jiān)谡DJ较旅鎯H按代表相應(yīng)動(dòng)作的鍵而不使用操作符,您
將看到光標(biāo)的移動(dòng)正如上面的對(duì)象列表所代表的一樣羹令。
[執(zhí)行外部命令]
輸入 :! 然后緊接著輸入一個(gè)外部命令可以執(zhí)行該外部命令
例如:!dir
提示:您還可以讀取外部命令的輸出鲤屡。例如, :r !ls 可以讀取 ls 命令的輸出福侈,并把它放置在光標(biāo)下面酒来。
[關(guān)于Backspace按鍵]
In insert mode, to allow the backspace key to erase previously entered characters, autoindent, and newlines, set the following option:
:set backspace=indent,eol,start
Or
:set backspace=2
By default this option is empty, not allowing you to backspace over characters that weren't entered during the current insert mode session, the automatically inserted indentation, or across line breaks. This is the standard vi behavior.
在插入模式,允許Backspace鍵刪除先前輸入的字符肪凛,自動(dòng)縮進(jìn)堰汉,和換行、設(shè)置以上選項(xiàng):
默認(rèn)情況下伟墙,此選項(xiàng)是空的翘鸭,不允
許你進(jìn)入插入模式刪除不是當(dāng)前會(huì)話期間的字符(你可以刪除本次你鍵入的字符,用backspace按鍵戳葵。
命令補(bǔ)全
例如輸入: :e 接著按 CTRL-D 鍵就乓,Vim 會(huì)顯示以 e 開(kāi)始的命令的列表。
文件格式和類型
查看文件格式: *:set fileformat* 或者用 *set ff=unix* 設(shè)置
查看文件類型: *:set filetype*
設(shè)置文件類型: *:set filetype=markdown* 一個(gè).txt文件的filetype設(shè)置為markdown拱烁,就和普通的markdown文件同樣的顯示效果(.md)
另一種方式就是在文件內(nèi)容中指定档址,Vim會(huì)從文件的頭幾行自動(dòng)掃描文件是否有聲明文件的類型的代碼,如在文件的行首加入# vim:filetype=python(這里用中文冒號(hào)進(jìn)行了替換邻梆,不然vim仍然會(huì)識(shí)別到這一行,會(huì)報(bào)錯(cuò) :) )绎秒,Java文件變通的做法:/* vim:filetype=java */浦妄,總之就是把這行當(dāng)作注釋,以致于不影響文件的編譯见芹,這樣Vim不通過(guò)文件名也能檢測(cè)出文件是什么類型了剂娄。
折疊
vim 提供 6中折疊方式
manual 手工定義折疊
indent 更多的縮進(jìn)表示更高級(jí)別的折疊
expr 用表達(dá)式來(lái)定義折疊
syntax 用語(yǔ)法高亮來(lái)定義折疊
diff 對(duì)沒(méi)有更改的文本進(jìn)行折疊
marker 對(duì)文中的標(biāo)志折疊
設(shè)置方法:可用選項(xiàng) 'foldmethod' 來(lái)設(shè)定折疊方式:set fdm=6選1
注意,每一種折疊方式不兼容玄呛,即:你不能用expr又用marker方式阅懦。
禁用折疊:
set nofoldenable
以手工定義折疊為例:
zf 創(chuàng)建折疊,比如在正常模式下,輸入zf然后回車徘铝,就折疊當(dāng)前行和下一行耳胎。輸入zf的時(shí)候惯吕,vim右下角能看到輸入提示。
zE 除去刪除 (Eliminate) 窗口里“所有”的折疊怕午。 僅當(dāng) 'foldmethod' 設(shè)為 "manual" 或 "marker" 時(shí)有效废登。
zd 刪除 (delete) 在光標(biāo)下的折疊。僅當(dāng) 'foldmethod' 設(shè)為 "manual" 或 "marker" 時(shí)有效郁惜。
zo 打開(kāi)光標(biāo)下的折疊
zc 關(guān)閉光標(biāo)下的折疊
zR 打開(kāi)所有折疊
zM 關(guān)閉所有折疊
zf56G 從當(dāng)前行折疊到56行堡距,方向前后均可,例如可以 zf1G
10zf 創(chuàng)建從當(dāng)前行起到后10行的代碼折疊兆蕉。
10zf-或zf10↑羽戒,創(chuàng)建從當(dāng)前行起到之前10行的代碼折疊。
在括號(hào)處zf%虎韵,創(chuàng)建從當(dāng)前行起到對(duì)應(yīng)的匹配的括號(hào)上去(()易稠,{},[]劝术,等)缩多。
vim 行位加2個(gè)空格
因?yàn)镸arkdown的換行格式為2個(gè)回車或者行位2個(gè)空格,故在普通編輯完文本后养晋,使用替換命令在行尾加2個(gè)空格衬吆,以符合Markdown語(yǔ)法。
:%s/\n/ /r\g
特殊字符
- 查看vim所有可輸入的特殊字符
:help digraph-table - 輸入特殊字符:<ctrl-q>字符編碼 linux是 ctrl-v
- 顯示當(dāng)前文件的二進(jìn)制編碼:
:%!xxd 恢復(fù): %!xxd -r - 轉(zhuǎn)義字符: 一些特殊字符绳泉,在使用的時(shí)候需要轉(zhuǎn)義逊抡,使用 \ ,比如: [ $ % # ]等
Tab鍵和空格互換
對(duì)于已保存的文件,可以使用下面的方法進(jìn)行空格和TAB的替換:
TAB替換為空格:
:set ts=4
:set expandtab
:%retab!
空格替換為TAB:
:set ts=4
:set noexpandtab
:%retab!
加!是用于處理非空白字符之后的TAB零酪,即所有的TAB冒嫡,若不加!,則只處理行首的TAB四苇。
update: 2017/09/05 周二