成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Vim 的哲學(xué)(三)

klinson / 2545人閱讀

摘要:插件鍵位映射技巧性的配置等等都是錦上添花,它們有助于你進(jìn)一步提高效率以及個(gè)性化你的工作環(huán)境,但是對(duì)于哲學(xué)的理解幫助甚少。為你開啟語(yǔ)法高亮。你可以自定義各種語(yǔ)言的語(yǔ)法高亮,無(wú)非就是根據(jù)這些規(guī)

  

如果沒(méi)有挑戰(zhàn),人生將多么無(wú)趣!

兩種副本

在我的硬盤上總是保留著(至少)兩份 Vim 的配置文件。其中一份是所謂“完全正式版”,它的文件名是 .vimrc,到本系列結(jié)束的時(shí)候,我們將了解其中絕大部分的內(nèi)容,并且它的內(nèi)容也是會(huì)隨時(shí)更新的(根據(jù)使用者的偏好和需要)。而另外一份則是被我稱之為“基礎(chǔ)練習(xí)版”,它的文件名是 .vimrc.basic,其內(nèi)容就是本文將要一一介紹的內(nèi)容。

不過(guò)在開始介紹具體內(nèi)容之前我有必要解釋一下我為什么保留兩份配置文件,以及我如何使用它們。

我認(rèn)為,只有在不依賴插件以及自己不了解的配置的前提下還能夠毫無(wú)障礙的使用 Vim,并且在任何時(shí)候都能以多種方式高效率的操作,才算是真的會(huì)用 Vim。插件、鍵位映射、技巧性的配置等等都是錦上添花,它們有助于你進(jìn)一步提高效率以及個(gè)性化你的工作環(huán)境,但是對(duì)于 Vim 哲學(xué)的理解幫助甚少。

還有一個(gè)原因是,我經(jīng)常不得不面對(duì)很多沒(méi)有配置的基礎(chǔ)環(huán)境,比如新安裝的服務(wù)器等。此時(shí)沒(méi)有我慣用的環(huán)境和配置幫助我,我不想讓自己感覺(jué)到束手束腳,我希望我可以不需要依賴插件和高級(jí)配置就能流暢高效的工作。

.vimrc.basic 的存在就是出于以上的原因,它只有很少的一些配置項(xiàng),并且不會(huì)更改 Vim 的一切默認(rèn)操作行為;它打開了一些基礎(chǔ)的交互反饋,關(guān)閉了缺省存在的一些惱人的設(shè)置,使得 Vim 的行為更加友好。這些設(shè)置的基礎(chǔ)來(lái)自 Vim Golf,它的口號(hào)很有意思:

  

Real Vim ninjas count every keystroke - do you?
“真的 Vim 忍者計(jì)算每一次敲鍵-你呢?”

Vim Golf 是這么玩的:每一個(gè)用戶可以提交自己的挑戰(zhàn),挑戰(zhàn)的內(nèi)容就是要求參賽者使用 Vim 完成指定的操作,操作所使用的敲鍵次數(shù)越少,排名就越高。當(dāng)然為了保證公平,每一位參賽者都需要使用一份一模一樣的配置文件,于是Vim Golf 為大家提供了這樣一份文件。此時(shí)此刻我并不是要讓你去參加 Vim Golf 的挑戰(zhàn),只是這些挑戰(zhàn)的內(nèi)容和參與條件都體現(xiàn)著我想要表達(dá)的 Vim 的哲學(xué),即“保持簡(jiǎn)單”,我認(rèn)為 Vim Golf 提供的這個(gè)基礎(chǔ)配置非常有助于每一位 Vim 用戶真正的掌握 Vim 操作的精髓。不過(guò),我在本文里介紹的配置并非和和 Vim Golf 提供的配置一模一樣,因?yàn)槲沂褂盟鼈兊哪繕?biāo)不是為了參賽,而是為了鍛煉自己。實(shí)際上,我還有一份專門用來(lái)參加 Vim Golf 挑戰(zhàn)的配置文件,叫做 .vimrc.golf。

在日常的工作當(dāng)中,我經(jīng)常切換到這個(gè)配置環(huán)境下,離開所有的插件、鍵位映射、宏等輔助手段,只使用 Vim 自身提供的操作來(lái)干活。這是一種挑戰(zhàn),我樂(lè)在其中,并且在這個(gè)過(guò)程我受益匪淺。我喜歡把這兩套配置看做是兩種難度的副本,普通副本只是為了我完成日常任務(wù),所以它要盡可能簡(jiǎn)化、高效,降低我的操作難度。而精英副本則是為了鍛煉我的操作,所以它拋棄一切輔助手段,提高“戰(zhàn)斗”的難度,當(dāng)然收獲的經(jīng)驗(yàn)值也是杠杠的。插件或其他輔助手段可以幫助你簡(jiǎn)化很多事情,但是沒(méi)了它們之后你是否還有辦法準(zhǔn)確高效的完成它們呢?只有在這樣的環(huán)境下,你才會(huì)意識(shí)到這些情況,從而迫使你去學(xué)習(xí)和練習(xí),去尋找答案,不斷地強(qiáng)化你自身的能力,逐步達(dá)到高手的境界。

你不必照搬我的方法來(lái)鍛煉自己,不過(guò)無(wú)論怎樣你至少也得有一份 .vimrc 吧?所以無(wú)論你是否喜歡我這樣的鍛煉方法,這份基礎(chǔ)文件都應(yīng)該成為你的 .vimrc 配置文件的基石。許多人拼拼湊湊出各種各樣的 .vimrc,但他們中的絕大多數(shù)都不會(huì)從無(wú)到有自己寫出一份漂亮的配置文件來(lái)。原因在于 Vim 的配置多如牛毛,罕有人樂(lè)意把它們一一吃透,所以集眾家之所長(zhǎng)炮制一份大雜燴也不失為一個(gè)辦法,不過(guò)你真的不希望能完全掌控自己的環(huán)境配置嗎?

Now, Let"s Go.

基礎(chǔ)環(huán)境配置

接下來(lái)我將帶你一行行完成一個(gè)最基礎(chǔ)的環(huán)境配置,此后我們的旅程也將會(huì)以此為起點(diǎn)。隨著時(shí)間的推移,你了解的越來(lái)越多,這份配置文件也將會(huì)越來(lái)越豐富,最終你會(huì)得到一個(gè)接近完美的環(huán)境配置(符合你的需求),并且你可以隨時(shí)做出相應(yīng)得調(diào)整,因?yàn)槟銓?duì)它們已經(jīng)了如指掌了。

在跟隨本章內(nèi)容的時(shí)候,你不必非得使用 Vim 不可,因?yàn)槲覀冞€沒(méi)有介紹更多的操作指令。你可以使用任何一種你熟悉的編輯器來(lái)編輯和保存這些基礎(chǔ)配置,到最后再打開 Vim 來(lái)驗(yàn)證它是否生效即可。

如何獲取幫助?

在學(xué)習(xí)的過(guò)程中,我沒(méi)有辦法做到面面俱到,滴水不漏。有時(shí)候你需要進(jìn)一步的幫助,這就需要你學(xué)會(huì)查看 Vim 的幫助文檔。

Vim 內(nèi)置有一套完整全面的用戶手冊(cè)和幫助文檔,我必須要說(shuō)這是我見過(guò)的最棒的文檔!使用這套文檔也很簡(jiǎn)單,只要在常規(guī)模式下輸入 :help 即可。: 將會(huì)帶你進(jìn)入命令模式,這是我們講到的第三種模式,以后我們還會(huì)進(jìn)一步了解它;help 是打開幫助文檔的命令。

為了進(jìn)一步幫助你方便的閱讀幫助文檔,我先簡(jiǎn)單介紹幾條操作指令。如果你不熟悉它們不要緊,閱讀幫助文檔正好是幫助你去掌握它們的好機(jī)會(huì)。

操作指令 功能描述 附注
h 光標(biāo)左移
j 光標(biāo)下移
k 光標(biāo)上移
l 光標(biāo)右移 可以用數(shù)字作為前綴實(shí)現(xiàn)多次移動(dòng)。比如 3j 可以向下移動(dòng)三次
CTRL-U 向上翻半頁(yè) u = upwards
CTRL-D 向下翻半頁(yè) d = downwards
CTRL-B 向上翻半頁(yè) b = backwards = upwards
CTRL-F 向下翻半頁(yè) f = forwards = downwards

有這些指令打基礎(chǔ),閱讀幫助文檔應(yīng)該不在話下了,并且這些指令在今后的日常操作中還會(huì)經(jīng)常使用,請(qǐng)借助閱讀幫助的機(jī)會(huì)多多練習(xí),讓它們成為你的下意識(shí)反應(yīng)。另外,你會(huì)在幫助文檔中看到一些高亮的詞組,它們是可以跳轉(zhuǎn)到對(duì)應(yīng)的章節(jié)去的,就好像網(wǎng)頁(yè)上的鏈接一樣。跳轉(zhuǎn)的方法是將光標(biāo)移動(dòng)到高亮處然后按下 CTRL-],之后你還可以按 CTRL-O 返回之前的頁(yè)面(可以連續(xù)返回多級(jí)),或者用 CTRL-I 前進(jìn)至剛才返回過(guò)的頁(yè)面,就好像瀏覽器上的“后退”和“前進(jìn)”按鈕(對(duì)應(yīng)的按鍵還有一對(duì):CTRL-T)。另外,你可以輸入 :ju[mps] 打開一個(gè)跳轉(zhuǎn)歷史列表,看到都有哪些位置可供跳轉(zhuǎn)。

你是否注意到 :ju[mps] 這個(gè)古怪的寫法?它的意思是 jumps 是一個(gè)命令的全稱,但是在輸入命令時(shí)可以使用其簡(jiǎn)寫部分,也就是在 [] 之外的部分。因此在這個(gè)例子里,輸入 :jumps 和 輸入 :ju 是等價(jià)的。你應(yīng)該了解這個(gè)細(xì)節(jié),因?yàn)樵趲椭臋n里會(huì)不斷地出現(xiàn),記住那些常用的簡(jiǎn)寫會(huì)幫助你在平時(shí)提高效率。

另外,考慮到很多人閱讀英文有困難,以下是一些中文版 Vim 手冊(cè)的信息:

中文文檔在線閱讀版

中文文檔下載安裝版 下載安裝可以讓你 Vim 里直接查看中文文檔,但是安裝和設(shè)置對(duì)新手略有難度(安裝說(shuō)明),在線版內(nèi)容是一樣的。

Github Fork 如果你使用插件管理器,比如 Vundle,這個(gè)會(huì)更方便。

接下來(lái)每一個(gè)小標(biāo)題的后面都有對(duì)應(yīng)的幫助命令,你可以使用上述途徑獲取更多相關(guān)知識(shí)。

compatible :help "compatible"

Vim 是 Vi 的改進(jìn)版本,它在 Vi 的基礎(chǔ)上做出了許多改進(jìn)和增強(qiáng),其中一些變化徹底改變了 Vi 的特性。為了向后兼容適應(yīng)一些老 Vi 用戶的習(xí)慣,Vim 在默認(rèn)情況下沒(méi)有開啟這類變化,換句話說(shuō) Vim 默認(rèn)運(yùn)行在“兼容模式”(Compatible)下。然而對(duì)于現(xiàn)代的絕大多數(shù)用戶來(lái)說(shuō),這些改進(jìn)的變化更符合人們的期望,因此我們需要讓 Vim 運(yùn)行在完全模式下,開啟那些覆蓋了 Vi 的功能改進(jìn)。你可以在幫助文檔里看到對(duì)于這類改進(jìn)的具體描述。

另外,很多設(shè)置和插件依賴于 Vim 的這些改進(jìn),所以我們需要在配置的最開始關(guān)閉兼容模式,因此我們?cè)谂渲梦募捻敳繉懴挛覀兊牡谝恍校?/p>

set nocompatible

compatible 是布爾型的選項(xiàng)。VimScript(Vim 內(nèi)置的腳本語(yǔ)言)在選項(xiàng)的前面加上 no 來(lái)代表關(guān)閉狀態(tài)(falsy),此外在后面附加 ! 代表切換狀態(tài),即:如果當(dāng)前狀態(tài)是開啟,那就關(guān)閉它,反之則開啟它。關(guān)于 VimScript,今后我們會(huì)進(jìn)一步介紹,你也可以自行閱讀一部非常好的在線教材:Learn Vimscript the Hard Way (by Steve Losh)。

t_RV :help "t_RV"

這個(gè)選項(xiàng)在現(xiàn)今絕大多數(shù)的系統(tǒng)及 Vim 版本下都沒(méi)有設(shè)置的必要,實(shí)際上它是一個(gè)遺留問(wèn)題(Legacy Issue),對(duì)于它引起的問(wèn)題及原因的解釋將會(huì)是非常冗長(zhǎng)及乏味的,而它之所以出現(xiàn)在 Vim Golf 的默認(rèn)設(shè)置里也是因?yàn)閰⑴c的人實(shí)在太廣泛了,難免會(huì)有人碰到這個(gè)問(wèn)題,所以你可以無(wú)視它,不過(guò)即使加上也不會(huì)對(duì)你有什么損失。

如果你真的好奇,那么請(qǐng)看這里:http://bugs.debian.org/608242

set t_RV=
runtimepath :help "runtimepath"

set runtimepath=$VIMRUNTIME 會(huì)關(guān)閉用戶自定義的腳本,這也是為了給你一個(gè)純粹的、干凈的 Vim 環(huán)境。

你會(huì)發(fā)現(xiàn)在我給出的配置文件中,這一句被我注釋掉了,這是因?yàn)槲沂怯?Vundle 來(lái)管理所有的第三方插件和腳本,因此我不需要這一句。但是如果你是手動(dòng)管理的,那么你最好加上這一句。

syntax :help syntax

syntax on 為你開啟語(yǔ)法高亮。或許稱為“詞法高亮”更加貼切,因?yàn)?Vim 并不去分析文件的語(yǔ)法,為了保證快速的解析,Vim 使用特定的語(yǔ)法來(lái)匹配詞法規(guī)則并為它們著色。你可以自定義各種語(yǔ)言的語(yǔ)法高亮,無(wú)非就是根據(jù)這些規(guī)則來(lái)指定顏色罷了。

filetype :help "filetype"

filetype on 為你開啟文件類型檢測(cè),這個(gè)功能太重要了,所有的語(yǔ)法檢測(cè)、高亮、縮進(jìn)規(guī)則都依賴文件類型的識(shí)別。Vim 通常使用后綴名來(lái)識(shí)別文件的類型,但是你也可以重新指定或者通過(guò)在文件內(nèi)容中添加特定標(biāo)記來(lái)覆蓋默認(rèn)的檢測(cè)結(jié)果。

filetype indent :help "filetype-indent"

filetype indent on 開啟縮進(jìn)規(guī)則,在文件類型檢測(cè)生效后,可用的縮進(jìn)規(guī)則將會(huì)被使用。實(shí)際上還有一個(gè)重要的 filetype plugin on,顧名思義,這是開啟對(duì)應(yīng)插件的。但是還記得開始我說(shuō)的話么?這套基礎(chǔ)配置就是要擺脫對(duì)插件的依賴從而保持簡(jiǎn)單,因此我們只開啟縮進(jìn)規(guī)則就夠了。

backup :help "backup"

backup 用來(lái)控制我們是否為當(dāng)前正在編輯的文件建立備份,在基礎(chǔ)配置里我們將備份功能關(guān)閉了。實(shí)際上我自己是打開的,因?yàn)橛袀涠鵁o(wú)患嘛。但是我真實(shí)的設(shè)置遠(yuǎn)不止這么簡(jiǎn)單,因?yàn)?Vim 關(guān)于文件備份的設(shè)置其實(shí)非常復(fù)雜(當(dāng)然也非常靈活),簡(jiǎn)單的開啟 backup 并不一定會(huì)如你期望的那樣進(jìn)行備份,并且在很多情況下還會(huì)讓新手感到無(wú)所適從。我不想讓你被這些問(wèn)題嚇跑,鑒于你在練習(xí)階段也不會(huì)用 Vim 來(lái)做一些非常重要的編輯工作,所以請(qǐng)你關(guān)了它。

set nobackup
visualbell & t_vb :help "visualbell" :help "t_vb"

可視化響鈴是為聽覺(jué)障礙人士提供可視化提示的功能,如果你不屬于這類人群,你可以關(guān)掉它。但是即使如此,大多數(shù)人也不想看到屏幕閃爍的提示(一般在終端下發(fā)生操作錯(cuò)誤的時(shí)候,會(huì)有屏幕閃爍的提示),所以你會(huì)看到下面這個(gè)看起來(lái)互相矛盾的兩條設(shè)置,不過(guò)請(qǐng)你相信我,我沒(méi)寫錯(cuò)。

set novisualbell
set visualbell t_vb=
ruler :help "ruler"

在屏幕下方顯示標(biāo)尺,默認(rèn)情況下它會(huì)在右邊顯示光標(biāo)所在位置的行號(hào)和列號(hào)。標(biāo)尺的作用非常大,多數(shù) Vimer 都喜歡自定義標(biāo)尺的信息顯示來(lái)滿足自己的要求,不過(guò)這是一個(gè)很大的話題,我們留著以后講。目前為止,默認(rèn)的標(biāo)尺就已經(jīng)夠用了。

set ruler
number :help "number"

number 打開屏幕左側(cè)的行號(hào)顯示,這個(gè)對(duì)程序員比較重要。

relativenumber :help "relativenumber"

relativenumber 可以將行號(hào)變成相對(duì)于當(dāng)前行的方式來(lái)顯示,當(dāng)前行為 0,上方是從 1 開始的正整數(shù),下方是從 -1 開始的負(fù)整數(shù)。這有什么用呢?它可以幫你快速的精確定位距離當(dāng)前行的偏移數(shù)。見下圖就明白了:

看,當(dāng)前行是第 27 行,如果我想去 set ruler,我就敲 14k;如果我想去 colorscheme grb256,我就敲 8j,方便吧?

“等一下!你說(shuō)當(dāng)前行是 0 啊,為什么上圖會(huì)顯示絕對(duì)行數(shù)呢?”

哦,那是因?yàn)槲彝瑫r(shí)開啟了 numberrelativenumber,這兩個(gè)布爾型選項(xiàng)兩兩組合可以產(chǎn)生總計(jì)四種行號(hào)設(shè)置:

set nonu nornu:不顯示行號(hào)

set nu nornu:顯示絕對(duì)行號(hào)

set nonu rnu:顯示相對(duì)行號(hào)(當(dāng)前行為 0)

set nu rnu:顯示相對(duì)行號(hào)(當(dāng)前行為絕對(duì)行號(hào))

猜猜看,我平時(shí)喜歡哪種組合?

showcmd :help "showcmd"

在屏幕右下角顯示未完成的指令輸入。有時(shí)候我們輸入的命令不是立即生效的,它會(huì)稍作等待,等候你是否輸入某種組合指令。比如說(shuō)你想向下移動(dòng) 7 行,當(dāng)你按下 7 的時(shí)候,你會(huì)看到屏幕右下角顯示 7,此時(shí) Vim 并不清楚你最終要做什么,所以它在這里提示你之前的指令然后等待你的下一步操作。

不是所有人都會(huì)注意到這里顯示的不僅僅是常規(guī)模式下的指令輸入,它還會(huì)顯示可視模式下你的選擇情況,比如當(dāng)前選擇了多少字符,多少行,或者區(qū)塊可視模式下的行數(shù)x列數(shù)。

set showcmd
showmode :help "showmode"

在左下角顯示當(dāng)前的模式名稱,沒(méi)有顯示則代表現(xiàn)在是常規(guī)模式。

set showmode
scrolloff :help "scrolloff"

這個(gè)選項(xiàng)可以讓你設(shè)定在上下移動(dòng)光標(biāo)時(shí),光標(biāo)的上方或下方至少會(huì)保留顯示的行數(shù)。比如說(shuō)我們?cè)O(shè)置它的值為 5,那么你向上或向下移動(dòng)到屏幕接近邊緣還剩 5 行的時(shí)候屏幕就會(huì)開始滾動(dòng)。也就是說(shuō)當(dāng)你滾動(dòng)屏幕時(shí),你的光標(biāo)距離屏幕上下兩邊將保留至少 5 行的高度,這個(gè)設(shè)定相當(dāng)有用,多多嘗試找到一個(gè)讓自己最舒服的值。

set scrolloff=3
backspace :help "backspace"

這個(gè)選項(xiàng)的推薦設(shè)置是這樣的:

set backspace=indent,eol,start

indenteol,start 代表的意思是“縮進(jìn)位置”,“行結(jié)束符”,“段首”。這樣設(shè)置可以使得 backspace 鍵在這三個(gè)特殊的位置也能進(jìn)行回刪動(dòng)作。這比較符合我們的期望,很奇怪 Vim 默認(rèn)竟然不允許在這些地方使用 backspace 吧?

showmatch :help "showmatch"

打開此選項(xiàng)使得你在輸入成對(duì)的括號(hào)時(shí),Vim 會(huì)幫助你跳轉(zhuǎn)并高亮一下匹配的括號(hào)(然后回到你正在輸入的位置。這個(gè)效果很人性化,你只要親自試一下就能體會(huì)到了。

set showmatch
matchtime :help "matchtime"

雖然 showmatch 選項(xiàng)非常人性化,但是 Vim 默認(rèn)的效果時(shí)間太長(zhǎng)了,500ms!像我這種把行云流水的輸入看得異常重要的人來(lái)說(shuō)簡(jiǎn)直是一種折磨。要小心的是,這個(gè)選項(xiàng)接受的值不是 ms 而是奇葩的 1/10 秒,比如說(shuō)我想要 100ms,那么就是:

set matchtime=1

設(shè)置為 0 可以禁止跳轉(zhuǎn)(高亮還在)。

hlsearch :help "hlsearch"

打開搜索高亮模式,若搜索找到匹配項(xiàng)就高亮顯示所有匹配項(xiàng)。

set hlsearch
incsearch :help "incsearch"

打開增量搜索模式,Vim 會(huì)即時(shí)匹配你當(dāng)前輸入的內(nèi)容,這樣會(huì)給你更好的搜索反饋,不過(guò)你還是要在最后輸入 (回車)來(lái)確認(rèn)你的搜索內(nèi)容的。

set incsearch
ignorecase :help "ignorecase"

搜索時(shí)忽略大小寫。不過(guò)你可以用 C 標(biāo)識(shí)臨時(shí)開啟大小寫敏感模式,這個(gè)涉及到 Vim 的正則用法,我們以后再講。

set ignorecase
smartcase :help "smartcase"

此選項(xiàng)的開啟會(huì)讓搜索模式更加聰明。如果搜索時(shí)輸入了任何大寫字母,那么 Vim 會(huì)進(jìn)行嚴(yán)格地大小寫匹配;如果搜索時(shí)只輸入小寫并開啟了 ignorecase,那么 Vim 就忽略大小寫匹配(所以有大寫也會(huì)找到)。

set smartcase
expandtab :help "expandtab"

符號(hào)轉(zhuǎn)變?yōu)?,也就是空格。這個(gè)對(duì)于現(xiàn)代程序員來(lái)說(shuō)非常重要——誰(shuí)還用 縮進(jìn)來(lái)著?

set expandtab
smarttab :help "smarttab"

smarttab 要和后面的 shiftwidth 配合來(lái)用,它只作用于行首位置。當(dāng) smarttab 開啟時(shí),在行首鍵入 會(huì)填充 shiftwidth 設(shè)定的數(shù)值,在其他地方則填充 tabstop 設(shè)定的數(shù)值;當(dāng) smarttab 關(guān)閉時(shí),無(wú)論在哪里鍵入 ,都會(huì)填充 tabstop 設(shè)定的數(shù)值。

所以,如果開啟 smarttab,然后 shiftwidthtabstop 設(shè)定不一樣的數(shù)值,比如一個(gè)是 8 一個(gè)是 4,那么在行首鍵入 會(huì)產(chǎn)生 8 個(gè)字符的空白,而在其他地方鍵入 則產(chǎn)生 4 個(gè)字符的空白。這常常用來(lái)控制 Continuation Indent 的行為,有時(shí)也叫做 Indentation for Wrapped Lines 或者 Wrapped Line Indentation。

set smarttab
autoindent :help "autoindent"

打開自動(dòng)縮進(jìn),我想這個(gè)沒(méi)有人會(huì)不開的吧?不過(guò)要注意的是縮進(jìn)的效果會(huì)受 smartindent 的影響。

set autoindent
smartindent :help "smartindent"

為縮進(jìn)行為采用類似 C 語(yǔ)言的風(fēng)格,主要適用于擁有塊級(jí)作用于的編程語(yǔ)言,不過(guò)這也不是絕對(duì)的,比如現(xiàn)在的 Javascript 不帶塊級(jí)作用域(ES6 就有了),但是它用大括號(hào),所以自動(dòng)縮進(jìn)也表現(xiàn)的很好。此外還會(huì)對(duì)注釋行/塊應(yīng)用恰當(dāng)?shù)目s進(jìn)格式。

然而,Vim 的自動(dòng)縮進(jìn)其實(shí)是相當(dāng)復(fù)雜但也相當(dāng)靈活的。smartindent 雖說(shuō)適用于類似于 C 語(yǔ)言風(fēng)格的編程語(yǔ)言,但是對(duì)于 C 本身,Vim 還有內(nèi)置一套更靈活的縮進(jìn)方案。如果你經(jīng)常編寫 C 程序,你應(yīng)該仔細(xì)看一下::help "cindent"。

此外,為了更好的適應(yīng)各種語(yǔ)言的特性,Vim 也允許用戶自定義縮進(jìn)表達(dá)式,詳情請(qǐng)見::help "indent"。

set smartindent
shiftwidth :help "shiftwidth"

shiftwidth 實(shí)際上定義了每一次縮進(jìn)對(duì)應(yīng)的空格數(shù),當(dāng)你使用自動(dòng)格式化(比如 gq),或者手動(dòng)縮進(jìn)(<<>>)時(shí),Vim 使用的數(shù)值就是這個(gè)。

然而讓人糾結(jié)的是,如果你還想要 Continueation Indent(見上面的 smarttab),你不得不把 shiftwidth 設(shè)定為你不想要的數(shù)字(因?yàn)?CI 通常比常規(guī)的縮進(jìn)要大),可偏偏縮進(jìn)步長(zhǎng)又依賴這個(gè),所以很難完美的實(shí)現(xiàn)所有的自動(dòng)縮進(jìn)格式設(shè)置。

不要被我的描述搞怕怕了,實(shí)際上現(xiàn)在很少有人在乎 CI 了,多數(shù)語(yǔ)言的風(fēng)格標(biāo)準(zhǔn)也不在 CI 的設(shè)置上做出約定,所以你盡管把 shiftwidth 設(shè)定成和 tabstop 一樣的數(shù)值好了。

set shiftwidth=2
tabstop :help "tabstop"

tabstop 就是 字符所代表的空格數(shù),一般我們會(huì)用 expandtab 轉(zhuǎn)變成空格符,然后鍵入 時(shí)就會(huì)產(chǎn)生 tabstop 個(gè)空格了。這是現(xiàn)在普遍的做法。

set tabstop=2
softtabstop :help "softtabstop"

softtabstop 會(huì)影響 刪除的空格數(shù),但不是用 插入的空格,而是 插入的空格。所以我們總是把 softtabstop 設(shè)定成和 tabstop 一樣的數(shù)值,這樣無(wú)論是用 插入縮進(jìn)還是用 刪除縮進(jìn),其行為總是一樣的。

但是對(duì)于使用 輸入的空格,哪怕是連續(xù)輸入的若干個(gè)空格, 還是會(huì)一個(gè)一個(gè)的刪除。

set softtabstop=2
list & listchars :help "list" :help "listchars"

list 開啟對(duì)于制表符(tab)、行尾空格符(trail)、行結(jié)束符(eol)等等特殊符號(hào)的回顯,有助于你觀察這些特殊符號(hào)的狀態(tài),精確地控制文本的編輯。

這對(duì)于程序員,特別是精(吹)益(毛)求(求)精(疵)的程序員來(lái)說(shuō)至關(guān)重要,如果你是,你懂的!

listchars 能讓你進(jìn)一步控制想要用什么字符來(lái)顯示這些特殊符號(hào),如果你設(shè)定了 encodingUTF-8,那么你可以使用很多很好看的字符。順便一提,我沒(méi)有設(shè)置 encoding 是因?yàn)?Vim 可以自動(dòng)檢測(cè)系統(tǒng)的 locale,這一點(diǎn)對(duì)于 Windows 用戶可能是廢的(或者應(yīng)該說(shuō) Windows 是廢的……),所以請(qǐng)自行設(shè)置它。

set list listchars=eol:?,tab:? ,trail:.,

我給出的設(shè)置效果如下圖所示:

你可以清楚的看到在 17,18,19 這三行故意輸入的 ,trailing 在屏幕中留下的標(biāo)記。

Keep it simple...

我秉持著保持簡(jiǎn)單的精神為你總結(jié)出這些最基礎(chǔ)也是最有用的設(shè)置,真心希望能幫助你開一個(gè)好頭。但是保持簡(jiǎn)單可不是為了讓你簡(jiǎn)單的照抄了事呀,就這么短短二十來(lái)個(gè)設(shè)置選項(xiàng),我足足花了一下午把它們整理并解釋出來(lái),而看一遍文檔也不過(guò)就是二十分鐘的功夫。所以我希望你在應(yīng)用它們之前還是看一下文檔里的說(shuō)明吧,畢竟這些設(shè)置是要一直陪著你的。

然而,另外一個(gè)顧慮是擔(dān)心你迫不及待的把看到的設(shè)置統(tǒng)統(tǒng)都加上,我的建議是慢慢來(lái)。因?yàn)楹芏嘣O(shè)置都有副作用,盡管這些副作用實(shí)際上都在文檔里有說(shuō)明,但查找文檔是辛苦活兒,這一點(diǎn)我心知肚明。當(dāng)一次性應(yīng)用很多設(shè)置的時(shí)候,你總會(huì)有摸不著頭腦的時(shí)候,到了那時(shí)再去一個(gè)一個(gè)排查更是吃力不討好的苦差事。

我開始認(rèn)真學(xué)習(xí) Vim 并計(jì)劃寫出一個(gè)完整的屬于我自己的配置文件的時(shí)候,就沒(méi)打算盡一日之力而克盡其功。前前后后大約花費(fèi)了 8 周的時(shí)間,幾乎每天騰出 10 分鐘左右來(lái)吃透一些操作和選項(xiàng),設(shè)置它們,然后利用一天里剩余的時(shí)間盡可能的聯(lián)系它們,看看是否有奇怪的地方。然后把它們提交到版本庫(kù)進(jìn)行追蹤。這其實(shí)沒(méi)有多辛苦,但是保持一個(gè)穩(wěn)定的節(jié)奏,每一次都保持簡(jiǎn)單,最終獲得的成效是喜人了。比之過(guò)去用了一年半窮盡折騰最終卻一事無(wú)成,孰優(yōu)孰劣我想這個(gè)結(jié)論都能很輕易的得出吧?

最后,我把完成的基礎(chǔ)配置代碼附在文后……并且由于 SegmentFault 蛋疼的語(yǔ)法高亮不認(rèn)識(shí) Vimscript,所以我又另外附上 Gist 的地址——?jiǎng)e復(fù)制粘貼,這是練習(xí) Vim 的好機(jī)會(huì),我相信你!至于最后幾行我沒(méi)有講到的設(shè)置,它們都是用來(lái)設(shè)置配色主題的,我簡(jiǎn)要說(shuō)明一下:

設(shè)置選項(xiàng) 功能描述 附注
background 配色主題的色系 注意,這不是什么背景色!dark 是暗色系,light 是亮色系。
colorscheme 配色主題的名稱 grb256 是我偏愛的配色主題,但不是 Vim 自帶的,所以你照抄的話一定報(bào)錯(cuò)。默認(rèn)自帶的主題也不多,你可以在輸入 :colo[rscheme] 然后敲 自動(dòng)補(bǔ)全然后自己試,推薦 elfload,pablo 這倆都不錯(cuò)。
highlight 自定義主題高亮顏色 如果選擇主題有個(gè)別地方不盡如人意(常有的事兒),你可以自己改寫或添加更多細(xì)節(jié)。詳情請(qǐng)見::help syntax

記得這些設(shè)置是無(wú)關(guān)緊要的,你搞不定也沒(méi)有關(guān)系,反正以后還會(huì)講的……

還要記得即使你發(fā)現(xiàn)配置選項(xiàng)有簡(jiǎn)寫,也不要在配置文件里用簡(jiǎn)寫,否則你回頭查看時(shí)總有你想不起來(lái)的時(shí)候,到時(shí)候別怪我沒(méi)有提醒你噢?。ㄆ鋵?shí)這是教訓(xùn)T_T)

噢!我好像忘了告訴你如何保存和使用 打開、保存和退出

.vimrc 文件放置在當(dāng)前用戶的根路徑下,Unix & Linux 系的系統(tǒng)都可以用 cd ~ 進(jìn)入這個(gè)路徑。之后輸入 vim .vimrc 即可打開(如果沒(méi)有會(huì)幫你創(chuàng)建一個(gè))。

在編輯的過(guò)程中,鍵入 :w[rite] 然后回車就保存了,如果你已經(jīng)建立起了初步的節(jié)奏,你不會(huì)遇到什么問(wèn)題;但是如果你總是在屏幕上看見 :w...,兄弟,你又忘記返回常規(guī)模式了吧?

如果你直接打開了 Vim,忘記了跟文件名,那么你可以 :w[rite] .vimrc 來(lái)創(chuàng)建并保存。

退出也很簡(jiǎn)單,鍵入命令::q[uit] 即可,另外你還可以鍵入 :wq 連保存帶退出,后者有一個(gè)對(duì)應(yīng)的快捷鍵:ZZ,記住它,這是效率幫手。如果你不想保存只想退出,鍵入命令::q!,對(duì)應(yīng)快捷鍵:我不告訴你,自己去查~(這不是我傲嬌,而是因?yàn)槲矣X(jué)得習(xí)慣這個(gè)快捷鍵不好,容易丟失修改,q! 命令雖然稍微麻煩些,但也因此給你更多反悔的時(shí)間)

我該如何使用多個(gè) Vim 的配置文件

如果你喜歡我的雙副本練習(xí)法,那么你將會(huì)遇到的一個(gè)問(wèn)題是:Vim 總是很聰明的在打開時(shí)加載你的 ~/.vimrc 文件,該如何告知它加載另外一份配置文件呢?答案很簡(jiǎn)單:

$ vim -u ~/.vimrc.basic

你可以把這條命令做一個(gè) Alias,這樣會(huì)更加快捷。另外在打開 Vim 的時(shí)候可以附加一些選項(xiàng),使用 vim -h 可以看到這些選項(xiàng)的說(shuō)明。

還有一個(gè)值得知道的技巧,在 Vim 中鍵入 CTRL-Z 會(huì)將 Vim 臨時(shí)掛起并返回其父進(jìn)程(多數(shù)情況下就是 Terminal Shell),之后在終端里輸入 fg 回車之后會(huì)回到 Vim。這個(gè)技巧有助于你快捷的往返于 Vim 和 終端之間。如果你不方便按 CTRL-Z(比如 Windows……),可以用命令 :st[op]:sus[pend] 代替。


https://gist.github.com/nightire/9815652


set nocompatible                " use vim defaults
set t_RV=                       " http://bugs.debian.org/608242
" set runtimepath=$VIMRUNTIME     " turn off user scripts, https://github.com/igrigorik/vimgolf/issues/129

syntax on                       " turn syntax highlighting on by default
filetype on                     " detect type of file
filetype indent on              " load indent file for specific file type

set nobackup                    " do not keep a backup file
set novisualbell                " turn off visual bell
set visualbell t_vb=            " turn off error beep/flash

set ruler                       " show the current row and column
set number                      " show line numbers
set showcmd                     " display incomplete commands
set showmode                    " display current modes

set scrolloff=3                 " keep 3 lines when scrolling
set backspace=indent,eol,start  " make that backspace key work the way it should
set showmatch                   " jump to matches when entering parentheses
set matchtime=1                 " tenths of a second to show the matching parenthesis

set hlsearch                    " highlight searches
set incsearch                   " do incremental searching
set ignorecase                  " ignore case when searching
set smartcase                   " no ignorecase if Uppercase char present

" Default indenting options
set expandtab smarttab
set autoindent smartindent shiftround
set shiftwidth=2 softtabstop=2 tabstop=2

" Identify invisible characters and don"t show them by default
set list listchars=eol:?,tab:? ,trail:.,

set background=dark
colorscheme grb256              " can not live without this two lines

" Make comments and special characters look better
highlight Comment    ctermfg=245 guifg=#8a8a8a
highlight NonText    ctermfg=240 guifg=#585858
highlight SpecialKey ctermfg=240 guifg=#585858

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/24763.html

相關(guān)文章

  • Vim替換小技巧(兼淺談Vim哲學(xué)

    摘要:本文將以此為起點(diǎn),介紹一些替換小技巧。實(shí)話實(shí)說(shuō),使用命令來(lái)替換有違于大多數(shù)程序員的習(xí)慣。接下更進(jìn)一步,教多幾個(gè)小技巧。這么一來(lái),替換將僅在當(dāng)前大括號(hào)內(nèi)生效。在替換局部變量時(shí),比起全局替換,這樣的替換方式無(wú)疑會(huì)更高效。 想必用過(guò)Vim的人都知道,在Vim里面,以下命令可以替換當(dāng)前文件的內(nèi)容: :[range]s/{要被替換的模式}/{替換的內(nèi)容}/[flags] 其中range指定替換命...

    ConardLi 評(píng)論0 收藏0
  • Vim 哲學(xué)(一)

    摘要:之所以能卓爾不群靠地就是一種自成一派且精悍有效的編輯器哲學(xué)當(dāng)然也是,就好像網(wǎng)游千千萬(wàn)卻唯有一覽眾山小,那靠地不是技巧與外在,而是與眾不同的世界觀。征服其實(shí)是一種領(lǐng)悟,我融入了的哲學(xué)而已。這也是好東西,它比上一個(gè)更貼近的哲學(xué)。 就在幾個(gè)小時(shí)以前,我回答了一個(gè)關(guān)于推薦開發(fā)工具的問(wèn)題,很多朋友表示喜歡和鼓勵(lì),非常感謝!我也很想多寫一些細(xì)節(jié),于是便起意開一個(gè)系列來(lái)聊聊我多次提到的 Vim。 ...

    honhon 評(píng)論0 收藏0
  • Vim 哲學(xué)(二)

    摘要:為什么要有模式呢以上其實(shí)已經(jīng)講述了一些原因,但真正的價(jià)值還在于接下來(lái)要講到的哲學(xué)。鼠標(biāo)與快捷鍵的操作治標(biāo)不治本,它們沒(méi)能從根本上解決這個(gè)問(wèn)題。 學(xué)會(huì)用不同的角度去看待和理解這個(gè)世界,你收獲的永遠(yuǎn)會(huì)比你想象的更多。 上回我分享了如何掌握基礎(chǔ)移動(dòng)的心得體會(huì),而對(duì)于很重要的模式卻只是一帶而過(guò),這其實(shí)是有原因的。過(guò)去我有過(guò)幾次教新手 Vim 的經(jīng)歷,按照慣常的方式先告訴他們模式切換,...

    ashe 評(píng)論0 收藏0
  • Vim 哲學(xué)(四)

    摘要:的哲學(xué)第四篇姍姍來(lái)遲,狗血的原因我就不多說(shuō)了,好消息是我將為這個(gè)系列帶來(lái)一些動(dòng)態(tài)演示。所以目前為止你學(xué)會(huì)上述四個(gè)動(dòng)作指令就足夠了。以詞為單位使得我們可以更精確也是更具語(yǔ)義化的移動(dòng)光標(biāo),并且要比逐個(gè)字符的移動(dòng)要快得多。 Vim 的哲學(xué)第四篇姍姍來(lái)遲,狗血的原因我就不多說(shuō)了,好消息是我將為這個(gè)系列帶來(lái)一些動(dòng)態(tài)演示。原本我打算錄視頻的,但是文章都寫了那么些篇了,現(xiàn)在再錄視頻似乎晚了些,所以我...

    xiao7cn 評(píng)論0 收藏0
  • Vim - 適合自己,才是最好

    摘要:原文鏈接適合自己的,才是最好的被稱為編輯器之神,是我用過(guò)之后才體會(huì)到的,用之前實(shí)在不敢對(duì)它做出什么評(píng)價(jià)。最初的不適,換來(lái)的是效率的飛升。感悟在學(xué)習(xí)使用的過(guò)程中,我最大的感悟就是適合自己的,才是最好的。 原文鏈接:Vim - 適合自己的,才是最好的 Vim 被稱為編輯器之神,是我用過(guò)之后才體會(huì)到的,用之前實(shí)在不敢對(duì)它做出什么評(píng)價(jià)。在大學(xué)時(shí)代,Vim 的大名就已如雷貫耳,但由于它陡峭的學(xué)...

    legendmohe 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<