1. 程式人生 > >簡明 VIM 練級攻略

簡明 VIM 練級攻略

 Vim的學習曲線相當的大(參看各種文字編輯器的學習曲線),所以,如果你一開始看到的是一大堆VIM的命令分類,你一定會對這個編輯器失去興趣的。你想以最快的速度學習人類史上最好的文字編輯器VIM嗎?你先得懂得如何在VIM倖存下來,然後一點一點地學習各種戲法。

Vim the Six Billion Dollar editor

Better, Stronger, Faster.

學習vim並且其會成為你最後一個使用的文字編輯器。沒有比這個更好的文字編輯器了,非常地難學,但是卻不可思議地好用。

我建議下面這四個步驟:

  1. 存活
  2. 感覺良好
  3. 覺得更好,更強,更快
  4. 使用VIM的超能力

當你讀完這篇文章,你會成為一個Vim的superstar。

在開始學習以前,我需要給你一些警告:

  • 學習vim在開始時是痛苦的。
  • 需要時間
  • 需要不斷地練習,就像你學習一個樂器一樣。
  • 不要期望你能在3天內把vim練得比別的編輯器更有效率。
  • 事實上,你需要2周時間的苦練,而不是3天。

第一級 存活

  1. 安裝 vim
  2. 啟動Vim
  3. 什麼也別幹!請先閱讀

當你安裝好一個編輯器後,你一定會想在其中輸入點什麼東西,然後看看這個編輯器是什麼樣子。但vim不是這樣的,請按照下面的命令操作:

  • 啟動Vim後,vim在 Normal 模式下。
  • 讓我們進入Insert模式,請按下鍵i。(陳皓注:你會看到vim左下角有一個–insert–字樣,表示,你可以以插入的方式輸入了)
  • 此時,你可以輸入文字了,就像你用“記事本”一樣。
  • 如果你想返回Normal模式,請按ESC鍵。

現在,你知道如何在Insert和NormaL模式下切換了。下面是一些命令,可以讓你在Normal模式下倖存下來:

iInsert 模式,按ESC回到Normal模式.

     x → 刪當前游標所在的一個字元。

     :wq → 存檔+退出(:w存檔:q退出)(注::w後可以跟檔名)

     dd →刪除當前行,並把刪除的行存到剪貼簿裡

     p →貼上剪貼簿

推薦:

hjkl(強例推薦使用其移動游標,但不必需)→你也可以使用游標鍵(←↓↑→).注:j就像下箭頭。

:help <command>→顯示相關命令的幫助。你也可以就輸入 :help

 而不跟命令。(注:退出幫助需要輸入:q)

你能在vim倖存下來只需要上述的那5個命令,你就可以編輯文字了,你一定要把這些命令練成一種下意識的狀態。於是你就可以開始進階到第二級了。

當是,在你進入第二級時,需要再說一下Normal模式。在一般的編輯器下,當你需要copy一段文字的時候,你需要使用 Ctrl鍵,比如:Ctrl-C。也就是說,Ctrl鍵就好像功能鍵一樣,當你按下了功能鍵Ctrl後,C就不在是C了,而且就是一個命令或是一個快鍵鍵了,在VIM的Normal模式下,所有的鍵就是功能鍵了。這個你需要知道。

標記:

  • 下面的文字中,如果是 Ctrl-λ我會寫成 <C-λ>.
  • 以 : 開始的命令你需要輸入 <enter>回車,例如—如果我寫成 :q 也就是說你要輸入 :q<enter>.

第二級 感覺良好

上面的那些命令只能讓你存活下來,現在是時候學習一些更多的命令了,下面是我的建議:(陳皓注:所有的命令都需要在Normal模式下使用,如果你不知道現在在什麼樣的模式,你就狂按幾次ESC鍵)

1.各種插入模式

  • a → 在游標後插入
  • o → 在當前行後插入一個新行
  • O → 在當前行前插入一個新行
  • cw → 替換游標所在位置的一個單詞

2.簡單的移動游標

  • 0 → 數字零,到行頭
  • ^ → 到本行第一個不是blank字元的位置(所謂blank字元就是空格,tab,換行,回車等)
  • $ → 到本行行尾
  • g_ → 到本行最後一個不是blank字元的位置。
  • /pattern → 搜尋 pattern 的字串(陳皓注:如果搜尋出多個匹配,可按n鍵到下一個)

3.拷貝/貼上 (陳皓注:下面的P應該不分大小寫)

  • P → 貼上
  • yy → 拷貝當前行當行於 ddP

4.Undo/Redo

  • u → undo
  • <C-r> → redo

5.開啟/儲存/退出/改變檔案(Buffer)

  • :e <path/to/file>→開啟一個檔案
  • :w →存檔
  • :saveas <path/to/file>→另存為 <path/to/file>
  • :x, ZZ 或 :wq→儲存並退出(:x表示僅在需要時儲存,ZZ不需要輸入冒號並回車)
  • :q! → 退出不儲存 :qa! 強行退出所有的正在編輯的檔案,就算別的檔案有更改。
  • :bn 和 :bp → 你可以同時開啟很多檔案,使用這兩個命令來切換下一個或上一個檔案。(陳皓注:我喜歡使用:n到下一個檔案)

花點時間熟悉一下上面的命令,一旦你掌握他們了,你就幾乎可以幹其它編輯器都能幹的事了。但是到現在為止,你還是覺得使用vim還是有點笨拙,不過沒關係,你可以進階到第三級了。

第三級 更好,更強,更快

先恭喜你!你乾的很不錯。我們可以開始一些更為有趣的事了。在第三級,我們只談那些和vi可以相容的命令。

更好

下面,讓我們看一下vim是怎麼重複自己的:

  1. . →(小數點)可以重複上一次的命令
  2. N<command>→重複某個命令N次

下面是一個示例,找開一個檔案你可以試試下面的命令:

2dd → 刪除2行

3p → 貼上文字3次

100idesu [ESC] → 會寫下 “desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu “

. →重複上一個命令——100 “desu“.

3. →重複 3 次 “desu”(注意:不是300,你看,VIM多聰明啊).

更強

你要讓你的游標移動更有效率,你一定要了解下面的這些命令,千萬別跳過

1.NG→到第N行(注:注意命令中的G是大寫的,另我一般使用:N到第N行,如:137到第137行)

2.gg→到第一行。(注:相當於1G,或:1)

3.G→到最後一行。

4.按單詞移動:

w →到下一個單詞的開頭。

e →到下一個單詞的結尾。

如果你認為單詞是由預設方式,那麼就用小寫的e和w。預設上來說,一個單詞由字母,數字和下劃線組成(陳皓注:程式變數)

如果你認為單詞是由blank字元分隔符,那麼你需要使用大寫的E和W。(陳皓注:程式語句)

Word moves example

下面,讓我來說說最強的游標移動:

  • % : 匹配括號移動,包括 (, {, [. (陳皓注:你需要把游標先移到括號上)
  • * 和 #:匹配游標當前所在的單詞,移動游標到下一個(或上一個)匹配單詞(*是下一個,#是上一個)

相信我,上面這三個命令對程式設計師來說是相當強大的。

更快

你一定要記住游標的移動,因為很多命令都可以和這些移動游標的命令連動。很多命令都可以如下來幹:

<start position><command><end position>

例如 0y$ 命令意味著:

  • 0 → 先到行頭
  • y → 從這裡開始拷貝
  • $ → 拷貝到本行最後一個字元

你可可以輸入 ye,從當前位置拷貝到本單詞的最後一個字元。

你也可以輸入 y2/foo 來拷貝2個“foo”之間的字串。

還有很多時間並不一定你就一定要按y才會拷貝,下面的命令也會被拷貝:

  • d (刪除 )
  • v (視覺化的選擇)
  • gU (變大寫)
  • gu (變小寫)
  • 等等

(注:視覺化選擇是一個很有意思的命令,你可以先按v,然後移動游標,你就會看到文字被選擇,然後,你可能d,也可y,也可以變大寫等)

第四級 Vim 超能力

你只需要掌握前面的命令,你就可以很舒服的使用VIM了。但是,現在,我們向你介紹的是VIM殺手級的功能。下面這些功能是我只用vim的原因。

在當前行上移動游標: 0 ^ $ fF t T , ;

  • 0 →到行頭
  • ^ →到本行的第一個非blank字元
  • $ →到行尾
  • g_ →到本行最後一個不是blank字元的位置。
  • fa →到下一個為a的字元處,你也可以fs到下一個為s的字元。
  • t, →逗號前的第一個字元。逗號可以變成其它字元。
  • 3fa →在當前行查詢第三個出現的a。
  • F 和 T →和 f 和 t 一樣,只不過是相反方向。

    Line moves

還有一個很有用的命令是 dt" →刪除所有的內容,直到遇到雙引號—— "。

區域選擇<action>a<object><action>i<object>

在visual模式下,這些命令很強大,其命令格式為

<action>a<object><action>i<object>

  • action可以是任何的命令,如 d(刪除), y (拷貝),v(可以視模式選擇)。
  • object可能是: w一個單詞, W一個以空格為分隔的單詞, s一個句字, p一個段落。也可以是一個特別的字元:"、 '、 )、 }、 ]。

假設你有一個字串 (map (+) ("foo")).而游標鍵在第一個 的位置。

  • vi" → 會選擇 foo.
  • va" → 會選擇 "foo".
  • vi) → 會選擇 "foo".
  • va) → 會選擇("foo").
  • v2i) → 會選擇 map (+) ("foo")
  • v2a) → 會選擇 (map (+) ("foo"))

Text objects selection

塊操作: <C-v>

塊操作,典型的操作: 0 <C-v> <C-d> I-- [ESC]

  • ^ →到行頭
  • <C-v> →開始塊操作
  • <C-d> →向下移動 (你也可以使用hjkl來移動游標,或是使用%,或是別的)
  • I-- [ESC] →I是插入,插入“--”,按ESC鍵來為每一行生效。

Rectangular blocks

在Windows下的vim,你需要使用 <C-q>而不是 <C-v> ,<C-v> 是拷貝剪貼簿。

自動提示: <C-n> 和 <C-p>

在Insert模式下,你可以輸入一個詞的開頭,然後按 <C-p>或是<C-n>,自動補齊功能就出現了……

Completion

巨集錄製:qa操作序列 q, @a, @@

  • qa把你的操作記錄在暫存器 a。
  • 於是 @a 會replay被錄製的巨集。
  • @@是一個快捷鍵用來replay最新錄製的巨集。

示例

在一個只有一行且這一行只有“1”的文字中,鍵入如下命令:

  • qaYp<C-a>q
    • qa開始錄製
    • Yp複製行.
    • <C-a>增加1.
    • q停止錄製.
  • @a →在1下面寫下 2
  • @@ →在2 正面寫下3
  • 現在做 [email protected]@ 會建立新的100行,並把資料增加到 103.

Macros

視覺化選擇: v,V,<C-v>

前面,我們看到了 <C-v>的示例(在Windows下應該是<C-q>),我們可以使用 vV。一但被選了,你可以做下面的事:

Once the selection made, you can:

  • J→把所有的行連線起來(變成一行)
  • <>→左右縮排
  • = →自動給縮排(注:這個功能相當強大,我太喜歡了)

Autoindent

在所有被選擇的行後加上點東西:

  • <C-v>
  • 選中相關的行(可使用 j 或 <C-d> 或是 /pattern 或是 % 等……)
  • $到行最後
  • A,輸入字串,按ESC。

Append to many lines

分屏::splitvsplit.

下面是主要的命令,你可以使用VIM的幫助 :help split. 你可以參考本站以前的一篇文章VIM分屏

  • :split → 建立分屏 (:vsplit建立垂直分屏)
  • <C-w><dir> : dir就是方向,可以是 hjkl 或是 ←↓↑→ 中的一個,其用來切換分屏。
  • <C-w>_ (或 <C-w>|) :最大化尺寸 (<C-w>| 垂直分屏)
  • <C-w>+ (或 <C-w>-):增加尺寸

Split

結束語

  • 上面是作者最常用的90%的命令。
  • 我建議你每天都學1到2個新的命令。
  • 在兩到三週後,你會感到vim的強大的。
  • 有時候,學習VIM就像是在死背一些東西。
  • 幸運的是,vim有很多很不錯的工具和優秀的文件。
  • 執行vimtutor直到你熟悉了那些基本命令。
  • 其線上幫助文件中你應該要仔細閱讀的是 :help usr_02.txt.
  • 你會學習到諸如  !, 目錄,暫存器,外掛等很多其它的功能。

學習vim就像學彈鋼琴一樣,一旦學會,受益無窮。

對於vi/vim只是點評一點:這是一個你不需要使用滑鼠,不需使用小鍵盤,只需要使用大鍵盤就可以完成很多複雜功能文字編輯的編輯器。不然,Visual Studio也不就會有vim的外掛了

相關推薦

【轉】簡明 Vim

優秀 super 換行 下劃線 分屏 內容 改變 鼠標 cool 原文出處: yannesposito 譯文出處:陳晧 Vim的學習曲線相當的大,所以,如果你一開始看到的是一大堆VIM的命令分類,你一定會對這個編輯器失去興趣的。下面的文章翻譯自《Learn Vim

簡明Vim

Vim的學習曲線相當的大,所以,如果你一開始看到的是一大堆VIM的命令分類,你一定會對這個編輯器失去興趣的。下面的文章翻譯自《Learn Vim Progressively》,我覺得這是給新手最好的VIM的升級教程了,沒有列舉所有的命令,只是列舉了那些最有用的命令。

[zz] 簡明 VIM

vim的學習曲線相當的大(參看各種文字編輯器的學習曲線),所以,如果你一開始看到的是一大堆VIM的命令分類,你一定會對這個編輯器失去興趣的。下面的文章翻譯自《Learn Vim Progressively》,我覺得這是給新手最好的VIM的升級教程了,沒有列舉所有的命令,只是列舉了那些最有用的命令。非

簡明 VIM

 Vim的學習曲線相當的大(參看各種文字編輯器的學習曲線),所以,如果你一開始看到的是一大堆VIM的命令分類,你一定會對這個編輯器失去興趣的。你想以最快的速度學習人類史上最好的文字編輯器VIM嗎?你先得懂得如何在VIM倖存下來,然後一點一點地學習各種戲法。 Vim the Six Billion Doll

簡明 Vim 如何快速熟練Vim編輯

vim的學習曲線相當的大(參看各種文字編輯器的學習曲線),所以,如果你一開始看到的是一大堆VIM的命令分類,你一定會對這個編輯器失去興趣的。下面的文章翻譯自《Learn Vim Progressively》,我覺得這是給新手最好的VIM的升級教程了,沒有列舉所有的命令,

VIM]:簡明Vim

(轉載本站文章請註明作者和出處 酷 殼 – CoolShell.cn ,請勿用於任何商業用途) vim的學習曲線相當的大(參看各種文字編輯器的學習曲線),所以,如果你一開始看到的是一大堆VIM的命令分類,你一定會對這個編輯器失去興趣的。下面的文章翻譯自《Learn Vim Progressively

程序員技術(轉)

proxy sele more class 算法 tp服務器 list scrip 子程序 前言   你是否覺得自己從學校畢業的時候只做過小玩具一樣的程序?走入職場後哪怕沒有什麽經驗也可以把以下這些課外練習走一遍(朋友的抱怨:學校課程總是從理論出發,作業項目都看不出有什麽實

學習筆記---程式設計師(入門篇、修養篇、專業基礎篇、軟體設計篇、高手成長篇)

根據極客時間 左耳朵耗子 整理,請忽略最後的每一行最後的數字 文章目錄 1. 入門篇 47 2. 修養篇 51 3. 專業基礎篇 56 4. 軟體設計篇 60 5. 高手養成 63 1. 入門篇 47

系統 | 京東架構師傾情解讀

劉慎寶:京東財務研發部架構師,主要負責財務研發部的基礎元件和各系統技術方案支援,10+年網際網路研發專家。 2010年入職京東並歷經幾乎所有618和雙11挑戰。精通高併發服務搭建和業務建模,曾多次主導京東財務系統架構升級和資料庫升級,主導結算魔方重構,訂單臺賬優化、價保優化等重大研發專

java

0. 概述 在**《2019秋招經驗談》**這篇文章中,我通過我的練級之路篇介紹了我是如何轉行的,開啟Java後端開發工程師之路的,通過認知思維篇講述了在開啟練級之路之前你需要具備的心態以及思維,通過專業技術篇介紹了Java後端開發工程師需要掌握的核心知識,通

程式設計師(2018):前端基礎和底層原理

這個是我訂閱 陳皓老師在極客上的專欄《左耳聽風》,我整理出來是為了自己方便學習,同時也分享給你們一起學習,當然如果有興趣,可以去訂閱,為了避免廣告嫌疑,我這就不多說了!以下第一人稱是指陳皓老師。 對於前端的學習和提高,我的基本思路是這樣的。首先,前端的三個最基本的

對程式設計師技術的補充

1. 併發程式設計 隨著單機上CPU核數的不斷增多,以及網際網路中大型網站每天產生的海量資料,併發程式設計將會成為程式設計師必不可少的技能。 學習《Erlang程式設計》和Scala,理解函數語言程式設計,搞清Actor模式以及併發程式設計的訊息傳遞方式。 2.

程式設計師技術

月光部落格6月12日發表了《寫給新手程式設計師的一封信》,翻譯自《An open letter to those who want to start programming》,我的朋友(他在本站的id是Mailper)告訴我,他希望在酷殼上看到一篇更具操作性的文章。因為他也是喜歡程式設計和技術的傢伙,於是,我

程式設計師技術(coolshell)

月光部落格6月12日發表了《寫給新手程式設計師的一封信》,翻譯自《An open letter to those who want to start programming》,我的朋友(他在本站的id是Mailper)告訴我,他希望在酷殼上看到一篇更具操作性的文章。因為

程式設計師技術——關於IT行業的高瞻遠矚以及學習之路的建議

你是否覺得自己從學校畢業的時候只做過小玩具一樣的程式?走入職場後哪怕沒有什麼經驗也可以把以下這些課外練習走一遍(朋友的抱怨:學校課程總是從理論出發,作業專案都看不出有什麼實際作用,不如從工作中的需求出發) 建議: · 不要亂買書,不要亂追新技術新名詞,基礎的東西經過很長時間積累而且還會在未來至少10年

程式設計師

•瞭解NoSQL資料庫(有人說可能是一個過渡炒作的技術),不過因為超大規模以及高併發的純動態型網站日漸成為主流,而SNS類網站在資料存取過程中有著實時性等剛性需求,這使得目前NoSQL資料庫慢慢成了人們所關注的焦點,並大有成為取代關係型資料庫而成為未來主流資料儲存模式的趨勢。當前NoSQL資料庫很多,大部分都

廢棄fastjson!大型專案遷移Gson保姆

# 前言 大家好,又雙叒叕見面了,我是天天放大家鴿子的蠻三刀。 在被大家取關之前,我立下一個“遠大的理想”,一定要在這周更新文章。現在看來,flag有用了。。。 本篇文章是我這一個多月來幫助組內廢棄fastjson框架的總結,我們將大部分Java倉庫從fastjson遷移至了Gson。 這麼做的主要的

【Linux】- 簡明Vim練習

vim的學習曲線相當的大(參看各種文字編輯器的學習曲線),所以,如果你一開始看到的是一大堆VIM的命令分類,你一定會對這個編輯器失去興趣的。下面的文章翻譯自《Learn Vim Progressively》,我覺得這是給新手最好的VIM的升級教程了,沒有列舉所有的命令,只是列舉了那些最有用的命令。非常不錯。

程序員神跳槽:什麽時候該跳?做什麽準備?到哪裏找工作?

博文大賽 contain 關心 實習生 lag 企業 創新思維 任務 法則 1、引言 每年的3、4月份都是求職高峰時期,目前已進入6、7月份了,你已經成功換工作了嗎? 這次我們想聊的,就是程序員跳槽這件事兒,我打算從三個方面來說: 1)程序員什麽時候該跳槽? 2)跳槽前你

大資料入門學習

資料科學並沒有一個獨立的學科體系,統計學,機器學習,資料探勘,資料庫,分散式計算,雲端計算,資訊視覺化等技術或方法來對付資料。 但從狹義上來看,我認為資料科學就是解決三個問題: 很多初學者,對大資料的概念都是模糊不清的,大資料是什麼,能做什麼,學的時候,該按照什麼線路去學習,學完往哪方面發展