Vim入門教程

 

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

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

爲何選擇vim

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

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

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

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

一句話,我相信一旦你開始學習,你會以爲就像掌握母語還有基礎數學這些基本技能同樣,也能天然而然地掌握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以前添加,而後可視化模式下選擇之下全部行,執行點命令就能夠了。

【注意:要想使用這個功能,必需要在配置文件中添加映射 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基礎用法,即使你只喜歡其中一部分,我想可能也會加深你對編輯文本的熱情——這可不是小事。你對操做的編輯器越熟練,思惟也就愈加散,我想這是堪比史詩級的大事了。

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

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

 

 

 

轉載地址:http://blog.jobbole.com/86132/

相關文章
相關標籤/搜索