1. 程式人生 > >寫代碼要用 Vim,因為越難入門的工具回報越大

寫代碼要用 Vim,因為越難入門的工具回報越大

windows 發的 自帶 錯誤 improve 做的 重寫 36kr 用戶真正的需求

編者按:現在的技術界有一種傾向,將軟件/應用操作簡單化,用戶能輕松上手。但是工具是否強大,取決於它能否靈活地滿足使用者的各種需要。有些工具雖然很難入門,學會了便能對自己的操作有更深的層次的了解,能賦予創造和表達更大的自由度。本文編譯自Quartz的原題為“Forget easy-to-use design. Choose something hard instead”的文章。

Vim是一款文本編輯器,基於上世紀70年代開發的vi。 試過的人都公認說難,就連程序員都覺得光是退出程序都不那麽簡單。但是Vim的用途很廣,不管你用的是Mac還是Windows,軟件都是已經自帶的。而且,只要掌握了使用方法的人,很可能會逢人就安利不止。

“這簡直就是最好用的文本編輯器,跟漢堡店In-n-Out的漢堡一樣讓人滿意。”

我就是Vim“神教”的信徒之一。現在我也要來安利一下。但是,我只是用Vim為例子,我要安利的不單是這款軟件,而是各種“難用”的技術工具。

技術分享圖片

Vim是從vi發展出來的一個文本編輯器, 在代碼補全、編譯及錯誤跳轉方面,編輯功能特別豐富,很多程序員都使用Vim。Vim和Emacs並列成為類Unix系統用戶最喜歡的編輯器。 Vim的第一個版本發布於1991年,最初簡稱是為Vi IMitation,後來功能不斷增加,正式名稱改成Vi IMproved。Vim是一款自由軟件。

現在技術界有一股潮流,工具好不好,似乎都取決於是否易用。照這樣的思維,最好的軟件就是無需說明書,無需解釋,無需教程,你只需要按1或者0。簡單到這種地步,五歲的娃娃也可以很快上手應用自如了。

這樣的標準聽起來很理想, 但是“簡單”不是沒有代價的,而且五歲孩子可不聰明,簡單易用的工具,可想而知,肯定不是靈活的。如果一款軟件將所有操作都簡化成一個按鈕,那麽這個按鈕在設計的時候,就需要對用戶的操作做出很多假設。如果這些假設不符合你的具體情況的話,只能算你運氣不好。

舉一個很明顯的例子。智能手機和筆記本電腦就有很大的不同。在智能手機的應用裏,比如Whatsapp,長按鏈接就會復制鏈接。那麽,這個操作背後的假設就是——Whatapps的開發者想的是,如果用戶長按鏈接,他們可能是想復制鏈接。但是事實可不一定如此。或許我長按是想分享鏈接到其他應用呢?或者我只想復制鏈接中的一部分內容,還有可能我是想將鏈接保存到稍後閱讀清單裏。這些操作在筆記本上都很簡單,但是在手機上,有時反而很麻煩。

問題就在於開發者覺得“易用”的設計,他們想象中的用戶需求,以及用戶真正的需求不總是吻合的。用戶長按文本可能是想分享,怎麽就復制了呢?Word也是如此,又是它總是自動縮進,改都改不了。如果軟件開發者總是習慣於幫用戶做決定,根據自己的假設來設計軟件或應用的功能,這樣的不匹配只會越來越普遍。

這也是復雜工具的優勢所在。與其想辦法、花時間找最簡單易使用的工具,倒不如花點時間掌握最強大的工具,然後精準地實現自己想要的操作。



世界上最難用的文本編輯器

Vim是什麽?為什麽那麽難用?

Vim是一款文本編輯器。編輯文本聽起來不是什麽難事,所以要說文本編輯器難用,估計很多人會不解。文本嘛,敲敲鍵盤,字就出現在屏幕上了,這能有多難?

但是Vim的操作沒這麽簡單。你用Vim輸入文本的時候,敲了鍵盤,字母不一定會出現在鍵盤上。

沒錯,因為它是一款“模式編輯器”,vim的模式可以有多種編輯狀態,最常用的是普通模式,輸入模式,視圖模式,命令模式,普通狀態是vim的默認模式,所有鍵盤的按鍵都是你可以使用的快捷鍵,使用Vim處理文本的時候,鍵盤不再用於輸入字符,而是輸入 vim的各種命令。這樣,用戶非常快速做各種改動。所以Vim常常是用來改代碼。

Vim裏使用的命令很多都很簡單,但是語法很強大,有動詞、名詞和修飾詞。字母d代表“刪除(delete)”,w代表“單詞(word)”。如果你鍵入dw,就可以刪除一個單詞(delete a word)。你可以加上修飾詞,比如數字5, 鍵入d5w就能刪除光標後的5個字。如果你操作失誤,可以按下u來撤銷(undo),然後鍵入i來進入輸入模式(insert),做正常的文本輸入。y代表的是“yank”(拉),用於復制,yw就可以復制一個單字。

實際使用起來如下圖。

技術分享圖片

通過這樣的語法,用戶可以組合出無數種命令,實現具體且非常復雜的操作。在不熟悉的人看來,這些操作可能很炫酷。只要敲幾個鍵,你就能把好幾句話從一段移到另一段;從光標處把下一個句號前的內容一下刪除,然後重寫句子;兩個單字換位置;兩段合為一段,等等。完全不用碰鼠標就能實現很多此類操作。

學會使用難入門的工具有什麽好處?

就我個人來說,學用Vim給我的工作帶來了天翻地覆的改變。在我使用比較熟悉的時候,我覺得自己之前輸入和編輯文本,就像騎小孩子用的自行車一樣,後輪兩側裝著小輪子,跑得穩當,但是又慢又笨拙;就像彈鋼琴,但是一次只按一個琴鍵,根本沒意識到自己可以彈和弦,可以一次按下好幾個鍵。甚至,我就像柏拉圖洞穴隱喻中生活在山洞裏的人,只能看到現實的影子,就以為影子是現實本身。

技術分享圖片

“洞穴隱喻”——設想有這樣一個大洞,通過一個長長的通道與外部世界相連,整個通道能夠擋住任何陽光進入洞內。一組囚徒背對著出口,面向遠處的墻壁。他們的四肢被套上了枷鎖,並且他們的頭頸也被固定住,無法轉動,因此看不到他人,實際上也看不到自己身體的任何部分,而只能夠看到面前的墻壁。他們在如此的環境下終其一生,不知道其他任何東西。在洞穴中,他們身後有一把明火。他們不知道自己和明火之間隔著與人一般高的土墻,在墻的另一邊,人們頭頂東西走來走去,東西的影子被火光投射到囚徒面前的墻壁上,人們的嘈雜聲也回響到墻壁那邊囚徒們的耳朵裏。柏拉圖說,這樣一來,囚徒們一生中所感覺或經驗到的唯一實在就是這些影子和回聲。在此情況下,他們自然而然地會以為這些影子和回聲成了全部的現實,他們能夠談論的,就是這種“現實”以及對這種“現實”的經驗。

這麽說似乎消極了點,但是事實確實如此。掌握了Vim之後, 不斷是在寫代碼,還是在用文字表達自己的時候,感覺都更自如,更得心應手。

而Vim並不是什麽新事物。幾乎計算機普及以來就一直存在了。Vim是最早開發出來的一款文字編輯器。在鼠標普及之前就有了,所以沒有鼠標,才更顯出它的高效。Vim來自軟件開發的早期,當時的編程人員面對有限的計算能力和靈活程度,只能靠使用起來略為復雜的工具來應對。Vim確實很難上手。

放在今天看來,文本編輯這樣簡單的工作都可以這麽復雜,可能難以想象。這是因為,開發Vim的人沒想著做簡單易用的工具,而是把決定權都交給用戶。Vim的開發者考慮的是如何做出最好的工具,功能足夠強大,能夠解決用戶處理任務需要的工具。在Vim的例子中,開發者覺得計算機的文本處理主要是編輯,而不是加入新字符。因此,Vim的默認模式是普通狀態是編輯模式,可以剪切、移動、操縱文本。如果用戶無法接受敲了d,屏幕上卻沒有出現的字母d的情況,那開發者就不能做出這樣的軟件了。只有假設用戶願意接受的情況下,這樣的軟件才有用戶基礎。

找到你自己的想法

使用Vim編輯是成年人學習的一項技能。這種技能想要學會並不簡單,但是正如學烹飪,學修電器,學會拒絕他人一樣,一旦學會,長期看來益處很大。當然,不是所有難學的技能都值得學習,有些程序很難用,很難上手,但是設計得也很糟糕、不實用。在學習Vim的過程中, 我意識到,很多“易用”的工具,用多了只會讓自己越來越傻。

現在新興的易用型軟件,有很多會降低我們的工作/學習效率。簡單的工具一般會自帶假設,中斷使用者的思考過程,為了使用的流暢,犧牲的是效率的最優化。而讓大家退避三舍的難用工具Vim,熟悉之後卻能讓我更自如地表達自己,降低了實現自己腦中所想操作和實際操作之間的阻力。我可以快速寫出自己腦中文本的幾個版本,非常靈活。如果我不喜歡Vim現有的操作,我可以增加其他用戶做的特征,或刪去自己不喜歡的功能,或者花點時間做出最適合自己的工具包。其實也不是這麽難,你可以看看科學作家迪希特(Jay Dixit)的這個演講,他也沒有編程經驗,但是他根據自己的工作習慣和節奏,把Vim的對手工具,Emacs定制成最適合自己的版本。

所以,我們可以嘗試接受復雜的工具:如果能學R語言或者Python,為何執迷於Excel?如果能用自制的Anki卡片,為什麽要買做好的記憶卡片?我們不應該指望軟件幫我們把事情通通完成,而是應該充分應用自己的大腦。

寫代碼要用 Vim,因為越難入門的工具回報越大