我眼中的vim

來源:互聯網
上載者:User

標籤:io   ar   使用   sp   檔案   資料   log   bs   代碼   

  前一段時間,很多同事一直在被我騷擾,因為我在嘗試推銷vim有多麼的好用。他們覺得我似乎不做銷售,真心是浪費人才。在公司的很多事情重複程度很高。能夠在大腦和編譯器之間建立一個優良的通道對於我來說還是十分有意義的。因為節省下來的時間可以做好很多必要的事情,比如分析需求和設計代碼架構。每當生產工具發生改變的時候,生產方式以及管理者對於生產的理解隨之發生改變。這句話聽著好像來自於教科書。確實如此,不過這是百分百的事實,如果你買過車( 電瓶車也算! )就很容易理解,當在開車而不是騎單車的時候,你對於自己能去哪兒的看法完全不同。編程亦是如此。鑒于思考和寫作都要獨立,我就不寫怎麼用和怎麼學了吧,想知道的同學可以移步coolshell和 learn vim script the hard way。那裡有非常優秀的教程。

  基本行為的抽象

  編碼的過程可以被抽象為移動和操作兩個部分。也就是把游標移動到某個位置,然後或者輸入,或者修改,或者刪除一些東西。對於普通的IDE來說( 比如visual stdio ),能做的事情非常的樸素,基本包括四個方向鍵,page up , upage down, Home,end和滑鼠。所以當我們從一個函數的第一個參數移動到第二個參數的時候,只能不停的按下方向鍵。這樣做很累也很無聊,我們自然很希望編輯器能夠為我們提供個快速鍵,讓我們能在參數之間,飛來飛去。類似的,很多時候你想從當前位置刪除到行尾或者刪除到行首,普通IDE所能提供的協助也幾乎為0( 這也就是為什麼vs被叫做進階記事本的原因 )。看到這裡你就不難明白為啥vim有那麼多的快速鍵了。其實這個跟電腦的系統架構以及作業系統架構的原理是一致的。cpu所支援的基本操作說破天也只有四個,load (取資料),save( 存資料 ) ,jump(代碼跳轉) , op( 計算).但是如果只用這四個命令進行編程,保證累死你。vim和電腦系統架構所做的事情就是把最常用的部分打封裝好,以供上層使用。對於程式員來說,我們對於代碼的修改並不是一個字母一個字母的,而是一個單詞一個單詞或者一個代碼塊和一個代碼塊甚至是一批檔案一批檔案的。用適當的方式對最常用的操作和移動進行抽象,你就看到了那個好像很嚇人的vim快速鍵速查表。而習慣於用快速鍵進行進行編程之後,我眼中的代碼,不再是一行一行的,而是一塊一塊的。原先一個字母一個字母的添加和修改,現在l變成了逐個單詞,逐個語句以及逐個代碼塊之間的添加和修改。這非常有意義。因為代碼在我的眼中,逐漸由原先的零散的電子原件,變成了可以隨意組裝和配置的整合電路。讀代碼的時候我會進一步關注,模組的作用和模組之間的關係,而不是各個電子原件的串連。寫代碼的時候,我也會嘗試讓自己代碼更具模組化,而這不就是oo神馬的一直所倡導的抽象麼。

  自訂的魅力

  什麼叫做自訂呢?傳說有一幫人覺得vi不夠好,然後他們開發了vim....如果說vi向你提供了最好用的系統調用( 當然是vi開發人員們認為最好用的 ),那麼vim就向你提供了設計自己的系統庫的機會。系統的設計是為了滿足大多數人的基本需要。那麼作為某一個系統的使用者,肯定要想盡辦法讓系統滿足自己的需要。用槍對著比爾大爺( vi 他寫的! )的腦袋然後要求他按照你的習慣專門做一個版本出來,絕對不是一個好主意。且不說你能不能找到比爾大爺他們家的門朝哪兒開,就是人家願意給你做, 也得再組個團隊分析你的按鍵記錄,思考方式以及代碼習慣。等真正做出來了,估計你家經理已經把你炒掉了。而且,別人再牛,最瞭解你的人還是你自己。用自己寫的系統庫,肯定是最舒服的事情( 這裡跑題下,除了自己之外,最瞭解你的人是你家bf/gf,所以需要什麼貼心建議的時候,找他們最好 )使用vim入門之後,如何讓其更加的貼合自己的習慣是我等user的頭等大事。 大多數IDE也支援自訂,比如你可以定義tab的大小,自動儲存的時間以及高亮匹配括弧。不過根據我的經驗,除了你不能讓vim把自己卸載了。。。你幾乎想定義什麼就定義什麼,比如從一個檔案夾中讀取最新的log到臨時檔案中,並且將不可顯示的字元替換成空格這個過程。如果是IDE,我需要首先開啟檔案夾,然後用時間和尾碼把所有的檔案排序,然後將log檔案複製粘貼並且重新命名為tmp.log.然後用IDE開啟這個檔案並且google下如何對不可讀代碼如何進行替換( 我真的不知道怎麼用vs把\0替換成 空格.... )。好吧,這個過程看上去是可以接受的。。( 因為我也這麼做了好久),但是在持續coding若干小時之後還需要反覆如此....那真是的不敢想象。但如果是vim,我可以在閑暇的時候花二十分鐘自訂好這個過程,然後在寫程式的時候用一個命令直接搞定。所謂程式員幸福的日子,就是這麼來的。這是一個相對複雜的例子,在日常使用過程中,只需自訂某些基本操作就可以輕鬆體會到其中的魅力。

  自動化意味著什嗎?

  所謂自動化,就是讓機器負責機器能做的事情,人負責機器不能做的事情。 而自動化的一大優點是讓機械的行為失誤率為0.作為一個要和各種失誤鬥爭的程式員,讓能夠自動化的事情自動化可謂是提高效率不二法寶。比如在檔案建立的時候自動添加到svn,比如在建立cpp檔案的時候自動建立對應標頭檔,或者每次調用new建立記憶體的時候自動在當前函數下添加對應的delete。 vim會協助你這麼做( 嗯,除了幫你在關閉vim之後自動把自己卸載掉 )。就好比你開鎖成功之後,鑰匙會自動回到兜裡一樣。( 相信每個人都有著急找不到鑰匙的時候 )當然,我們也可以養成把鑰匙及時放回口袋的習慣。不過,既然是人就有犯錯的時候,而程式員犯錯的機會又格外的多。特別是回家之後累個半死又急著上廁所和看電視的時候,每月有那麼幾天找不到鑰匙就很正常了。而編程過程中自動化和vim自訂是分不開的,因為當不能自訂關閉檔案的時候讓編輯器幫我做點什麼的時候,鬼才去想讓整個流程自動化起來。所以vim可以像一個貼心的僕人,讓你在每次回家的時候幫你把要是收好,然後在你離開家的時候再遞給你。


  嗯,大概想到了這麼幾點就略微聊下,不過我沒有用過emacs和subline,如果有傷害到其fans的話,我在此向他們表示歉意,因為我真的木有用過其他進階編輯器。下次寫點什麼呢?寫寫我看linux system programming的感受吧。

 

我眼中的vim

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.