- Published on
Offset the Cursor to the End of a Search Match
- Authors
- Name
- Yvan Yang
提示 83: 将光标偏移到搜索匹配的末尾
你可以使用搜索偏移功能将光标定位在匹配的起始或结束处,距离匹配位置固定的字符数。在这个提示中,我们将研究一个例子,通过将光标定位在匹配的末尾,利用 Dot 公式高效地完成一系列的更改。
每次执行搜索命令时,光标默认会定位在匹配项的第一个字符上。这个默认设置通常是合理的,但有时我们可能更希望将光标定位在匹配项的末尾。Vim 提供了搜索偏移功能使这一操作成为可能(参见 :h search-offset
)。
让我们来看一个例子。以下的文本中,作者将“language”这个单词一致地缩写为“lang”:
search/langs.txt
Aim to learn a new programming lang each year.
Which lang did you pick up last year?
Which langs would you like to learn?
你会怎么做才能将所有三处“lang”扩展为完整的单词?一种解决方案是使用替换命令::%s/lang/language/g
。但让我们尝试使用 Dot 公式来找寻另一种方法,在此过程中可能会学到新东西。
首先,我们在没有使用搜索偏移的情况下来解决这个问题。我们可以从搜索需要修改的字符串开始:/lang<CR>
。这会将光标定位到第一个匹配项的起始位置。接着,我们可以通过输入 eauage<Esc>
来在单词末尾附加“uage”部分。在单词末尾附加字符是非常常见的操作,所以命令 ea
应该如同单个命令一样顺畅。
现在我们只需要将光标移动到正确的位置,接下来的 dot 命令可以完成其余的工作。我们可以通过输入 ne.
来修改下一个“lang”缩写——n
跳转到下一个匹配项的起始位置,e
移动到单词的末尾,然后用 .
命令附加字符以完成单词。这需要三个按键操作。虽然这不是最理想的 Dot 公式,但至少可以完成任务。
但它真的有效吗?如果我们第二次重复相同的命令序列 ne.
,我们会破坏最后一个单词。你能看出为什么吗?最后一个“lang”实际上是“languages”(注意它是复数)的缩写。所以,如果我们盲目地重复这个不完美的 Dot 公式,我们将创造出“langsuage”这种怪词。显然,在这种情况下,将光标定位在匹配项的末尾而不是单词的末尾会更理想。

表 14 显示了一种改进的工作流程,使用了搜索偏移。
在这里,我们搜索 /lang/e<CR>
,这会将光标定位在匹配项的末尾,正是我们所需要的位置。每次使用 n
命令时,光标会自动跳转到下一个匹配项的末尾,这为使用 dot 命令创造了完美的条件。搜索偏移使我们能够实现理想的 Dot 公式。
在实际操作中,什么时候该使用搜索偏移并不总是显而易见。假设我们一开始没有使用偏移执行搜索命令,但在按 n
几次之后,我们意识到将光标放在匹配项的末尾会更好。这也没问题:只需执行 //e<CR>
即可。当搜索字段留空时,Vim 会重复上一次的搜索模式,但这次带有偏移。
1. Occurrences /əˈkɜːrənsɪz/ (noun)
- 英文释义: The number of times something happens or appears.
- 例句: "There were several occurrences of the word 'lang' in the document."
- 中文释义: 发生,出现,指某个事物或现象发生的次数或实例。
- 中文例句: “文件中多次出现了‘lang’这个单词。”
2. Substitute /ˈsʌbstɪtuːt/ (verb/noun)
- 英文释义:
- (verb) To replace or exchange one thing with another.
- (noun) A thing or person that takes the place of another.
- 例句: "You can substitute 'lang' with 'language'."
- 中文释义:
- (动词) 替换,代替。
- (名词) 替代品,代用品。
- 中文例句: “你可以将‘lang’替换为‘language’。”
3. Alternative /ɔːlˈtɜːrnətɪv/ (noun/adjective)
- 英文释义:
- (noun) Another choice or option, especially among multiple possibilities.
- (adjective) Offering or expressing a different choice.
- 例句: "Let’s try an alternative approach instead of using the substitute command."
- 中文释义:
- (名词) 替代选择,备选方案。
- (形容词) 替代的,备选的。
- 中文例句: “我们不使用替换命令,尝试另一种方法。”
4. Tackle /ˈtækl/ (verb)
- 英文释义: To deal with or address a problem or task, often with determination or effort.
- 例句: "We’ll tackle this issue step by step."
- 中文释义: 处理,应对,通常指积极应对某个问题或任务。
- 中文例句: “我们将一步步解决这个问题。”
5. Maneuver /məˈnuːvər/ (verb/noun)
- 英文释义:
- (verb) To move or control something skillfully or carefully, often to achieve a particular goal.
- (noun) A planned or controlled movement or series of actions.
- 例句: "We need to maneuver the cursor into the right position."
- 中文释义:
- (动词) 操控,熟练地或巧妙地操作。
- (名词) 操作,精细的动作或策略。
- 中文例句: “我们需要将光标巧妙地移动到正确位置。”
6. Mangling /ˈmæŋɡlɪŋ/ (verb)
- 英文释义: To severely damage, distort, or twist something, often making it unusable or unrecognizable.
- 例句: "Repeating the command might result in mangling the word."
- 中文释义: 搞砸,扭曲,损坏。通常指使其变得无法辨认或错误的形式。
- 中文例句: “重复该命令可能会导致单词被破坏。”
7. Abbreviation /əˌbriːviˈeɪʃən/ (noun)
- 英文释义: A shortened form of a word or phrase.
- 例句: "'Lang' is an abbreviation of 'language'."
- 中文释义: 缩写,将一个单词或短语缩短成更简短的形式。
- 中文例句: “‘lang’是‘language’的缩写。”
8. Blindly /ˈblaɪndli/ (adverb)
- 英文释义: Acting without thinking or without proper consideration or judgment.
- 例句: "Blindly repeating the command will cause errors."
- 中文释义: 盲目地,未经思考或判断地做某事。
- 中文例句: “盲目地重复命令会导致错误。”
9. Frankenword /ˈfræŋkənwɜːrd/ (noun)
- 英文释义: A word formed by combining parts of other words in a way that is awkward or incorrect, like a "Frankenstein" creation.
- 例句: "Langsuage is a frankenword created by incorrect substitutions."
- 中文释义: 拼凑的“怪词”,通常是指不合适的词语组合,类似“Frankenstein”怪物的创造。
- 中文例句: “‘langsuage’是通过错误替换产生的怪词。”