Vim 文字物件指南 (2)

liuchengxu發表於2017-07-22

Vim 文字物件指南 (1), 關於外掛使用, 可以檢視完整配置 space-vim.


程式語言的文字物件

Vim 基於常見程式語言結構提供了幾個常見的文字物件. 其實都是一對兒符號,主要可以分為:

  • 成對的標點符號,比如單引號,雙引號,反引號。

  • 成對的括號,比如小括號,中括號,大括號。

  • 標記語言標籤,它們也是成對的,比如 HTML 的標籤,<div></div>

模式為 操作 + a/i + 符號,這樣操作的就是文字物件。不加 a 或者 i 的話就不是一個對文字物件的操作了。對文字物件進行操作時,Vim 不會考慮你的游標位置。而非文字物件操作時,會從當前游標處開始生效。

舉個例子, ci" 指的是 change inner ", 改變 ""所包含的內容,也就是刪除 "" 裡面的內容並進入插入模式。

使用 a (around) 時,操作的範圍包括標點符號,括號,標籤本身。使用 i (inner) 時,不包括符號,括號,標籤等。動手試一下,很快就能學會了。

字串 (string)

  • a” – a double quoted string

  • i” – inner double quoted string

  • a’ – a single quoted string

  • i’ – inner single quoted string

  • a` – a back quoted string

  • i` – inner back quoted string

puts `Hello "world"`

ci"

puts `Hello ""`

圓括號

對於各種括號, 操作時使用前括號或後括號都可以, 比如 da( 等同於 da).

  • a) – a parenthesized block

  • i) – inner parenthesized block

Project.all(:conditions => { :published => true })

da)

Project.all

方括號

  • a] – a bracketed block

  • i] – inner bracketed block

(defn sum [x y]
  (+ x y))

di]

(defn sum []
  (+ x y))

大括號

  • a} – a brace block

  • i} – inner brace block

puts "Name: #{user.name}"

ci}

puts "Name: #{}"

這些文字物件同樣可以通過 aBiB 來操作, 但是並不如使用 a}i} 來的直觀.

% 同樣適用於 {}. 但是也有著 () 和 [] 一樣的限制性.

標記語言標籤

標記語言標籤分為兩類: t 和 >, t 所操作的是標籤內包含的內容, 比如 <p>content</p><p></p> 之間包含的內容就是 t 來操作. <> 的內容指的是 <p> 裡面的 p. 具體可以看下面的例子。

  • at – a tag block

  • it – inner tag block

<h2>Sample Title</h2>

cit

<h2></h2>

因為操作後游標並不在 <h2> 裡面, 所以 cit 替換標記裡面的內容是非常方便的.

  • a> – a single tag

  • i> – inner single tag

<div id="content"></div>

di>

<></div>

這個文字物件也可以被用來快速操作單個標記及其屬性.

參考:
[1] Vim Text Objects: The Definitive Guide

相關文章