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-09-16
目录

Vim 技巧 - 用无名寄存器实现删除、复制与粘贴操作

Vim 的删除、复制与粘贴命令的设计初衷是帮助人们轻松完成日常工作。接下来,我们将研究几个可用 Vim 无名寄存器轻松解决的问题,最后,我们将看到一个任务,要想完成它,要求我们对 Vim 寄存器的工作原理有更深入的了解才行。

通常情况下,在讨论剪切、复制与粘贴这 3 组操作时,指的都是操作系统剪贴板。不过,在 Vim 的术语里,我们操作的是寄存器,而并非剪贴板。在以后的技巧中,我们将看到 Vim 支持多组寄存器,并且还可以指定想用其中的哪一个。不过,先让我们看看用无名寄存器都能干些什么吧。

# 调换字符

我总爱拼错某些单词。久而久之,我发现自己会习惯性地输错某个单词,然后我会训练自己别再犯这样的错误。但有些拼写错误在所难免,最常见的拼写错误莫过于将两个字符的次序颠倒了,而 Vim 能够轻松修正此类错误。

假设我们在输入本书书名时犯了一个次序错误:

 这次错误源于我们敲空格键敲得太快了,不过这很容易改正。在纠错过程中,首先,F 命令将光标移到要置换的第一个字符上。然后,x 命令把光标下的字符剪切下来,把它放到无名寄存器。最后,p 命令将无名寄存器中的内容粘贴到光标后面。

将最后两条命令组合在一起,即 xp,可被用于“调换光标之后的两个字符”。

# 调换文本行

类似地,我们也能方便地调换两行文本的顺序。这一次,我们不是用 x 命令剪切当前字符,而是用 dd 命令剪切当前行,从而将其内容存入无名寄存器中:

 p 命令知道我们正在处理的是一整行文本,因此,如我们所愿,它把无名寄存器的内容粘贴至当前行的下一行。还记得吗,在上一个例子中,当我们按下 xp 时,p 命令是将内容粘贴至光标之后的。

把以上命令序列连起来,即 ddp,可被用于“调换当前行和它的下一行”。

# 创建文本行的副本

假设我们想创建一行新的文本,内容与之前某行类似,只有一两处差异。为此,我们可以先创建一行已有文本的副本,以此作为再加工的模板。要在 Vim 中实现这一功能,需要我们先复制一行,然后紧接着进行粘贴:

 请注意 ddp 与 yyp 这两组按键操作的相似之处。前者是对文本行的剪切与粘贴操作,实际上是调换了两行的顺序。后者是针对行的复制与粘贴操作,即创建一行副本。

# 糟糕!我弄丢了复制内容

到目前为止,Vim 的删除、复制与粘贴操作看起来都非常直观,这些操作使得我们的日常工作得以轻松完成。现在让我们再来看一个场景,这次完成起来可没那么顺利。示例如下:

我们打算复制 collection 至无名寄存器,并用刚刚复制的内容替换 somethingInTheWay。下图展示了我们第一次尝试的过程。

由于光标一开始就已经位于要复制的单词之上,因此,我们只需输入 yiw 即可将其复制到无名寄存器中。

接下来,我们把光标移到要粘贴“collection”的位置,但在粘贴之前得先清理出一块空白区域才行。因此我们运行 diw,将 somethingInTheWay 一词删除。

现在,我们可以按 P 键将无名寄存器的内容粘贴至当前光标前面了。但我们得到的单词是“somethingInTheWay”,而不是之前复制的“collection”。到底发生了什么事?

diw 命令不仅删除了单词,而且还将它拷贝到了无名寄存器。改用广为人知的术语来说,diw 命令把该词剪切掉了。

很明显,我们做错了什么。当运行 diw 命令时,无名寄存器的内容被覆盖了。这就是为什么我们按 P 时得到的是刚刚删除的单词,而不是之前复制的单词。

为了解决这个问题,我们得深入了解 Vim 寄存器的工作原理才行。

编辑 (opens new window)
#Vim
上次更新: 5/27/2023, 1:02:05 PM
Vim 技巧 - 遍历改变列表
Vim 技巧 - 深入理解 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
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式