接 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: #{}"
這些文本對象同樣可以通過 aB
和 iB
來操作, 但是并不如使用 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>
這個文本對象也可以被用來快速操作單個標記及其屬性.