Henry Henry
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)

Henry

小学生中的前端大佬
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)
  • 说明
  • Vim

  • VSCode

  • Chrome

  • iTerm

  • mac

  • Obsidian

  • lazygit

  • 学习双拼
  • Vim 技巧

    • Vim 技巧 - 说明
    • Vim 技巧 - 以退为进
    • Vim 技巧 - 点范式
    • Vim 技巧 - 把撤销单元切成块
    • Vim 技巧 - 构造可重复的修改
    • Vim 技巧 - 用次数做简单的算术运算
    • Vim 技巧 - 能够重复,就别用次数
    • Vim 技巧 - 在插入模式中可即时更正错误
    • Vim 技巧 - 结识插入 - 普通模式
    • Vim 技巧 - 不离开插入模式,粘贴寄存器中的文本
    • Vim 技巧 - 重复执行面向行的可视命令
    • Vim 技巧 - 只要可能,最好用操作符命令,而不是可视命令
    • Vim 技巧 - 结识 Vim 的命令行模式
    • Vim 技巧 - 在一行或多个连续行上执行命令
    • Vim 技巧 - 使用‘:t’和‘:m’命令复制和移动行
    • Vim 技巧 - 在指定范围上执行普通模式命令
    • Vim 技巧 - 重复上次的 Ex 命令
    • Vim 技巧 - 把当前单词插入到命令行
    • Vim 技巧 - 回溯历史命令
    • Vim 技巧 - 运行 Shell 命令
    • Vim 技巧 - 将工作区切分成窗
    • Vim 技巧 - 区分实际行与屏幕行
    • Vim 技巧 - 通过查找进行移动
    • Vim 技巧 - 遍历改变列表
    • Vim 技巧 - 用无名寄存器实现删除、复制与粘贴操作
    • Vim 技巧 - 深入理解 Vim 寄存器
    • Vim 技巧 - 用寄存器中的内容替换高亮选区的文本
    • Vim 技巧 - 把寄存器的内容粘贴出来
    • Vim 技巧 - 宏的读取与执行
    • Vim 技巧 - 规范光标位置、直达目标以及中止宏
    • Vim 技巧 - 加次数回放宏
    • Vim 技巧 - 在连续的文本行上重复修改
    • Vim 技巧 - 给宏追加命令
    • Vim 技巧 - 编辑宏的内容
    • Vim 技巧 - 调整查找模式的大小写敏感性
    • Vim 技巧 - 查找使用 v 或 V 模式
    • Vim 技巧 - 界定单词的边界
    • Vim 技巧 - 转义问题字符
      • 正向查找时要转义/字符
      • 反向查找时要转义?号
      • 每次都要转义符号 \
      • 查找域结束符
    • Vim 技巧 - 结识查找命令
    • Vim 技巧 - 在执行查找前预览第一处匹配
    • Vim 技巧 - 将光标偏移到查找匹配的结尾
    • Vim 技巧 - 利用查找历史,迭代完成复杂的模式
    • Vim 技巧 - 结识 substitute 命令
    • Vim 技巧 - 在文件范围内查找并替换每一处匹配
    • Vim 技巧 - 手动控制每一次替换操作
    • Vim 技巧 - 重用上次的查找模式
    • Vim 技巧 - 用寄存器的内容替换
    • Vim 技巧 - 重复上一次 substitute 命令
    • Vim 技巧 - 使用子匹配重排 CSV 文件的字段
    • Vim 技巧 - 自动补全整行文本
    • Vim 技巧 - 以 g 开头的命令
    • Vim 技巧 - 以 z 开头的命令
    • Vim 技巧-ctrl 命令
    • Vim 技巧
    • 每日一 Vim 笔记
  • 键盘侠
  • Vim 技巧
Henry
2022-10-05
目录

Vim 技巧 - 转义问题字符

\V 原义开关使得按原义查找文本变得更容易,因为符号.、+以及*的特殊含义被屏蔽掉了。但还有一些字符,其特殊含义无法被屏蔽。本节作为高级技巧,将研究如何处理这些字符。

# 正向查找时要转义/字符

以下文本摘录自一篇 Markdown 文档(实际的 URL 为 vimdoc.sourceforge.net(3),此处为了适应版面的需要,将其缩写为 vimdoc.net):

 假设我们想找到所有出现过 URL http://vim-doc.net/search?q=/\\ 的地方。我们不必手动输入这些内容,只需将其复制到某个寄存器,然后再粘贴到查找域即可。由于我们想精确地匹配这段文本,因此要使用 \V 原义开关。

只要我们的光标位于方括号之中,就都可以使用命令 "uyi[(为了方便记忆,用 u 表示 URL)将此 URL 复制到寄存器 u。然后我们输入 /\V<C-r>u<CR>,即可将此寄存器的内容填充至查找域了。最终的查找提示符类似于这样:

➾/\Vhttp://vimdoc.net/search?q=/\\

当我们执行此查找命令时,会得到以下结果:



这到底是怎么回事?当我们把完整的 URL 粘贴至查找域后,Vim 却把首次出现的符号 / 解析成了查找域结束符(参见查找域结束符)。因此,所有位于首个正斜杠之后的内容都被忽略掉了,所以我们的查找字符串仅剩下了 http:。

当进行正向查找时,我们必须要转义符号 /。而且无论执行的是 very magic 查找(使用模式开关\v)还是 very nomagic 查找(使用原义开关\V),都需要转义。让我们修正一下之前的查找命令,为每个 / 加上反斜杠前缀:

➾/\Vhttp:\/\/vimdoc.net\/search?q=\/\\

这一次查找的结果与我们预期的更为接近了:



但还不算完美,因为匹配的结果缺少了最后一个反斜杠。我们将很快揭晓其中的奥秘,但是首先,让我们考虑一下反向查找吧。

# 反向查找时要转义?号

当执行反向查找时,符号 ? 会被当作查找域的结束符。这意味着我们不必转义符号 / 了,但要对符号 ? 进行转义。

注意:如果我们对从寄存器 u 复制而来的 URL 进行反向查找时,会发生什么事情。

➾?http://vimdoc.net/search?q=/\\

在没有转义任何内容之前,Vim 将匹配字符串“http://vimdoc.net/search”:

 这个结果比未转义过的正向查找要好多了,但仍未匹配完整的 URL。如果我们将?号加上反斜杠前缀,会得到更好的结果:

➾?http://vimdoc.net/search\?q=/\\

以下是新的匹配结果:



# 每次都要转义符号 \

在查找域中,还有一个字符需要转义,即反斜杠。通常情况下,一个\的出现预示着紧挨着它后面的字符将会得到某种特殊对待。如果我们将其加倍,变为 \\ 后,前者则会消除后者的特殊含义。实际上是让 Vim 查找一个反斜杠。

在我们的示例文本中,要查找的 URL 包含两个连续的反斜杠,因此,我们必须在查找域中为每个反斜杠各添加一个反斜杠。在正向查找中,我们最终得这样:

➾/\Vhttp:\/\/vimdoc.net\/search?q=\/\\\\

完工!查询条件终于匹配了整个 URL:



无论我们采用的是正向还是反向查找方式,反斜杠字符永远都需要转义。

# 查找域结束符

你可能会觉得奇怪,为什么查找域会把某个字符视为结束符呢?它为什么不把所有位于查找提示符之后的内容都纳入查找匹配呢?答案是如果在查找域结束符之后附加某些标志位,可以调整 Vim 查找命令的行为。例如,如果我们运行命令 /vim/e<CR>,光标将会移到每个匹配的结尾,而非起始。在以后的技巧中,我们将学习如何利用此功能,而不是被其左右。

编辑 (opens new window)
#Vim
上次更新: 5/27/2023, 1:02:05 PM
Vim 技巧 - 界定单词的边界
Vim 技巧 - 结识查找命令

← Vim 技巧 - 界定单词的边界 Vim 技巧 - 结识查找命令→

最近更新
01
version 1.15
07-01
02
version 1.14
06-27
03
version 1.13
06-27
更多文章>
Theme by Vdoing | Copyright © 2017-2023 HenryTSZ | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式