01.03 Vim 最少必要知識

原文鏈接:www.jianshu.com

Vim 最少必要知識


題圖

一. Vim是什麼

都說程序員只用兩種編輯器,一種是編輯器之神Vim,一種是神的編輯器Emacs,可現實生活中,我發現真正用這兩種編輯器的人很少,所以我開始有點懷疑這句話的真實性。

剛畢業那會,我對實際的軟件開發瞭解甚少,於是糊里糊塗的進入了服務器開發領域,現在回想起來真是覺得既幸運又後怕。幸運的是,在我完全不瞭解的情況下竟然選擇了後端開發,後怕的是,既然不瞭解,就很可能選擇到其他方向,而另一個選擇可能會造就一個完全不同的人生軌跡。雖然從現在的眼光去看軟件開發的每個方向,都非常有趣和有挑戰,但服務器領域才是我最嚮往的地方,且它極大程度的滿足了我的好奇心。

不知道為什麼,我對很古老的東西很感興趣,服務器開發日常面對的是一個終端界面,沒有圖形化的豐富表現,只有常規的字符,讓我著迷的肯定不是它的表現形式,更深層次的講,它更接近於計算機最開始的樣子,在這種環境下工作可以幫助我更容易的掌握機算機的原理和思想。

區別於Windows這樣的操作系統,Unix/Linux系統的設計原則是簡約(Kiss原則),可能有點違背直覺,大多數人認為Windows更為容易上手,確實如此,但這並不意味著它的設計就是簡單的,使用起來就是高效的。而Unix不同,其中的每一個程序都只完成單一的功能,程序之間可以很容易的交互數據,這樣,通過將不同程序進行任意組合,可以創造出任意的功能,既匹配了程序員這一創造性工作,又極大的提升了工作效率。試比較——在同一目錄下,將所有jpg後綴轉換為png後綴的操作——在哪個系統上操作更為方便。

Unix設計原則對於大多數程序員來說,是一種“信仰”,而Vim也是其中一個具備KISS原則的產品。

所謂程序員只用兩種編輯器,我現在似乎明白為什麼使用它們的程序員實際上並不多的原因了,這句話缺少了一個時間的維度,在過去,圖形界面不發達,人們用計算機只能使用命令行,在命令行中也只能使用Vim或Emacs編輯器,而隨著時代的變遷,人們更傾向於使用易於上手的圖形化軟件,他們希望速成,不願意在編輯器上花成本,而逐漸忘卻了Vim或Emacs。時至今日,這句話變成了:

程序員都用兩種編輯器,大多數人使用圖形化編輯器,少數人使用Vim或Emacs。

二. 我為什麼使用Vim

我為什麼會選擇Vim,一是因為Vim可以在所有操作系統及終端中使用,真正做到了“一招鮮,吃遍天”。學會了Vim,你再也不需要學習其他編輯器。

相反,如果你使用IDE的話,可能這輩子要學習很多編輯器,例如當你使用C/C++時,你可能會用VS/SourceInsignt/SublimeText等,當你使用Java時,你可能會換成Eclipse/Android Studio,而當你做前端開發時,你需要學習使用WebStorm/Atom等。同時,這些IDE都無法在終端中運行,這時你要編碼和調試,需要跨越兩個環境,效率極低,如果你想改變這種現狀,你還得學習Vim。

而對於程序員來說,一個順手的開發環境決定了他的開發效率和幸福指數,有時為了一個穩定又一致的開發環境,我會放棄公司的辦公電腦,取而代之的是背一部幾公斤重的筆記本來來回回。

二是Vim的效率很高,它會想盡一切辦法將你的雙手放在主鍵盤區,甚至不需要碰小鍵盤或鼠標,更深一層,為了達到相同的目的,它會讓你儘可能減少按鍵次數。這樣做都是為了讓你更加專注,集中精力去完成當前的工作,而右手經常在鼠標和鍵盤之間來回切換,無疑是一種“打斷”。

最後一個原因,使用Vim真的很酷,因為Vim學習曲線比較陡峭,即便對於程序員同學來說,它不好用,或是一頭難以馴服的猛獸,所以在這種情況下,如果你可以把它運用自如,你擁有的就是別人從未有過的一種體驗。

三. 至少要掌握的知識

說Vim學習曲線陡峭,其實也是相對於其他編輯器來說的,其實也並沒有多陡峭,下面主要從以5個概念,來談一下Vim的最少必要知識,這是我平時使用Vim的過程中,總結出來的:對於一個新人,至少要知道哪些用法呢?

  1. 模式
  2. 命令
  3. 窗口,Buffer
  4. 配置
  5. 插件

模式

模式是Vim區別於其他編輯器的首要功能,它要解決的問題是“只使用鍵盤就可以完成所有工作”,你可以想象一下,當你在使用電腦時,剋制自己不用鼠標或觸控板時的感受:你也許會感覺非常無力吧。而當你在使用Vim時,這件事情不會給你帶來任何不適,相反如果你適應了Vim的模式後,看到別人的右手在鍵盤和鼠標之間來回切換,你才會覺得那個人的效率和自己比起來是多麼低效。

Vim中的三個模式分別是

  1. 普通模式normal
  2. 插入模式insert
  3. 可視模式visual

普通模式相對於插入模式,它用來控制光標移動、複製/粘貼文本、排版等,並將這些功能映射到指定的快捷鍵中,這樣當你輸入一個按鍵,它就會幫你完成以上功能。

按鍵幫你從其他模式切換到普通模式,所以當蘋果在最新版的macbook pro中取消按鍵時,一大批Vimer第一個反應就是macbook pro不適合開發者,不過我覺得這應該不是什麼大問題,在切換到Vim時,肯定會彈出相應的虛擬按鍵,只是手感上應該會差很多,但如果要追求更好的手感,我推薦你去外接一個機械鍵盤,真的不一樣。

h/j/k/l

這四個鍵在鍵盤的最中間,當你處於普通模式時,h/j/k/l這四個按鍵分別代表了光標向左/下/上/右移動一個字符,當然你完全不需進行刻意的記憶,打開電腦練習幾次就習慣了。學會了這幾個按鍵,你的手指再也不需要移動到小鍵盤上去了。

Vim 最少必要知識


hjkl

移動

ctrl+f/b/d/u

這四個快捷鍵,可以幫助你翻頁,實現光標在文件中快速移動。

  • ctrl+f:向下翻一頁
  • ctrl+b:向上翻一頁
  • ctrl+d:向上翻半頁
  • ctrl+u:向下翻半頁

移動

b/w/e/shift+^/shift+$

普通模式下,h和l每次只能向左或向右移動一個字符,這無疑是非常慢的,下面幾個快捷鍵,可以幫助你在行內快速移動

  • b:將光標移動到上一個單詞的第一個字符
  • w:將光標移動到下一個單詞的第一個字符
  • e:將光標移動到下一個單詞的最後一個字符
  • shift+^:將光標移動到行首
  • shift+$:將光標移動到行尾

移動

f/F'a'

在行內快速移動的“升級版”,單引號中的內容可以用任意字符代替,例如f'b'/F'b'

  • fa:將光標移到右邊的第一個字符a上,繼續按';'(分號),可以延相同的方向找到下一個a,繼續按','(逗號),可以延反方向找到下一個a
  • Fa:將光標移到左邊的第一個字符a上,繼續按';'(分號),可以延相同的方向找到下一個a,繼續按','(逗號),可以延反方向找到下一個a

當你熟練使用這個快捷鍵,你就知道我為什麼會說:

Vim會盡量減少你敲鍵盤的次數

移動

H/M/L

這幾個快捷鍵,可以幫你把光標移動到屏幕的上方/中間/下方,注意是要打開大寫鎖定或按住shift

  • H(high):將光標移動到屏幕上方
  • M(middle):將光標移動到屏幕中間
  • L(low):將光標移動到屏幕下方

移動

[n]jk

中括號中的n可以用任意數字代替,例如10j表示將光標向下移動10行,而10k則相反

  • [n]j:將光標向下移動n行
  • [n]k:將光標向上移動n行

移動

[n]G

同[n]jk命令,[n]G命令會幫你把光標移動到指定的行數,例如100G,會將光標移動到文件的第100行

移動

gg/G

這兩個快捷鍵,會將光標移動到文檔的第一行或最後一行

  • gg:將光標移動到文檔的第一行
  • G:將光標移動到文檔的最後一行

移動

zz

這個快捷鍵會將當前光標所在行居中

移動

%

該快捷鍵實質上是shift+5兩個鍵的組合,可以讓你的光標在成對的括號間跳轉,例如大括號、圓括號、方括號等,該功能在寫代碼時經常使用。

移動

*/#/n/N

  • *:在文件中查找光標下的單詞(向下),如果要繼續查找,可以按n向下查找,按N反向查找
  • #:在文件中查找光標下的單詞(向上),如果要繼續查找,可以按n向上查找,按N反向查找

移動

[[、]]、{、}

這套指令也特別容易記憶,因為大括號或花括號的方向即是你的光標所移動的方向

  • [[:將光標移動到上一個代碼段(或函數)的行首
  • ]]:將光標移動到下一個代碼段(或函數)的行首
  • {:將光標移動到上一個空行行首
  • }:將光標移動到下一個空行行首
Vim 最少必要知識


關注光標變化

以上是在普通模式中最常用的移動操作,熟練掌握以上操作,Vim便成了你手中的“六脈神劍”,可以任由你“指哪打哪”了。

u/ctrl+r

  • u:撤銷
  • ctrl+r :重做

y/yy/p/P/+"y/+"p

這幾個命令表示基本的複製和粘貼

  • y:複製,比較常用的是先進入可視模式,然後按y,複製所選文本
  • yy:複製一整行
  • p:從光標右邊開始粘貼,注意不能粘貼到Vim外的程序中
  • P:大P,從光標左邊開始粘貼
  • +"y:複製到系統剪貼板,這樣就可以粘貼到Vim外面去了
  • +"p:將Vim外複製的內容粘貼進來

+"y/p這種三個鍵的快捷鍵不是很方便,所以我們可以在vim中建立按鍵映射,將它的操作簡化,例如在~/.vimrc(沒有該文件的情況下要手動創建)中加入:

<code>" 定義快捷鍵的前綴,即<leader>
let mapleader="'"
" 在可視模式下,'+y則為複製到剪貼板
vnoremap <leader>y "+y
" 普通模式下,'+p則為從剪貼板粘貼到Vim
nmap <leader>p "+p/<leader>/<leader>/<leader>/<code>

a/i/A/I/r/cc/cw

  • a:從光標右邊開始插入,進入插入模式
  • i:從光標左邊開始插入,進入插入模式
  • A:從行尾插入,進入插入模式
  • I:從行首插入,進入插入模式
  • r:替換光標下的字符,不進入插入模式,例如rx,將光標下的字符替換為x
  • cc:修改光標所在行,進入插入模式
  • cw:修改光標開始以右的單詞,這個組合鍵在編碼的時候也經常使用,Vim中的組合鍵由動作+ 範圍組成,如c為修改動作,w為一個單詞的範圍,再如d2j表示:刪除光標所在行及下一行,其中d為刪除動作,2j為下兩行

.

點號鍵可以幫你重複上次編輯操作,例如你想手動將文件中所有的int轉換為int64,只需要:

  1. 進入普通模式,將光標移到int下
  2. 敲擊*查找int
  3. 敲擊cw替換int,輸入int64
  4. 按ESC繼續進入普通模式
  5. 敲擊n查找下一個int
  6. 敲擊.重複執行替換,然後繼續執行第5步驟

插入模式沒什麼可說的,在這種模式下和其他編輯器沒有什麼區別,下面說下可視模式

v/V/ctrl+v

v、V或ctrl+v進入可視模式,在這種模式下你可以自由選擇你需要操作的文本,然後進行批量操作

  • v:進入可視模式,按[n]hjkl調整範圍,n代表分別對hjkl做的次數,例如v10l表示選擇光標右邊的10個字符
  • V:選擇光標下的行,V10j表示選擇光標及光標下的10行
  • ctrl+v:可以選擇一個塊狀的區域,這個功能能夠很好的幫你完成塊註釋或塊反註釋

下圖展示了我將某一個代碼塊註釋掉的動作

  • 首先ctrl+v,然後敲擊6j,垂直選擇6行
  • 輸入:s,^,//,|noh將行首替換為註釋符號//,noh是禁止高亮的意思
Vim 最少必要知識


visual_mode

選擇

命令

在Vim中可以通過輸入命令的方式進行交互,在普通模式下,輸入:調出命令欄——Vim最底部的一欄,命令分為兩種

  1. Vim調用shell的命令,前面要加一個感嘆號,例如輸入:!pwd執行pwd
  2. Vim內置或用戶通過插件實現的命令,例如下面的幾個常用命令

:/ :?

查找命令

  • :/id:從當前光標向下查找文件中的id字符串,為了方便,你可以直接敲擊/id
  • :?id:從當前光標向上查找文件中的id字符串,為了方便,你可以直接敲擊?id

:%s,Id,ID,g

:s為替換命令,上文可視模式中已經展示了批量替換的威力,另外一種比較常用的是全文替換,例如:%s,Id,ID,g表示將全文中的Id替換為ID,g的意思是一行裡面如果有多個匹配項,則都進行替換,和sed中的替換是一個概念

:q :w :x :e

學到這裡你已經掌握了Vim中的基本用法,現在可以退出休息一下了:)

  • :q 退出
  • :w 保存
  • :x 保存並退出
  • :e 編輯文件,不存在則創建,例如:e ~/.vimrc會編輯~/.vimrc這個文件

:help

即便看完了以上內容,你可以順使用Vim了,但最好還是瀏覽一遍幫助文檔,這樣當你遇到某個問題時,可以通過help進行查找。

Window,Buffer

Vim一次可以打開多個文件,同時打開的文件暫存在Buffer對象中,每個打開的文件對應一個buffer對象,你可以選擇性的通過打開某個Buffer來顯示對應的文件,而一旦該文件顯示出來,用來顯示該文件的窗口被稱為Window,如果你的屏幕夠大,你可以把Vim分成多個窗口,即實現了多個文件同時進行編輯的功能,非常方便你編寫代碼。這也是Vim和其他編輯器在理念上不一樣的地方,其他編輯器使用Tab來打開多個文件,雖然Vim也有Tab功能,但Window+Buffer的方式更符合習慣

:split vsplit ctrl-w+h/j/k/l

這幾個是Vim中操作窗口的命令

  • :split 將光標所在的Window分為上下兩個窗口
  • :vsplit 將光標所在的Window分為左右兩個窗口
  • ctrl-w h/j/k/l 幫助你在不同窗口間進行切換,h/j/k/l分別代表了切換到左/下/上/右窗口

看完了以上內容,再看這幅濃縮圖,就會覺得格外清晰

Vim 最少必要知識


pic

配置

Vim是高度可定製的編輯器,你可以通過配置從而把它打造成一個非常強大的IDE,而所有的配置基本上都在~/.vimrc中完成,非常方便管理,網上講配置的文章和文檔非常多,相信你可以在網上找到你想要的內容。

插件

插件本質上是配置的一種,而掌握了Vim插件的安裝和使用後,你就可以將Vim運用到實際工作中了,基本的邏輯是,先明確自己的需求,然後在google中搜索對應的關鍵字便可以找到你所需要的插件,這裡就介紹一個非常重要的插件

NERDTree

NERDTree插件配合窗口功能非常好用,NERDTree插件可以幫你列出系統中的目錄和文件樹,打開其中文件的同時,還可以幫你進行分屏,有了這樣的插件,你應該會更得心應手。

版權申明:
此文章首發於公眾號程序員在深圳,搜索 studycode 即可關注


分享到:


相關文章: