為什么選擇Vim?
- vim無(wú)所不在削锰。學(xué)習(xí)vim無(wú)需擔(dān)心到了其他平臺(tái)需要學(xué)習(xí)新編輯器本鸣。
- 可擴(kuò)展性∪频拢可以只用它來(lái)編輯配置文件摄咆,也可以將它當(dāng)做開發(fā)平臺(tái)凡蚜。
- 功能強(qiáng)大.
Vim即語(yǔ)言?
動(dòng)詞
所謂動(dòng)詞指的是我們執(zhí)行的動(dòng)作豆同,這些動(dòng)作可以施加在名詞之上番刊『郏可以看看下面幾個(gè)常見(jiàn)的動(dòng)作:
- d: 刪除
- c: 修改
- y: 拖拉(拷貝)
- v: 可視化選擇 (V for line vs. character)
修飾語(yǔ)
定語(yǔ)用在名詞之前影锈,表明以哪種方式來(lái)執(zhí)行動(dòng)作。幾個(gè)例子:
i: 內(nèi)部
a: 周圍
NUM: 數(shù)字 (e.g.: 1, 2, 10)
t: 查找到指定字符蝉绷,并跳轉(zhuǎn)到這個(gè)字符的前面
f: 查找到指定字符鸭廷,并跳轉(zhuǎn)到字符所處的位置
/: 查找字符串 (literal or regex)
名詞
在英語(yǔ)中,名詞用來(lái)表示你所操作的對(duì)象熔吗。它們都是客體辆床。在vim中也是這樣。下面列出vim中的名詞:
- w: 單詞
- s: 句子
- ): 句子 (另一種操作方式)
- p: 段落
- }: 段落 (另一種操作方式)
- t: 標(biāo)簽 ( HTML/XML)
- b: 塊 (編程語(yǔ)言)
Nouns as motion
同樣桅狠,你也可以將名詞視為移動(dòng)動(dòng)作讼载,這意味著你可以用名詞表示在文本的跳轉(zhuǎn)范圍。我們可以在“移動(dòng)”章節(jié)中看到例子說(shuō)明中跌。
對(duì)于下面這些符號(hào)咨堤,根據(jù)顏色的不同來(lái)區(qū)分句子的不同組成部分:
刪除兩個(gè)單詞
d2w修改所在的句子(刪除當(dāng)前句子并進(jìn)入插入模式)
cis拷貝當(dāng)前所在的段落
yip修改當(dāng)前光標(biāo)所在位置到下一個(gè)括號(hào)之間的文本內(nèi)容
ct<
記住,這里的“目標(biāo)”是尖括號(hào)漩符,除此之外還可以是任意字符一喘。從語(yǔ)法上來(lái)說(shuō),使用單個(gè)字母”t”來(lái)表示這個(gè)向前查找的“目標(biāo)”嗜暴,這樣我就可以使用“dt.”表示刪除當(dāng)前位置到下一個(gè)句號(hào)之間的內(nèi)容凸克,”yt;”表示拷貝當(dāng)前位置到下一個(gè)分號(hào)之間的內(nèi)容议蟆。
—些對(duì)文件的基本操作
- Vi file :使用vim打開要編輯的文件
- :w :保存修改
- :q! : 退出vim,后面加感嘆號(hào)表示不保存修改強(qiáng)制退出
- :wq: 保存修改并退出
- :saveas ~/some/path/: 將文件保存到其他位置
【注意:相比較:wq 我更喜歡使用ZZ萎战,因?yàn)槲矣X(jué)得不需要輸入冒號(hào)我覺(jué)得會(huì)快一點(diǎn)咐容。也可以使用:x】
ZZ: 同:wq
搜索
- /{string}: 搜索字符串
- t : 跳轉(zhuǎn)到某一字符前
- F : 跳轉(zhuǎn)到某一字符處
- *:搜索當(dāng)前光標(biāo)位置單詞的其他實(shí)例
- n : 搜索完成后,跳轉(zhuǎn)到下一個(gè)匹配實(shí)例
- N :搜索完成后蚂维,跳轉(zhuǎn)到上一條匹配實(shí)例
- ; : 跳轉(zhuǎn)到指定字符時(shí)疟丙,使用分號(hào)跳轉(zhuǎn)到下一實(shí)例
- , :跳轉(zhuǎn)到指定字符時(shí),使用逗號(hào)跳轉(zhuǎn)到上一實(shí)例
移動(dòng)動(dòng)作
- j : 向下移動(dòng)一行
- k :向上移動(dòng)一行
- h :向左移動(dòng)一個(gè)字符
- l :向右移動(dòng)一個(gè)字符
行內(nèi)移動(dòng)
你可以在當(dāng)前行內(nèi)自由的移動(dòng)鸟雏。
- 0: 移動(dòng)到行首
- $: 移動(dòng)到行末
- ^: 移動(dòng)到行首非空字符
- t”: 跳轉(zhuǎn)到下一個(gè)引號(hào)前
- f”: 跳轉(zhuǎn)到下一個(gè)引號(hào)處
【注意: 逗號(hào)和分號(hào)會(huì)重復(fù)之前的t和f跳轉(zhuǎn)】 - n+ //向下跳n行
- n- //向上跳n行
- nG //跳到行號(hào)為n的行
- G //跳至文件的底部
按單詞移動(dòng)
除了按行和字符移動(dòng)外享郊,還可以按單詞移動(dòng):
w: 先前移動(dòng)一個(gè)單詞
b: 向后移動(dòng)一個(gè)單詞
e: 移動(dòng)到當(dāng)前單詞末尾
當(dāng)使用大寫字母時(shí),vim會(huì)忽略掉單詞間的分隔符孝鹊,這樣原本被分隔符隔開的多個(gè)單詞會(huì)因此被視為一個(gè)大單詞炊琉。W: 向前移動(dòng)一個(gè)大單詞
B: 向后移動(dòng)一個(gè)大單詞
這種大寫命令的優(yōu)勢(shì)在我們實(shí)際工作中會(huì)頻繁地碰到。
按句子或段落移動(dòng)
- ):向前移動(dòng)一條句子
- }: 向前移動(dòng)一個(gè)段落
在屏幕間移動(dòng)
- H:向上移動(dòng)一屏
- M:移動(dòng)到屏幕中間
- L:移動(dòng)到屏幕底端
- gg: 移動(dòng)到文件頂端
- G:移動(dòng)到文件結(jié)尾
- ^U: 向上移動(dòng)半屏
- ^D: 向下移動(dòng)半屏
- ^F: 下一頁(yè)
- ^B: 上一頁(yè)
來(lái)回跳轉(zhuǎn)
在普通模式下又活,可以在兩點(diǎn)間來(lái)回跳轉(zhuǎn)苔咪,這在實(shí)際操作中非常有用。
- Ctrl-i: 跳轉(zhuǎn)到之前所在的位置
- Ctrl-o: 跳回你實(shí)際的位置
其他動(dòng)作
- :$line_numberH: 移動(dòng)到指定行號(hào)
- M: 移動(dòng)到屏幕中間
- L: 移動(dòng)到屏幕底端
- ^E: 向上滾動(dòng)一行
- ^Y: 向下滾動(dòng)一行
- ^U: 向上移動(dòng)半屏
- ^D: 向下移動(dòng)半屏
- ^F: 向下移動(dòng)一頁(yè)
- ^B: 向上移動(dòng)一頁(yè)
現(xiàn)在將所以移動(dòng)動(dòng)作總結(jié)到一起:
移動(dòng)命令總結(jié)
j: move down one line
k: move up one line
h: move left one character
l: move right one character
0: move to the beginning of the line
$: move to the end of the line
w: move forward one word
b: move back one word
e: move to the end of your word
): move forward one sentence
}: move forward one paragraph
:line_number: move to a given line number
H: move to the top of the screen
M: move to the middle of the screen
L: move to the bottom of the screen
^E: scroll up one line
^Y: scroll down one line
gg: go to the top of the file
G: go to the bottom of the file
^U: move up half a page
^D: move down half a page
^F: move down a page
^B: move up a page
Ctrl-i: jump to your previous navigation location
Ctrl-o: jump back to where you were
基礎(chǔ)修改/插入命令
- i : 從當(dāng)前光標(biāo)位置之前插入
- a : 從當(dāng)前光標(biāo)位置之后插入
- I :從當(dāng)前行開始位置插入
- A :從當(dāng)前行行末插入
- o : 在當(dāng)前行下新增一行柳骄,并從新行插入
- O :在當(dāng)前行上新增一行团赏,并從新行插入
- r : 替換當(dāng)前光標(biāo)所在字符
- R :替換當(dāng)前光標(biāo)的字符,并一直向后替換(替換模式)
- cm:修改文本耐薯,其中m表示移動(dòng)的動(dòng)作舔清,比如,一個(gè)單詞曲初,一句或者一個(gè)段落体谒。
- C :修改當(dāng)前所在行
- ct?: 修改問(wèn)號(hào)前的這條問(wèn)句內(nèi)容
- s:替換當(dāng)前字符
- S: 替換整行
修改句子
cis
移動(dòng)到行首并進(jìn)入插入模式
I在當(dāng)前光標(biāo)位置之后進(jìn)入插入模式
a
從上面例子可知臼婆,有多種方式可以進(jìn)入插入模式輸入文本抒痒。還有一些簡(jiǎn)寫來(lái)執(zhí)行多條操作,比如說(shuō)刪除并進(jìn)入刪除模式颁褂。
刪除從光標(biāo)所在位置開始到行末的所有內(nèi)容故响,并進(jìn)入插入模式
C刪除當(dāng)前行并進(jìn)入插入模式
S
修改大小寫
可以通過(guò)波浪符來(lái)變更大小寫。就像你猜想的那種方式工作:不管你光標(biāo)所在字符還是可視模式下選擇的文本都可以颁独。
格式化文本
Vim還可以快速格式化文本彩届,比如格式化一整段文本,使用下面這個(gè)命令就可以很容易實(shí)現(xiàn):
格式化當(dāng)前段落
gq ap
gp根據(jù)預(yù)設(shè)的文本寬度testwidth以及參數(shù)指定的文本范圍來(lái)工作奖唯,這意味著對(duì)于你指定的任意范圍的文本惨缆,gp都可以自動(dòng)校準(zhǔn)寬度,使得文檔看起來(lái)干凈又整潔。
【注意: ap表示文本對(duì)象”整個(gè)段落”的覆蓋范圍】
刪除文本
- x: 刪除當(dāng)前光標(biāo)的字符
- X:刪除當(dāng)前光標(biāo)的前一個(gè)字符
- dm: 根據(jù)定義的m來(lái)確定刪除范圍坯墨,一個(gè)單詞或者一句話或者一個(gè)段落寂汇。
- dd: 刪除當(dāng)前行
- dt. : 刪除當(dāng)前位置到下一個(gè)句號(hào)之間的所有內(nèi)容
- D: 刪除當(dāng)前光標(biāo)位置到本行末的所有內(nèi)容(對(duì)比上面的C,D不會(huì)進(jìn)入插入模式)
- J: 將上下兩行合并(刪除兩行之間的換行符)
- nx //刪除從光標(biāo)開始的n個(gè)字符
- ndd //向下刪除當(dāng)前行在內(nèi)的n行
撤消與重做
- u: 撤銷上一個(gè)動(dòng)作
- U //撤銷對(duì)當(dāng)前行的所有操作
- Ctrl-r: 重做上一個(gè)動(dòng)作
重復(fù)動(dòng)作
使用“.”來(lái)重復(fù)上一次操作
你所做的許多操作可能都有重復(fù)的價(jià)值捣染。比如進(jìn)入插入模式添加一些文本內(nèi)容骄瓣。你只需執(zhí)行一次,然后一直執(zhí)行點(diǎn)命令來(lái)重復(fù)就可以了耍攘。請(qǐng)看下面的例子榕栏。
刪除一個(gè)單詞
dw
緊接著執(zhí)行,再刪除5個(gè)單詞
多么給力蕾各! 如果結(jié)合可視化模式扒磁,發(fā)揮的能力更讓你大開眼界。
復(fù)制與粘貼
- yy //將當(dāng)前行復(fù)制到緩存區(qū)式曲,也可以用 "ayy 復(fù)制妨托,"a 為緩沖區(qū),a也可以替換為a到z的任意字母吝羞,可以完成多個(gè)復(fù)制任務(wù)兰伤。
- nyy //將當(dāng)前行向下n行復(fù)制到緩沖區(qū),也可以用 "anyy 復(fù)制钧排,"a 為緩沖區(qū)敦腔,a也可以替換為a到z的任意字母,可以完成多個(gè)復(fù)制任務(wù)恨溜。
- yw //復(fù)制從光標(biāo)開始到詞尾的字符符衔。
- nyw //復(fù)制從光標(biāo)開始的n個(gè)單詞。
- y^ //復(fù)制從光標(biāo)到行首的內(nèi)容筒捺。
- y$ //復(fù)制從光標(biāo)到行尾的內(nèi)容柏腻。
- p //粘貼剪切板里的內(nèi)容在光標(biāo)后纸厉,如果使用了前面的自定義緩沖區(qū)系吭,建議使用"ap 進(jìn)行粘貼。
- P //粘貼剪切板里的內(nèi)容在光標(biāo)前颗品,如果使用了前面的自定義緩沖區(qū)肯尺,建議使用"aP 進(jìn)行粘貼。
交換兩行的位置
- ddp
使用這條命令可以很快速的交換兩行的位置躯枢。第一部分刪除你所在的行则吟,第二部分將它粘貼回之前所在位置的下面。(ps:文章中用的是above锄蹂,但是實(shí)際上拷貝回下方位置)
拼寫檢查
如果沒(méi)有拼寫檢查的話氓仲,感覺(jué)會(huì)很糟糕,還好vim這方面做得很好。當(dāng)然我們需要先在配置文件中配置拼寫檢查選項(xiàng)敬扛。
在~/.vimrc的某個(gè)位置中添加
找出拼寫錯(cuò)誤
如果在配置文件中設(shè)置了拼寫檢查的選項(xiàng)晰洒,那么拼錯(cuò)的單詞會(huì)自動(dòng)添加下劃線。你也可以手動(dòng)輸入:set spell和:set nospell來(lái)啟用或禁用啥箭。
使用以下命令來(lái)跳轉(zhuǎn):
跳轉(zhuǎn)到下一處拼寫錯(cuò)誤
]s跳轉(zhuǎn)到上一處拼寫錯(cuò)誤
[s若光標(biāo)處是錯(cuò)誤單詞谍珊,給出修改建議
z=將識(shí)別的錯(cuò)誤單詞標(biāo)記正確
zg將vim視為正確的單詞標(biāo)記為錯(cuò)誤單詞
zw
替換
基本設(shè)置為:%s
將每行的foo替換為bar
:%s /foo/bar/g
將當(dāng)前行中的foo替換為bar
:s /foo/bar/g
【注意: 兩個(gè)命令的不同之處在于,單行替換s前少了%】