Vim入門教程

Vim入門教程

2015/04/21 · 書籍與教程 · 2 評論 · Vim html

分享到: 30
本文由  伯樂在線 -  巽離 翻譯, sunbiaobiao 校稿。未經許可,禁止轉載!
英文出處: Daniel Miessler。歡迎加入 翻譯組

儘管網上有成打的Vim在線教程,可是要麼艱深晦澀,要麼太過膚淺。本教程的目標讓每一個階段都有斬獲,從理解它的哲學(將和你終身相伴)到超越如今編輯技巧,成爲其中的牛人。 git

簡單來講,本教程的學習方式將使你終身受益。 github

爲何選擇vim

我相信大多數人可能因爲如下三點緣由而使用vim: 編程

一、vim無所不在。學習vim你無需擔憂到了其餘平臺須要學習新編輯器。 vim

二、可擴展性。你能夠只用它來編輯配置文件,也能夠將它當作你的開發平臺。 緩存

三、功能強大。它的工做方式與天然語言相似。即便一開始你對vim一無所知,通過一段時間的使用學習,很快也會成爲牛人。 sass

一句話,我相信一旦你開始學習,你會以爲就像掌握母語還有基礎數學這些基本技能同樣,也能天然而然地掌握vim。好了,在瞭解這些知識以後,讓咱們正式開始vim技術的學習吧。 安全

Approach

Kana大神說過,對vim的掌握有五個層次: 框架

  • 層次0: 對vim一無所知
  • 層次1: 瞭解vim的基本使用
  • 層次2: 知道可視模式
  • 層次3: 知道多種移動動做
  • 層次4: 再也不須要可視模式

對此我並不瞭解,不過我認爲這種觀點值得咱們注意。畢竟,kana是vim大神。在本教程中,我將經過下面四個主要模塊來向你展現vim。 編程語言

  1. 基礎介紹:這部分基礎介紹能快速創建起你對vim的正確認知。
  2. 具體操做: 這塊是乾貨。作好準備來享用吧。
  3. 進階: 這部分我會教你怎樣成爲vim牛人。
  4. 常見問題: 這裏會講述一些常見問題解決技巧。

換句話說,若是你已經對vim有所瞭解的話,建議你從具體操做這部分開始。若是你熟練掌握這部分的話,就直接進入進階開始學功夫。假如你看這篇教程是爲了某個具體問題,那麼請進入常見問題章節。

因此呢,創建vim世界觀,vim基本操做,高手進階以及常見問題——這幾部分任君挑選。

配置

我曾說過,不但願這是一本超級vim配置手冊,網上已經有不少這類教程了。本教程的目的在於強化你對vim的理解,幫助你熟練掌握這個工具。不過咱們也會稍微介紹一些基本的配置。

首先,我建議你安裝(幾乎)自我管理的vim。我就曾試過Janus(vim的發行版),可是我沒法肯定它究竟在作什麼,這讓我感到很挫敗。我偏好的配置就像vim自身同樣,簡單而優雅。

爲了達到這個目的,我直接將用戶主目錄下的.vim目錄和.vimrc做爲配置文件。

A few key ~/.vimrc changes

./vimrc修改經常使用鍵

首先呢,我以爲使用<Esc>鍵來退出插入模式實在是太老土了。Vim關注的是效率,若是不是特殊狀況,手指儘可能不要離開鍵盤中間排。而這種ESC操做實在是沒效率,因此不要用這個。

inoremap jk <ESC>

【注意: 有些人喜歡將<ESC>映射爲jj,可是我以爲映射爲jk可能更天然一點】

修改leader鍵

反斜槓也一樣存在這種問題,因此就像其它指導文檔推薦的那樣,我也喜歡將引導鍵重映射爲逗號(,)。

let mapleader = 「,」

經過這樣的配置,能夠簡化咱們接下來的命令執行,好比執行映射的縮寫命令時,只需右手中指往下一格就能夠輕鬆輸入逗號,而不須要向上再向右去遠遠地按反斜槓鍵。

重映射CAPSLOCK

大寫鍵不在vim的配置文件中,不過這個鍵的位置比較好,而它的默認功能咱們又經常用不上。對我來講,CAPSLOCK鍵沒啥用處,因此我將它映射爲Ctrl鍵(從操做系統層面來設置)。這樣若是我要執行Ctrl-XX操做時只需將左小指左移就能夠了。

此外,推薦其餘幾項基礎設置,這樣使用更加方便。

filetype plugin indent on

syntax on

set encoding=utf-8

要知道,優化vimrc文件是一個很是值得花時間去研究的問題,這裏說的幾個建議僅僅是皮毛。推薦查看個人設置或者閱讀這幾篇引用文章

使用Pathogen管理插件

【請注意:若是你不熟悉或者並不喜歡插件,能夠跳過這一節。等你下次想通了再來看看。】

遠離Janus

對我來講,Janus最能吸引個人地方在於它的插件管理,不過我能夠經過Pathogen來實現。基本上,經過如下幾步就能夠了:

  1. 安裝Pathogen
  2. 將你須要的插件git clone 克隆到~/.vim/bundle
  3. 在配置文件~/.vimrc中添加execute pathogen#infect()

利用github來實現備份和可移植性

爲了備份vim設置,我將整個~/.vim目錄經過git庫保存在這裏。這樣即使我新裝了系統,也能夠很方便的使用git clone https://github.com/danielmiessler/vim獲取個人偏好設置。

也許你也會喜歡這樣作。

簡單一步clone以後,將~/.vimrc軟鏈接到~/.vim/vimrc就能夠了。

Vim即語言

Vim最成功的閃光點莫過於一旦你開始使用它,它就會讓你欲罷不能。Vim就像語言同樣,擁有名詞、動詞、副詞等屬性。

雖然個人這種說法從技術層面可能並不許確,可是卻能幫助你更好地理解vim的工做機制。重申一次,本教程的目的不是爲了取代其餘教程或幫助手冊——而是爲了幫助你理解其餘這些文檔晦澀難懂的部分。

動詞

所謂動詞指的是咱們執行的動做,這些動做能夠施加在名詞之上。能夠看看下面幾個常見的動做:

  • d: 刪除
  • c: 修改
  • y: 拖拉(拷貝)
  • v: 可視化選擇 (V for line vs. character)

修飾語

定語用在名詞以前,代表以哪一種方式來執行動做。幾個例子:

  • i: 內部
  • a: 周圍
  • NUM: 數字 (e.g.: 1, 2, 10)
  • t: 查找到指定字符,並跳轉到這個字符的前面
  • f: 查找到指定字符,並跳轉到字符所處的位置
  • /: 查找字符串 (literal or regex)

名詞

在英語中,名詞用來表示你所操做的對象。它們都是客體。在vim中也是這樣。下面列出vim中的名詞:

  • w: 單詞
  • s: 句子
  • ): 句子 (另外一種操做方式)
  • p: 段落
  • }: 段落 (另外一種操做方式)
  • t: 標籤 ( HTML/XML)
  • b: 塊 (編程語言)

Nouns as motion

一樣,你也能夠將名詞視爲移動動做,這意味着你能夠用名詞表示在文本的跳轉範圍。咱們能夠在「移動」章節中看到例子說明。

使用vim語言來組成語句(命令)

好了,如今咱們有句子的不一樣組成部分,該怎樣將這幾部分組成完整的句子呢?就像英語同樣,憑感受將動詞、修飾語和名詞組合起來。

對於下面這些符號,根據顏色的不一樣來區分句子的不一樣組成部分:

刪除兩個單詞

d2w

修改所在的句子(刪除當前句子並進入插入模式)

cis

拷貝當前所在的段落

yip

修改當前光標所在位置到下一個括號之間的文本內容

ct<

記住,這裏的「目標」是尖括號,除此以外還能夠是任意字符。從語法上來講,使用單個字母」t」來表示這個向前查找的「目標」,這樣我就可使用「dt.」表示刪除當前位置到下一個句號之間的內容,」yt;」表示拷貝當前位置到下一個分號之間的內容。

看起來多漂亮!當編輯文本時採用這樣的思惟方式可使得操做更加優雅,符合咱們的直覺思惟,並且就像其餘語言同樣,熟能生巧。

具體操做

如今,在瞭解這些基本操做後,讓咱們結合具體操做來更進一步學習。

處理文件

一些對文件的基本操做。

  • Vi file :使用vim打開要編輯的文件
  • :w :保存修改
  • :q! : 退出vim,後面加感嘆號表示不保存修改強制退出
  • :wq: 保存修改並退出
  • :saveas ~/some/path/: 將文件保存到其餘位置

【注意:相比較:wq 我更喜歡使用ZZ,由於我以爲不須要輸入冒號我以爲會快一點。也可使用:x】

  • ZZ: 同:wq

查找文本

對於任意一款編輯器,查找文本都是最基本需求。Vim擁有很強大的文本搜索功能,這一節將着重討論vim的文本搜索。

搜索字符串

Vim中最基本也是最強大的搜索方式是」/」命令,在窗口最底端輸入你須要查找的字符串並回車就能夠了。

查找include字符串

/include<CR>

查找結果以下所示,因此匹配結果都被高亮顯示:

搜索完成後,輸入」n」依次向下查找,或者」N」向上查找。若是想要逆向查找字符串也可使用」?」來代替」/」.

跳轉到指定字符

Vim有一招特別酷,無論你在哪兒,都能查找特定字符並直接跳轉過去。好比說,我正在編輯HTML文件,

向前查找並直接跳轉到<字符

f<

向前查找並跳轉到<的前一個字符

t<

你能夠這麼理解,第一種找出目標(f),直接定位到查找對象;第二種到達目標(t),向着目標對象前進,定位到目標的前面。

比較怪異的一點是,能夠將它們做爲命令中的名詞。就好比剛纔我在編輯這句時:

修改到下一個」<」之間的內容

ct<

對任意字符均可以這麼作,好比說,句號,尖括號,圓括號,普通字母等等。這樣你就能夠查找文本並跳轉,或者你知道具體位置並直接跳轉。

【注意:當你搜索指定字符時,可使用分號跳轉到下一處——無論是t搜索仍是f搜索。逗號能夠用來反向跳轉到上一處。】

搜索總結

  • /{string}: 搜索字符串
  • t : 跳轉到某一字符前
  • F : 跳轉到某一字符處
  • *:搜索當前光標位置單詞的其餘實例
  • n : 搜索完成後,跳轉到下一個匹配實例
  • N :搜索完成後,跳轉到上一條匹配實例
  • ; : 跳轉到指定字符時,使用分號跳轉到下一實例
  • , :跳轉到指定字符時,使用逗號跳轉到上一實例

遊走於文本中

提升編輯效率相當重要的一點是:在文本內的自由移動跳轉。對vim來講,充分利用咱們上文所說的vim語言的基本準則,就能夠既簡單又優雅地作到。首先,介紹基礎概念。

基本移動動做

咱們從鍵盤中間排開始介紹。受過訓練的打字員通常都習慣將右手指放在jkl;這幾個鍵上,就讓咱們從這裏開始使用vim。

  • j : 向下移動一行
  • k :向上移動一行
  • h :向左移動一個字符
  • l :向右移動一個字符

剛開始可能使用得不太習慣,不過只需幾分鐘的練習以後,就會習慣成天然,你甚至會想要在word文檔裏面也這樣用(順便說一下,word文檔不支持)。

總結起來就是:右手食指和中指用來上移下移,右手食指和無名指用來左移右移。

行內移動

你能夠在當前行內自由的移動。

  • 0: 移動到行首
  • $: 移動到行末
  • ^: 移動到行首非空字符
  • t」: 跳轉到下一個引號前
  • f」: 跳轉到下一個引號處

【注意: 逗號和分號會重複以前的t和f跳轉】

按單詞移動

除了按行和字符移動外,還能夠按單詞移動:

  • w: 先前移動一個單詞
  • b: 向後移動一個單詞
  • e: 移動到當前單詞末尾

當使用大寫字母時,vim會忽略掉單詞間的分隔符,這樣本來被分隔符隔開的多個單詞會所以被視爲一個大單詞。

  • W: 向前移動一個大單詞
  • B: 向後移動一個大單詞

這種大寫命令的優點在咱們實際工做中會頻繁地碰到。

按句子或段落移動

  • ):向前移動一條句子
  • }: 向前移動一個段落

在屏幕間移動

  • H:向上移動一屏
  • M:移動到屏幕中間
  • L:移動到屏幕底端
  • gg: 移動到文件頂端
  • G:移動到文件結尾
  • ^U: 向上移動半屏
  • ^D: 向下移動半屏
  • ^F: 下一頁
  • ^B: 上一頁

來回跳轉

在普通模式下,能夠在兩點間來回跳轉,這在實際操做中很是有用。

  • Ctrl-i: 跳轉到以前所在的位置
  • Ctrl-o: 跳回你實際的位置

其餘動做

  • :$line_numberH: 移動到指定行號
  • M: 移動到屏幕中間
  • L: 移動到屏幕底端
  • ^E: 向上滾動一行
  • ^Y: 向下滾動一行
  • ^U: 向上移動半屏
  • ^D: 向下移動半屏
  • ^F: 向下移動一頁
  • ^B: 向上移動一頁

如今將因此移動動做總結到一塊兒:

移動命令總結

  • j: move down one line
  • k: move up one line
  • h: move left one character
  • l: move right one character
  • 0: move to the beginning of the line
  • $: move to the end of the line
  • w: move forward one word
  • b: move back one word
  • e: move to the end of your word
  • ): move forward one sentence
  • }: move forward one paragraph
  • :line_number: move to a given line number
  • H: move to the top of the screen
  • M: move to the middle of the screen
  • L: move to the bottom of the screen
  • ^E: scroll up one line
  • ^Y: scroll down one line
  • gg: go to the top of the file
  • G: go to the bottom of the file
  • ^U: move up half a page
  • ^D: move down half a page
  • ^F: move down a page
  • ^B: move up a page
  • Ctrl-i: jump to your previous navigation location
  • Ctrl-o: jump back to where you were

【注意:前面說過我將CAPSLOCK鍵映射到Ctrl,全部這些基於Ctrl的命令,我均可以用CASLOCK來代替】

修改文本

好了,瞭解一堆在文本中移動的命令後,咱們能夠開始學習對文本的修改了。須要記住這一點:這些移動命令會一直陪伴着咱們——它們是vim語言的一部分(它們是上文提到的修飾語)。

Understanding modes

首先咱們要弄清楚模式的概念。剛開始說到模式可能有點違反咱們的直覺,不過一旦習慣以後就會使用得很是的天然。不少vim指南都從介紹模式開始,不過我發現若是直接從模式開始有點很差理解,從普通模式與插入模式之間的切換入手會好一點。

  • 從普通模式開始。對新手來講vim最讓人鬱悶一點莫過於打開文檔卻不能直接編輯。其實,你也能夠輸入一些個東西,不過若是你真這麼作的話你的文檔可能會變得一團糟。
  • 普通模式也叫命令行模式,由於一般在這個模式下輸入vim命令。這些命令能夠是移動、刪除或者其餘操做,以後進入插入模式。
  • 插入模式下能夠直接對文件進行修改,有不少種方式能夠從普通模式切換到插入模式。不過不用擔憂,雖然方式多樣,只要多加練習就能夠熟練使用了。
  • 可視化模式下能夠選擇文本。這個模式看起來與普通模式很是像,不過這個模式下移動操做會改變高亮選擇的區域。你能夠逐行選擇也能夠逐字符選擇,無論哪一種選擇模式下,移動操做都會高亮選擇更多的文本內容。
  • 選中以後,可視化模式的優點就體現出來了,咱們能夠對選中的所有文本作操做,大大提升了效率。
  • Ex模式下,光標處於屏幕最下方,冒號後能夠輸入命令。具體內容在後面作介紹。如今只須要知道在這種模式下能夠運行一些命令行任務就能夠了。

除了上面介紹的模式外vim還有一些其餘的模式,不過本教程不作介紹由於它們不是首要任務。

記住vim語言

如今讓咱們一塊兒回憶vim語言: 動詞、修飾符、名詞。假設咱們從普通模式開始,如今想要切換到插入模式下修改文本。

動詞能夠實現這種切換,而且有好幾種選擇。咱們能夠修改(c),插入(i),或者追加(a),還有其餘變種。

基礎修改/插入命令

讓咱們從這幾個可選命令開始。

  • i : 從當前光標位置以前插入
  • a : 從當前光標位置以後插入
  • I :從當前行開始位置插入
  • A :從當前行行末插入
  • o : 在當前行下新增一行,並重新行插入
  • O :在當前行上新增一行,並重新行插入
  • r : 替換當前光標所在字符
  • R :替換當前光標的字符,並一直向後替換(替換模式)
  • cm:修改文本,其中m表示移動的動做,好比,一個單詞,一句或者一個段落。
  • C :修改當前所在行
  • ct?: 修改問號前的這條問句內容
  • s:替換當前字符
  • S: 替換整行

修改句子

cis

移動到行首並進入插入模式

I

在當前光標位置以後進入插入模式

a

從上面例子可知,有多種方式能夠進入插入模式輸入文本。還有一些簡寫來執行多條操做,好比說刪除並進入刪除模式。

刪除從光標所在位置開始到行末的全部內容,並進入插入模式

C

刪除當前行並進入插入模式

S

修改大小寫

能夠經過波浪符來變動大小寫。就像你猜測的那種方式工做:無論你光標所在字符仍是可視模式下選擇的文本均可以。

格式化文本

Vim還能夠快速格式化文本,好比格式化一整段文本,使用下面這個命令就能夠很容易實現:

格式化當前段落

gq ap

gp根據預設的文本寬度testwidth以及參數指定的文本範圍來工做,這意味着對於你指定的任意範圍的文本,gp均可以自動校準寬度,使得文檔看起來乾淨又整潔。

【注意: ap表示文本對象」整個段落」的覆蓋範圍】

刪除文本

在瞭解怎樣修改文本後,接下來看看怎樣直接刪除文本。可能你已經知道了,跟前面差很少——只不過實現的動做不一樣罷了。

基本刪除命令

  • x: 刪除當前光標的字符
  • X:刪除當前光標的前一個字符
  • dm: 根據定義的m來肯定刪除範圍,一個單詞或者一句話或者一個段落。
  • dd: 刪除當前行
  • dt. : 刪除當前位置到下一個句號之間的全部內容
  • D: 刪除當前光標位置到本行末的全部內容(對比上面的C,D不會進入插入模式)
  • J: 將上下兩行合併(刪除兩行之間的換行符)

足夠簡單吧?

撤銷與重作

若是一個編輯器連撤銷和重作的功能都沒有,你確定不會用它。vim就像咱們前面注意到的那樣,盡其所能讓咱們更順手地操做,撤銷與重作也不例外。

  • u: 撤銷上一個動做
  • Ctrl-r: 重作上一個動做

【注意:記得將CAPSLOCK鍵映射爲Ctrl,這樣你才能更方便快速的使用組合鍵。】

這兩個動做均可以重複操做,你能夠一直撤銷啊撤銷回到最初保存點,也能夠一直重作啊重作到撤銷前的狀態。

重複動做

Vim全部命令中最強大的那個莫過於點命令,聽起來有點奇怪是否是?解釋一下,經過「.」這個小點可讓你作一些很棒的事情——重複以前你的任何一個操做。

使用「.」來重複上一次操做

你所作的許多操做可能都有重複的價值。好比進入插入模式添加一些文本內容。你只需執行一次,而後一直執行點命令來重複就能夠了。請看下面的例子。

刪除一個單詞

dw

緊接着執行,再刪除5個單詞

5.

多麼給力! 若是結合可視化模式,發揮的能力更讓你大開眼界。

複製與粘貼

快速拷貝與粘貼文本一樣也是文本編輯器的必備功能,vim固然也是這方面的高手。

【注意:除了點命令外,&也是一種強大的重複命令,用於重複ex模式下的上一條命令(還記得ex模式嗎?)】

拷貝文本

Vim的拷貝與你們預期的方式可能略有不一樣。拷貝命令不是你們料想的c。不知你還記不記得,上文提到c表示「修改」,已經被佔用了。Vim用拉取來表示拷貝,簡寫爲y。

  • y: 拷貝選中內容
  • yy: 拷貝當前行

記住,這種拷貝動做與你熟悉的那種拷貝並沒有不一樣——你只是在目的處複製了一份而已。

剪切文本

剪切很簡單:跟刪除操做差很少。因此呢,剪切實質上就是將刪除的內容挪到緩衝區,而後將這段刪除的內容再粘貼就能夠了。

粘貼文本

粘貼跟咱們想的同樣——使用p命令。因此呢,若是你執行dd命令刪除了一行,你能夠用p粘貼回去。

有一點要記住:粘貼的起始位置從你當前光標位置以後開始,根據你拷貝的內容,你要麼粘貼字符或單詞,要麼粘貼行或列。若是想撤銷粘貼,使用通用撤銷命令「u」就能夠了。

拷貝複製命令總結

  • 從當前行拷貝到下一個命令(名詞)
  • 拷貝當前行的快捷鍵
  • 在當前光標所在行下一行黏貼拷貝或者刪除的內容
  • 在當前光標所在行前一行黏貼拷貝或者刪除的內容

交換兩行的位置

ddp

使用這條命令能夠很快速的交換兩行的位置。第一部分刪除你所在的行,第二部分將它粘貼回以前所在位置的下面。(ps:文章中用的是above,可是實際上拷貝回下方位置)

拼寫檢查

若是沒有拼寫檢查的話,感受會很糟糕,還好vim這方面作得很好。固然咱們須要先在配置文件中配置拼寫檢查選項。

在~/.vimrc的某個位置中添加

找出拼寫錯誤

若是在配置文件中設置了拼寫檢查的選項,那麼拼錯的單詞會自動添加下劃線。你也能夠手動輸入:set spell和:set nospell來啓用或禁用。

無論怎麼說,一旦開啓了拼寫檢查,若是存在拼寫錯誤的話,你就可使用如下命令來跳轉:

跳轉到下一處拼寫錯誤

]s

跳轉到上一處拼寫錯誤

[s

若光標處是錯誤單詞,給出修改建議

z=

將識別的錯誤單詞標記正確

zg

將vim視爲正確的單詞標記爲錯誤單詞

zw

我習慣在~/.vimrc中添加一些拼寫相關的簡寫命令。首先就是讓修正拼寫錯誤的命令變得簡單:

將拼寫修正標記爲<leader>f

在某些狀況下,好比說我須要創造性的拼寫一些單詞時,我會使用下面的命令來取消拼寫檢查。想要從新打開拼寫檢查只要再執行一次這個命令就能夠了。

Toggle spelling visuals with <leader>s

nnoremap <leader>s :set spell!

替換

Vim的另外一個強大的功能是替換。命令分爲三部分,首先指定將要被替換的字符串,以後是替換的新字符串,最後指定替換範圍。

基本設置爲:%s

將每行的foo替換爲bar

:%s /foo/bar/g

將當前行中的foo替換爲bar

:s /foo/bar/g

【注意: 兩個命令的不一樣之處在於,單行替換s前少了%】

還有許多其餘的選項,不過這些是最基本的。

PS: 前面&命令重複此類操做(:進入ex模式後執行的命令)

進階

太棒了。咱們已經討論了大部分文本編輯器的基本功能,以及在vim中如何使用這些功能。如今能夠進行高級vim的任務了——請注意,我說的高級進階是對初學者而言,不是Kana這樣的大神級人物。

重複操做

在稍早以前咱們討論了「.」點命令的重複功能。有些命令適合使用點命令來重複,有些則不適合,區分這兩種命令很重要。

一般,若是你想要使用「.」(或者如Drew Neil稱之爲點命令)實現命令重複,說明你想用點命令緩存的命令來作比較細緻的操做。

好比說你要向若干行行末添加一些內容,可是添加的前提是被添加的行包含指定的字符串。你可使用以下方式來實現:

搜索字符串

/delinquent

如今,只要你按下「n」鍵都會跳轉到下一個搜索到的實例。那麼,從第一個匹配實例開始,咱們給它追加文本。

在行末添加文本

A[DO NOT PAY] [Esc]

好,這條命令執行完成了。不過接下來還有12個地方須要你來作。點命令容許咱們簡單地重複執行上一條命令,並且咱們還須要保存搜索結果,能夠將這兩條命令結合起來。

跳轉到下一個匹配實例並向行末添加文本

n.

注意,這種方式將動做與緩存的命令結合起來,因此咱們能按照預期地那樣跳轉並執行命令。

文本對象

文本對象很特殊。這些文本對象的存在使得你能夠操做(動詞)更加複雜的對象(名詞)。比起選中某個單詞並刪除、跳轉到句首並刪除句子等簡單操做來講,無論你在何種文本對象的區域內,你均可以對它們執行這些操做。

說是說不清,實踐出真知嘛,咱們能夠看幾個例子。

單詞文本對象

首先來看基於單詞的對象

  • iw : 單詞內
  • aw :單詞周圍

這些都是目標(名詞),因此咱們能夠對它們作一些操做,好比說刪除、修改等等。

刪除單詞(包括單詞周圍的空格)

daw

【注意: 對象內部與對象周圍這二者之間的區別在於單詞旁邊是否有空格】

句子文本對象

  • is: 句子內部
  • as: 句子周圍

句子對象的工做原理與單詞對象是一致的,想象一下,你敲了一大段句子,敲了一半後悔了想要刪掉。你就能夠簡單的使用下面這條命令,而不用回到句子開頭來申明刪除整行。

修改整條句子

cis

這條命令殺傷力仍是挺大的,它會刪除整條句子並進入插入模式等待你輸入新的內容。

更多對象類型

還有許多其餘的對象類型,我只簡單的來介紹一下。

  • 段落 : ip 和ap
  • 單引號 : i’和a’
  • 雙引號: i」和 a」

當我編輯代碼或者HTML文件時,時常會用到這些命令。關鍵是若是這些對象文本存在問題,你甚至並不須要處於這些對象內部就能夠操做它們;若是光標當前位置在雙引號外面(經測試,跟雙引號處於同一行並在雙引號前面),只須要輸入ci」就能夠刪除雙引號內部的全部內容,並將你挪到雙引號中間進入插入模式等待你的輸入。簡直不要太酷。

對其餘類型的某些對象一樣適用,好比說各類括號(圓括號、尖括號、大括號)和標籤(html)。

好比說編輯HTML連接時,URL地址通常在雙引號之間,連接文本在標籤中定義;經過vim這兩條命令能夠很方便地修改:ci」(修改URL)和cit(修改連接文本)。

文本對象總結

下面列出常見的文本對象:

  • 單詞: iw 和 aw
  • 句子: is 和 as
  • 段落: ip 和 ap
  • 單引號: i’ 和 a’
  • 雙引號: i」 和 a」
  • 反勾號 : i· 和 a
  • 圓括號: i( 和 a(
  • 方括號: i[ 和a[
  • 大括號: i{ 和a{
  • 標籤: it 和at

總的來講,我使用最多的是單詞,雙引號和標籤。

進入可視化模式

Vim的有許多迷人之處吸引着咱們,不過它們相比較可視化模式的技能來講,仍是太弱了。

也許可視化模式的最強大之處在於:咱們前面學到的全部的一切命令,經過結合可視化模式使用,能力都會大有提高。這是因爲在可視化模式下選中的高亮文本,能夠所有做爲命令的操做對象。

首先,學會進入可視化模式並選擇文本。經過「v」進入可視化模式,有三種選擇。

  • 基於字符選中: v
  • 基於行選中: V
  • 段落選中: Ctrl-v

在容器內部選中文本

有時候你會處於一段文本中,兩頭被,.({[之類的符號所包圍。你可使用下面的命令來選中這部分的內容:

選中圓括號中的內容

vi(

選中中括號之間的內容

vi[

你還能夠加數字限定選擇的層數(好比說你處於嵌套層)

選中兩層大括號之間的全部內容

v2i{

【注意: 你也可使用va來代替vi。請不要被這些迷惑。它們與咱們所知的名詞和動詞沒有什麼不一樣】

基於字符的可視化選擇

從基於字符的可視化開始介紹(從普通模式輸入v進入可視化模式),在這種模式下你能夠選中單個字符、多個字符、單詞等等。相比較行選擇模式來講,我比較少使用這種模式,不過只是相對而言,其實用的也仍是挺多的。

這裏最主要的是要理解這一點: 處於可視化模式中,你的移動動做會修改被高亮選擇的文本。這就意味着,w或)之類的動做也會起做用,它們能夠擴展當前高亮選擇的範圍。以後,這部分高亮文本就能夠做爲命令執行的目標。

基於行選擇的可視化模式

普通模式下輸入V進入這種模式,以後咱們會討論在這種模式下的操做。

基於列選擇的可視化模式

可視化模式中還能夠垂直地選擇文本,這對操做列數據來講很給力。

可視化模式下對選中文本的執行動做

對這些文本作什麼操做都是你的自由,不過最廣泛的操做是刪除、拷貝和粘貼。想一下你日常用鼠標選中一片文本會作什麼操做?

進入可視化模式,選中兩個以上單詞並拷貝

vwwy

拷貝以後你能夠在任何你但願的地方輸入p來粘貼。

或者你能夠作一些基於行的操做。

進入行選擇模式,刪除幾行文本

Vjjd

你也可使用文本對象,不過這種操做不太安全,最好別作。

可視化模式下選中一整個段落

vip

可視化模式下選中一整段文本並粘貼到當前段落之下。

vipyjjp

不要由於命令很長而感到崩潰。要記住,這些命令跟咱們日常說話是同樣的。你能夠沒有任何困難地、很隨意地念叨:

我想去商店。

這條命令也是同樣的:

拷貝這一段,下移兩行,再粘貼。

將可視化模式與重複結合

可視化模式還有一個很神奇的地方,對於選中的文本,你能夠經過點命令來執行以前緩存的命令。請看下面這個例子:

foo
bar
thing
other
yetanother
also

若是想在每行前面都加個冒號,能夠如今第一行foo以前添加,而後可視化模式下選擇之下全部行,執行點命令就能夠了。

:foo
:bar
:thing
:other
:yetanother
:also

【注意:要想使用這個功能,必需要在配置文件中添加映射 vnoremap . :norm.<CR>】

BAM!

以爲這功能沒有那麼酷炫? 那就想象一下: 你有個六萬行的文件,每行都與例子同樣,須要追加個冒號。你會怎麼作?

對整個文件添加分號

0i:j0vG.

wut

大大簡化了咱們的操做,大殺器一枚。步驟以下:

  1. 走到第一行行首並插入一個冒號(0i:)
  2. 走到下一行定位到行首位置(j0,注意以前是插入模式,須要先回到普通模式)
  3. 選中當前行到文件末尾的內容(vG)
  4. 給選中的內容添加冒號(.)

這樣對六萬行文件的操做就所有完成了。你甚至不須要去記一些亂七八糟的口訣——就像學騎單車會摔倒同樣,摔着摔着你就會了。相信我。

使用宏

有些人會以爲宏很可怕,其實否則。宏只用來完成這樣一件事: 記錄你作的一切,在你須要的時候幫你再作一次。下面是一個簡單總結:

  • qa: 開始記錄接下來要執行的動做,並命名爲a
  • q: 中止記錄
  • @a :將宏表明的動做再執行一次

很簡單啊是否是?你能夠保存多個宏,好比說宏a、宏b、宏c等等。當你須要的時候執行@a或者@c之類的就能夠了。

什麼場景下使用宏?

你可能會問:

既然可視化模式與點命令的結合已經這麼強大了,咱們爲何還要使用宏呢?

問得好,不過答案挺複雜。宏能夠作你所作的一切,來看看這樣一個流程

  1. 在當前行搜索「widget」
  2. 找到最後一個匹配到的單詞並添加–maker
  3. 走到行首並添加一個分號
  4. 走到行末再添加一個點號
  5. 若是行末有空格則刪除

這麼一堆工做,我們仍是假設文件有六萬行,試着在Microsoft word之類的工具裏完成這些操做,照樣會讓人感到萬分痛苦。

不過在vim中,這都不算事兒,你只須要把這些動做都作一遍(recording模式下),而後對每一行從新執行宏就能夠了。

【注意:若是想要對可視化選中文本執行宏的話,能夠執行:normal @a(或者其餘你所定義的宏的名字),這條命令會臨時將你切換到普通模式,針對每一行執行宏命令】

技巧

下面咱們來看一些你們常常問的一些問題,總結出來節約你們時間。

刪除行末空格

根據打開文件的類型不一樣,可能須要你對回車符和換行符作一些處理。這裏介紹如何刪除行末那些煩人的Ctrl-M字符。

刪除行末的Ctrl-M字符

:%s/s+$//

修改文件類型

set ft=unix

set ft=html

set ft=dos

【注意:若是要顯示當前文件類型,在配置文件中添加:set filetype,或者在vim中直接執行這條命令就能夠了】

包裝文本

借用Surround插件,咱們能夠很

  • cs」‘: 將光標所在單詞兩邊的雙引號修改爲單引號
  • cs’<q> :作一樣的事,不一樣的是將單引號修改爲<q>
  • ds」 : 刪除兩邊的的配對雙引號
  • ysiw[ :在當前單詞兩邊加上中括號
  • ysiw<em>: 給當前單詞(其餘文本對象也可)添增強調標籤!!!知道我爲何這麼激動嗎?由於這個操做可使用點命令來重複!
  • Visual Mode: 可視化模式下,選中任意文本,輸入S。vim會帶你跳轉到窗口最底端。這時候你能夠輸入任何你想給這段文本打上的標籤,好比說<a href=」/images」> ,回車試試?

總結

經過本教程我但願你們能明白如下兩點:

  1. vim 是能夠學會的
  2. vim 很強大

上面介紹的那些vim基礎用法,即使你只喜歡其中一部分,我想可能也會加深你對編輯文本的熱情——這可不是小事。你對操做的編輯器越熟練,思惟也就愈加散,我想這是堪比史詩級的大事了。

更爲重要的是,這也是爲何要求你得精通你選擇的編輯器。只有精通編輯器,不被編輯器的操做所阻滯,當你腦內思緒奔騰時,你才能激揚文字跟緊思緒跳躍的步伐。

或者,你也能夠將這一切都拋開,成爲那些被人所取笑的人——無論怎樣,我但願本教程能對你有用。

【若是你喜歡這篇文章,能夠去個人地盤看看其餘技術指導文章】

引用

  1. 推薦你們閱讀Drew Neil的這本書《Practical Vim: Edit Text at the Speed of Thought》這是vim愛好者必備書籍。
  2. 強烈推薦《Your Problem with vim is that you don’t grok vi》,它不光對vim通常用法作了非凡概述,還介紹了一些漂亮的vim技巧。
  3. 若是你還沒看過Steve Losh的《Coming Home to Vim》,強烈推薦。
  4. 必定要去看看 Kana 大神的《True Power of Vim》。
  5. 另外還有Drew的 Vimcasts.org. 這二者都從實際操做角度讓你認識到vim的強大。
  6. 若是想要vim簡明命令資源,下載 Vim Quick Reference
  7. 固然不要忘了 Vim Wiki,這也是學習vim的重要資源。
  8. 若是你對vimscript感興趣, 必定去看看Steve Losh的《Learn Vimscript the Hard Way》。這是迄今爲止關於vimscript的最好學習資料。
  9. 還有Openvim的《This is a really well done interactive tutorial》。
  10. The help 很是棒,不過內容有點多,若是你真的很是想要學好Vim的話,那麼必定要從頭至尾通讀。
相關文章
相關標籤/搜索