為什麼看似簡陋的vim在熟練的人手中如此的神乎其技?

時間 2021-05-06 08:17:19

1樓:道窮則變

Vim本質上是乙個可擴充套件的編輯器框架,出廠設定只支援基本的文字操作。

但更重要的是vim支援可程式設計的指令碼語言,這提供了幾乎無限的可擴充套件能力。比如各種語言的lint,各種補全引擎比如ycm之類,更不用說各種語言的高亮和縮排外掛程式,各種提供多檔案切換目錄導航的增強外掛程式,與各種repository和單元測試框架的整合,等等。

對熟練的人來說,他可以按需配置各種外掛程式和快捷鍵以滿足需求,可程式設計能力提供的擴充套件是無與倫比的。

當然,對於不喜歡vim的人來說,選擇另外的具有可程式設計擴充套件能力的編輯器也不是問題。

2樓:馮遷

簡單用過,需要熟練,以及合理的字母組合。

當時想重新配置key map,發現乙個問題,你需要不和那些未知的外掛程式key 衝突,又需要滿足自己的習慣和接下來常用的字母,這些都是未知的。結論就是,需要長時間練習,就算了。

剛開始看資料時,發現很多人的基本邏輯都沒搞清楚,就在寫教程,導致對新手來說,配置的邏輯變混亂了(其實很簡單)。

邏輯簡單,不代表內容不複雜,這和幾個簡單定義推倒出一系列結論的情形是一致的。事情本身可以變複雜不代表事情很難。

問題可能在於,堅持本身就難度,不靠譜的資源掩蓋了靠譜的資源,未知比較多,實際場景會遇到更多問題(簡單的,各種語言的增加,外掛程式的增加,各種實際需求的增加),這些加長了堅持的時間。

過一段時間不用,組合鍵就忘了。所以,vs挺好的。

回到原題,簡單而又不簡單,從不簡單變到簡單,需要時間,可能是吹的點吧。

3樓:

vim看起來很酷,很神的一部分原因是使用vim基本可以全鍵盤操作,而基本不用動滑鼠,這很像電影裡黑客的感覺,所以看起來感覺很炫酷。而vim為了做到全鍵盤操作做了以下幾點努力。

多模式操作。

vim的多模式操作在初學者看來是反直覺的,因為目前常用的編輯器都是沒有模式的,而vim分了多個模式,如普通模式,插入模式等等,不同模式使用不同的按鍵切換,不同模式又有不同的一套快捷鍵。這樣好處就是可以組合出更多的快捷鍵,而壞處是切換起來比較繁瑣,對新手不友好

序列化快捷鍵操作。

快速,多樣的移動操作(motion)。

使用滑鼠可以快速的定位修改的位置,而vim為了達到快速移動定位的操作,設計了多種移動方式。如通用的上下左右移動h, j, k, l,行內移動的b, B, w, W, e, E,行內搜尋的f, t, F, T等等。

值得一提的是,vim有直接了當的搜尋操作,vim的搜尋操作和其他編輯器的區別在於vim的過渡更加平滑,在vscode你需要ctrl+F調出搜尋框再進行搜尋,這種體驗是比較割裂的,適合大規模的搜尋,替換等;而vim直接/就可以搜尋,因為vim的搜尋比較流暢,可以使用搜尋進行定位,比如要修改單詞 'word',直接/word搜尋,再跳轉到位置修改即可。

而且vim還有easy motion這種跳轉工具,熟練起來基本指哪打哪,跳轉起來還是很快的。

文字物件(text object)

vim使用了文字物件的操作,如詞用w表示,括號用b來表示等等,那麼改寫乙個詞就可以ciw了,c代表改寫操作,i代表in,w代表詞word,同理,括號內的可以cib或者ci(,大括號內的可以ci{,這些都能夠提高鍵盤操作的速度。

通過文字物件和移動操作,vim的很多操作可以統一成operator+motion/text object的格式,方便操作和記憶。

第二個重要原因高手做了很多的定製化。

實話實說,單純的,原始的vim是很難用的,乙個vim你不配置個幾十行vimrc基本是用不了的,所以就需要你自己去配置自己的vim。

而vim在高手手裡為什麼能夠更加酷,神乎其神呢?

因為高手做了更多的定製化,在不斷的使用中優化自己的配置,使vim更加符合自己的使用習慣的需求。所以一千個人可能有一千個vim,你想要什麼取決於你自己。而vim只是提供了定製化的平台和方式。

上面講了很多vim的優點和設計,那麼新手如何學習vim呢?

看基本的入門資料和書籍

Vim從入門到精通

國外大神寫的,主要由國內SpaceVim作者翻譯,值得一看,看完後基本對vim有了大致的了解。

Practical Vim (豆瓣)

看部落格,看開源配置。

另外,還可以看看知乎一些大佬寫得部落格,如知乎韋易笑大佬等。還可以看一些開源的配置,如Spacevim等等。

結合vim和其他IDE

對於初學者,直接配置vim是繁瑣且複雜的。個人感覺vim重要的內容是它分模式,序列化按鍵,文字物件的思想。所以新手可以在任何IDE安裝vim外掛程式來感受vim的思想方式。

這樣一定程度上可以融合vim和其他IDE的優缺點。這其實也是我現在使用的方式。

當然,IDE安裝外掛程式並不是真正的vim,可能有一些按鍵衝突需要解決,這需要自己取捨。

4樓:孫棟棟

滑鼠的操作永遠不如鍵盤操作快且舒適 。

試想上面的將一行複製5次,vim裡按4個鍵就夠了,如果是ide裡得一直ctrl v。。。

5樓:凱爾文羅

因為大神程式設計師都是老程式設計師,而老程式都習慣了用vim,所以大家都覺得要做大神就得先學vim.

其實大神們只是因為一開始程式設計的時候, 十多年前最好的editor只有vim....

6樓:豬騎士

Vim是程式設計思維在編輯器中的實現。

程式設計中最基礎的邏輯就是把乙個複雜的問題分解成簡單的問題,然後通過把這些簡單的問題組合和重複呼叫等方式解決複雜的問題。

那麼Vim就是把編寫重複的文字分解成簡單的命令並且你可以組合並重複呼叫這些命令,甚至記成巨集。就比如:

喜歡程式設計的感覺,自然就會喜歡上Vim

7樓:

別的不說,掌握 Vim 的列編輯和巨集就已經大大釋放生產力了,而且有時候神乎其技在於使用者的腦洞,各種技巧的組合只有你想不到,沒有做不到。

8樓:成雋

很多編輯操作它做了抽象,操縱文字不再只以字元為單位,而是把文字塊抽象成符合不同特徵的object(詞,句,段,括號體,函式,整個檔案)進行操作。

把大量主要操作都集中在打字鍵盤的中線,從A 到「 這個移動成本最低的區域。

有指令碼系統方便打造只適合自己操作習慣的工作流。

無差別視窗,你把視窗整成 git browser 還是 file tree 還是 terminal 或 search results,全都是你的自由。

命令列友好,和tmux,terminal,tui tools 這些東西天然就很搭,使得基於這些工具之上的外掛程式也很和諧,像ripgrep,vifm,ranger 這些 cmd 工具給包一下就是個巨好用的外掛程式,這種方式也使得檔案管理,檔案查詢、版本管理、專案構建測試都可以脫離滑鼠,實現全鍵盤操作。

IDE/editor + Vim 外掛程式很多能做好 1、2。

3 用 IDE 沒啥折騰空間,而這塊 VSCode sublime 這些編輯器可以折騰。

但 4,5 都搞不定,先天決定的。

不過 VSCode + Vim 外掛程式在 1,2,3 這部分現在已經做的挺好,結合大量的自定義設定,在編輯這塊體驗已經進化得差不多能和 VIM 打平,但 4,5 是沒法再突破。

VSCode 將4 做成了固定功能,git,search 這些都被固化到邊欄,terminal 、problem拎出來放到底部。但這也導致在操作上和編輯區的操作上會存在一些操作習慣的割裂。

它們的布局你也無法修改,比如你希望把 search 弄到底部彈出,把 outline 弄到右邊欄,而 file explorer 繼續呆在左邊欄,你做不到。而 Vim 並不特化 window,所以布局相當自由。

Vim 的快捷鍵和文字操作方式,已經不是制約其他編輯器和 vim 差距的因素,Vim 的編輯效率在VSCode 裡一樣可以做到。

真正還能帶來差異的,是兩者最初基礎設施的設計差異,所帶來的工作流和整合上的差異,也就是 4 講的git/search/terminal 這些整合功能,還有5 所說的和 tui tool 的配合,以及 task make 這類批處理在非編輯業務比如構建測試導致的差異。

所以 vim 的威力一半來自高效的編輯模式,而另一半來自底層對待視窗的設計和擁抱命令列。

前者可以移植,後者無法移植。

如果吸引你的是前一部分,vim 並不必要。

vim的leader如何只在normal下生效?

wsdjeg 設定 Vim 預設的 按鍵的方式是在 vimrc 上加入 let g mapleader 這句配置需要再定義快捷鍵之前,也就是放置在 nnormap 這樣的語句之前。verbose imap feileo 對映命令選擇相應工作模式下的,help map overview OMMANDS...

Vim的優勢到底在何處?

學神來啦 VIM簡介 vim是一款跨平台,易擴充套件,難上手,效率高的編輯器,vim可以視作vi的加強版,因此,如果經常在Linux平台上開發,學習vim是很有必要的。VIM的三種模式 在安裝好vim後,是無法立刻輸入文字的。因為vim和普通的編輯器不同,它有三種工作模式一般模式,編輯模式,命令列模...

Linux裡面的vim做什麼用的?我在terminal裡面輸入vi進入vi編輯器,可是不知道這個編輯器能實現什麼功能?

嘗試在terminal裡輸入vimtutor或vim tutor。這是乙個vim自帶的互動教程,大約會花費半個小時的時間。他可以讓你對vim有乙個初步的印象。vim是一款非常強大的文字編輯器,程式設計師一般使用它來編輯原始碼,當然也有人使用它對純文字進行處理 比如你要對乙份有上千行資料且格式固定的日...